Поиск по сайту:

Как установить стек Linux, Apache, MariaDB, PHP (LAMP) на Debian 11


Введение

Стек «LAMP» — это группа программного обеспечения с открытым исходным кодом, которое обычно устанавливается вместе, чтобы позволить серверу размещать динамические веб-сайты и веб-приложения. Этот термин представляет собой аббревиатуру, обозначающую операционную систему Linux с веб-сервером Apache. данные сайта хранятся в базе данных MariaDB, а динамический контент обрабатывается PHP.

Хотя этот программный стек обычно включает MySQL в качестве системы управления базами данных, некоторые дистрибутивы Linux, включая Debian, используют MariaDB в качестве замены MySQL.

В этом руководстве вы установите стек LAMP на сервер Debian 11, используя MariaDB в качестве системы управления базой данных.

Предпосылки

Чтобы следовать этому руководству, вам понадобится сервер Debian 11 с учетной записью пользователя без полномочий root с поддержкой sudo и базовым брандмауэром. Это можно настроить с помощью нашего руководства по начальной настройке сервера для Debian 11.

Шаг 1 — Установка Apache и обновление брандмауэра

Веб-сервер Apache является одним из самых популярных веб-серверов в мире. Он хорошо задокументирован, имеет активное сообщество пользователей и широко использовался на протяжении большей части истории Интернета, что делает его отличным выбором для размещения веб-сайта.

Начните с обновления кеша менеджера пакетов. Если вы впервые используете sudo в этом сеансе, вам будет предложено ввести пароль пользователя, чтобы подтвердить, что у вас есть права на управление системными пакетами с помощью apt:

  1. sudo apt update

Затем установите Apache со следующим:

  1. sudo apt install apache2

Эта команда предложит вам подтвердить установку Apache. Подтвердите, написав Y, затем ENTER.

В Debian 11 UFW загружается с профилями приложений, которые можно использовать для настройки параметров брандмауэра. Просмотрите полный список профилей приложений, выполнив:

  1. sudo ufw app list

Перечисленные профили WWW используются для управления портами, используемыми веб-серверами:

Output
Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

Если вы проверите профиль WWW Full с помощью информации о приложении ufw, ваш вывод покажет, что он разрешает трафик на порты 80 и 443:

  1. sudo ufw app info "WWW Full"
Output
Profile: WWW Full Title: Web Server (HTTP,HTTPS) Description: Web Server (HTTP,HTTPS) Ports: 80,443/tcp

Затем разрешите входящий трафик HTTP и HTTPS для этого профиля:

  1. sudo ufw allow in "WWW Full"

Вы можете убедиться, что все прошло по плану, посетив общедоступный IP-адрес вашего сервера в веб-браузере:

http://your_server_ip

Это вернет веб-страницу Debian 11 Apache по умолчанию, которая предназначена для информационных и тестовых целей:

Если ваш браузер возвращает эту страницу, ваш веб-сервер теперь правильно установлен и доступен через брандмауэр.

Как найти общедоступный IP-адрес вашего сервера

Если вы не знаете общедоступный IP-адрес вашего сервера, вы можете узнать его несколькими способами. Обычно это адрес, который вы используете для подключения к серверу через SSH.

Есть несколько способов сделать это из командной строки. Во-первых, вы можете использовать инструменты iproute2, чтобы получить свой IP-адрес, запустив::

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Это вернет две или три строки назад. Все они являются правильными адресами, но ваш компьютер может использовать только один из них, поэтому не стесняйтесь пробовать каждый из них.

Альтернативный метод — использовать утилиту curl, чтобы связаться с внешней стороной, чтобы сообщить вам, как она видит ваш сервер. Вы можете запустить следующую команду и запросить у определенного сервера ваш IP-адрес:

  1. curl http://icanhazip.com

Какой бы метод вы ни предпочли, введите свой IP-адрес в веб-браузер, чтобы убедиться, что на вашем сервере запущена страница Apache по умолчанию.

Шаг 2 — Установка MariaDB

Теперь, когда у вас есть запущенный и работающий веб-сервер, вам необходимо установить систему базы данных, чтобы иметь возможность хранить и управлять данными для вашего сайта.

В Debian 11 метапакет mysql-server, который традиционно использовался для установки сервера MySQL, был заменен на default-mysql-server. Этот метапакет ссылается на MariaDB, ответвление сообщества исходного сервера MySQL от Oracle, и в настоящее время он является совместимым с MySQL сервером базы данных по умолчанию, доступным в репозиториях диспетчера пакетов на основе Debian.

Однако для долгосрочной совместимости рекомендуется вместо использования метапакета установить MariaDB, используя фактический пакет программы, mariadb-server.

Чтобы установить программное обеспечение MariaDB, запустите:

  1. sudo apt install mariadb-server

После завершения установки рекомендуется запустить сценарий безопасности, который предварительно устанавливается вместе с MariaDB. Этот сценарий удалит некоторые небезопасные настройки по умолчанию и заблокирует доступ к вашей системе баз данных. Запустите интерактивный скрипт, выполнив:

  1. sudo mysql_secure_installation

Этот сценарий проведет вас через ряд подсказок, где вы можете внести некоторые изменения в настройку MariaDB. Первое приглашение попросит вас ввести текущий пароль root базы данных. Не следует путать с системным корнем. Пользователь root базы данных является администратором с полными привилегиями в системе базы данных. Поскольку вы только что установили MariaDB и еще не вносили никаких изменений в конфигурацию, этот пароль будет пустым, поэтому нажмите ENTER в командной строке.

Следующее приглашение спрашивает, хотите ли вы установить пароль root для базы данных. Поскольку MariaDB использует специальный метод аутентификации для пользователя root, который обычно более безопасен, чем использование пароля, вам не нужно устанавливать его сейчас. Нажмите N, а затем ENTER.

Оттуда вы можете нажать Y, а затем ENTER, чтобы принять значения по умолчанию для всех последующих вопросов. Это удалит анонимных пользователей и тестовую базу данных, отключит удаленный вход в систему root и загрузит эти новые правила, чтобы MariaDB немедленно учитывала внесенные вами изменения.

Когда вы закончите, войдите в консоль MariaDB:

  1. sudo mariadb

Это подключится к серверу MariaDB в качестве пользователя root административной базы данных, что подразумевается использованием sudo при выполнении этой команды. Вы должны получить вывод, подобный следующему:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Обратите внимание, что вам не нужно было вводить пароль для подключения в качестве пользователя root. Это связано с тем, что методом аутентификации по умолчанию для административного пользователя MariaDB является unix_socket вместо пароль. Хотя на первый взгляд это может показаться проблемой безопасности, это делает сервер базы данных более безопасным, поскольку единственными пользователями, которым разрешено входить в систему в качестве пользователя root MariaDB, являются системные пользователи с привилегиями sudo, подключающиеся из консоли. или через приложение, работающее с теми же привилегиями. На практике это означает, что вы не сможете использовать администратора базы данных root для подключения из вашего PHP-приложения.

Для повышения безопасности лучше иметь выделенные учетные записи пользователей с менее широкими привилегиями, настроенными для каждой базы данных, особенно если вы планируете разместить несколько баз данных на своем сервере.

Вы можете выйти из консоли MariaDB следующим образом:

  1. exit

Теперь ваш сервер MariaDB установлен и защищен. Далее вы установите PHP, последний компонент в стеке LAMP.

Шаг 3 — Установка PHP

У вас установлен Apache для обслуживания вашего контента и установлена MariaDB для хранения и управления вашими данными. PHP — это компонент вашей установки, который будет обрабатывать код для отображения динамического содержимого конечному пользователю. Он может запускать сценарии, подключаться к вашим базам данных MariaDB для получения информации и передавать обработанный контент на ваш веб-сервер для отображения.

В дополнение к пакету php вам понадобится php-mysql, модуль PHP, который позволяет PHP взаимодействовать с базой данных на основе MySQL, такой как MariaDB. Вам также понадобится libapache2-mod-php, чтобы Apache мог обрабатывать файлы PHP. Базовые пакеты PHP будут автоматически установлены как зависимости.

Чтобы установить эти пакеты, выполните следующую команду:

  1. sudo apt install php libapache2-mod-php php-mysql

После завершения установки вы можете проверить свою версию PHP с помощью следующей команды:

  1. php -v
Output
PHP 7.4.30 (cli) (built: Jul 7 2022 15:51:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

На этом этапе ваш стек LAMP полностью готов к работе, но перед тестированием установки с помощью PHP-скрипта лучше всего настроить правильный виртуальный хост Apache для хранения файлов и папок вашего веб-сайта.

Шаг 4 — Создание виртуального хоста для вашего сайта

При использовании веб-сервера Apache вы можете создавать виртуальные хосты (аналогично блокам сервера в Nginx), чтобы инкапсулировать детали конфигурации и размещать более одного домена на одном сервере. В этом руководстве мы настроим домен с именем your_domain, но вы должны заменить его своим собственным доменным именем.

Примечание. Если вы используете DigitalOcean в качестве хостинг-провайдера DNS, ознакомьтесь с нашей документацией по продукту, чтобы получить подробные инструкции о том, как настроить новое доменное имя и указать его на свой сервер.

По умолчанию Apache предоставляет свое содержимое из каталога, расположенного по адресу /var/www/html, используя конфигурацию, содержащуюся в /etc/apache2/sites-available/000-default.conf. Вместо изменения файла конфигурации веб-сайта по умолчанию /var/www/html вы собираетесь создать новый виртуальный хост для тестирования среды PHP. Виртуальные хосты позволяют размещать несколько веб-сайтов на одном сервере Apache. Вы также создадите структуру каталогов в /var/www для сайта your_domain, оставив /var/www/html в качестве каталога по умолчанию, который будет обслуживаться, если клиент запрос не соответствует ни одному другому сайту.

Начните с создания корневого веб-каталога для вашего_домена следующим образом:

  1. sudo mkdir /var/www/your_domain

Затем назначьте владельца каталога с помощью переменной окружения $USER, которая будет ссылаться на вашего текущего системного пользователя:

  1. sudo chown -R $USER:$USER /var/www/your_domain

Затем откройте новый файл конфигурации в каталоге Apache sites-available, используя предпочитаемый вами редактор командной строки. Здесь мы будем использовать nano:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Это создаст новый пустой файл. Добавьте следующую базовую конфигурацию с вашим собственным доменным именем:

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain 
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Сохраните и закройте файл, когда закончите. Если вы используете nano, вы можете сделать это, нажав CTRL + X, затем Y и ENTER.

С помощью этой конфигурации VirtualHost вы указываете Apache обслуживать ваш_домен, используя /var/www/ваш_домен в качестве корневого веб-каталога. Если вы хотите протестировать Apache без доменного имени, вы можете удалить или закомментировать параметры ServerName и ServerAlias, добавив знак решетки (#) в начало строк каждой опции.

Теперь используйте a2ensite, чтобы включить этот виртуальный хост:

  1. sudo a2ensite your_domain

Возможно, вы захотите отключить веб-сайт по умолчанию, который устанавливается вместе с Apache. Это необходимо, если вы не используете собственное доменное имя, потому что в этом случае конфигурация Apache по умолчанию переопределит ваш виртуальный хост. Чтобы отключить веб-сайт Apache по умолчанию, запустите:

  1. sudo a2dissite 000-default

Чтобы убедиться, что ваш файл конфигурации не содержит синтаксических ошибок, выполните следующую команду:

  1. sudo apache2ctl configtest

Наконец, перезагрузите Apache, чтобы эти изменения вступили в силу:

  1. sudo systemctl reload apache2

Далее вы создадите PHP-скрипт для проверки правильности установки и настройки PHP на вашем сервере.

Шаг 5 — Тестирование обработки PHP на вашем веб-сервере

Теперь, когда у вас есть специальное место для размещения файлов и папок вашего веб-сайта, создайте тестовый скрипт PHP, чтобы убедиться, что Apache может обрабатывать и обрабатывать запросы на файлы PHP.

Начните с создания нового файла с именем info.php внутри вашей пользовательской корневой веб-папки:

  1. nano /var/www/your_domain/info.php

Это откроет пустой файл. Добавьте в файл следующий текст, который является действительным кодом PHP:

<?php
phpinfo();

Когда вы закончите, сохраните и закройте файл.

Чтобы протестировать сценарий, перейдите в веб-браузер и введите доменное имя или IP-адрес вашего сервера, а затем имя сценария, в данном случае это info.php:

http://your_domain/info.php

Вот пример веб-страницы PHP по умолчанию:

На этой странице представлена информация о вашем сервере с точки зрения PHP. Это полезно для отладки и проверки правильности применения ваших настроек.

Если вы видите эту страницу в своем браузере, ваша установка PHP работает должным образом.

После проверки соответствующей информации о вашем PHP-сервере на этой странице лучше всего удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и вашем сервере Debian. Для этого используйте rm:

  1. sudo rm /var/www/your_domain/info.php

Вы всегда можете воссоздать эту страницу, если вам понадобится снова получить доступ к информации позже.

Шаг 6 — Тестирование подключения к базе данных из PHP (необязательно)

Если вы хотите проверить, может ли PHP подключаться к MariaDB и выполнять запросы к базе данных, вы можете создать тестовую таблицу с тестовыми данными и запросить ее содержимое из PHP-скрипта. Прежде чем вы это сделаете, вам нужно создать тестовую базу данных и правильно настроить нового пользователя MariaDB для доступа к ней.

Создайте базу данных с именем example_database и пользователя с именем example_user. Вы можете заменить эти имена другими значениями.

Сначала подключитесь к консоли MariaDB, используя учетную запись root:

  1. sudo mariadb

Чтобы создать новую базу данных, выполните следующую команду из консоли MariaDB:

  1. CREATE DATABASE example_database;

Теперь создайте нового пользователя и предоставьте ему полные права доступа к пользовательской базе данных, которую вы создали.

Следующая команда создает нового пользователя с именем example_user, который проходит аутентификацию с помощью пароля. Мы определяем пароль этого пользователя как password, но вы должны заменить это значение безопасным паролем по вашему выбору:

  1. CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Затем предоставьте этому пользователю разрешение на доступ к базе данных example_database:

  1. GRANT ALL ON example_database.* TO 'example_user'@'%';

Это даст пользователю example_user полные привилегии над базой данных example_database, не позволяя этому пользователю создавать или изменять другие базы данных на вашем сервере.

Затем сбросьте привилегии, чтобы убедиться, что они сохранены и доступны в текущем сеансе:

  1. FLUSH PRIVILEGES;

После этого выйдите из оболочки MariaDB:

  1. exit

Вы можете проверить, есть ли у нового пользователя надлежащие разрешения, снова войдя в консоль MariaDB, на этот раз с использованием пользовательских учетных данных пользователя:

  1. mariadb -u example_user -p

Обратите внимание на флаг -p в этой команде, который запросит у вас пароль, используемый при создании пользователя example_user. После входа в консоль MariaDB подтвердите, что у вас есть доступ к базе данных example_database:

  1. SHOW DATABASES;

Это даст вам следующий результат:

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Затем создайте тестовую таблицу с именем todo_list. В консоли MariaDB выполните следующую инструкцию:

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

Вставьте несколько строк содержимого в тестовую таблицу. Повторите следующую команду несколько раз, используя разные значения, чтобы заполнить тестовую таблицу:

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Чтобы подтвердить, что данные были успешно сохранены в вашей таблице, запустите:

  1. SELECT * FROM example_database.todo_list;

Вы получите следующий вывод:

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Убедившись, что в вашей тестовой таблице есть действительные данные, вы можете выйти из консоли MariaDB:

  1. exit

Теперь вы можете создать скрипт PHP, который будет подключаться к MariaDB и запрашивать ваш контент. Создайте новый файл PHP в пользовательском корневом веб-каталоге, используя предпочитаемый вами редактор:

  1. nano /var/www/your_domain/todo_list.php

Следующий PHP-скрипт подключается к базе данных MariaDB и запрашивает содержимое таблицы todo_list, отображая результаты в виде списка. Если есть проблема с подключением к базе данных, будет выдано исключение.

Добавьте этот контент в свой скрипт todo_list.php, не забыв заменить example_user и пароль значения с вашими собственными:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Сохраните и закройте файл, когда закончите редактирование.

Теперь вы можете получить доступ к этой странице в своем веб-браузере, посетив доменное имя или общедоступный IP-адрес вашего веб-сайта, а затем /todo_list.php:

http://your_domain/todo_list.php

Эта веб-страница покажет вашему посетителю контент, который вы вставили в свою тестовую таблицу:

Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MariaDB.

Заключение

В этом руководстве вы создали гибкую основу для обслуживания веб-сайтов и приложений PHP для ваших посетителей, используя Apache в качестве веб-сервера и MariaDB в качестве системы базы данных.

В качестве следующего шага вы должны обеспечить безопасность подключений к вашему веб-серверу, обслуживая их через HTTPS. Для этого вы можете использовать How to Install and Use Composer для управления зависимостями и пакетами в PHP.