Вступление
Программный стек LEMP - это группа программного обеспечения, которая может использоваться для обслуживания динамических веб-страниц и веб-приложений. Название «LEMP» является аббревиатурой, которая описывает операционную систему L inux с веб-сервером (* E *) Nginx. Внутренние данные хранятся в базе данных M ariaDB, а динамическая обработка обрабатывается P HP.
Хотя этот программный стек обычно включает * MySQL * в качестве системы управления базами данных, некоторые дистрибутивы Linux, в том числе Debian, используют https://mariadb.org [MariaDB] в качестве замены для MySQL.
В этом руководстве вы установите стек LEMP на сервере Debian 10, используя MariaDB в качестве системы управления базами данных.
Предпосылки
Для завершения этого руководства вам понадобится доступ к серверу Debian 10. Этот сервер должен иметь обычного пользователя, настроенного с привилегиями + sudo +
, и брандмауэр, включенный с помощью + ufw +
. Чтобы настроить это, вы можете воспользоваться нашим Initial Server Setup с Debian 10 руководством.
Шаг 1 - Установка веб-сервера Nginx
Чтобы обслуживать веб-страницы посетителям вашего сайта, мы будем использовать Nginx, популярный веб-сервер, который хорошо известен своей общей производительностью и стабильностью.
Все программное обеспечение, которое вы будете использовать для этой процедуры, будет поставляться непосредственно из репозиториев пакетов Debian по умолчанию. Это означает, что вы можете использовать пакет управления пакетами + apt +
для завершения установки.
Поскольку вы впервые используете + apt +
для этого сеанса, вам следует начать с обновления индекса локального пакета. Затем вы можете установить сервер:
sudo apt update
sudo apt install nginx
В Debian 10 Nginx настроен для запуска после установки.
Если у вас запущен брандмауэр + ufw +
, вам нужно разрешить соединения с Nginx. Вы должны включить наиболее ограничивающий профиль, который будет по-прежнему разрешать трафик, который вы хотите. Поскольку вы еще не настроили SSL для своего сервера, сейчас вам нужно только разрешить HTTP-трафик через порт «+ 80 +».
Вы можете включить это, набрав:
sudo ufw allow 'Nginx HTTP'
Вы можете проверить изменение, набрав:
sudo ufw status
Вы должны увидеть разрешенный HTTP-трафик в отображаемом выводе:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Теперь проверьте, работает ли сервер, открыв доменное имя или общедоступный IP-адрес вашего сервера в веб-браузере. Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете общедоступный IP-адрес вашего сервера, вы можете найти его, набрав в своем терминале одно из следующих действий:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Это распечатает несколько IP-адресов. Вы можете попробовать каждый из них по очереди в вашем веб-браузере.
Введите один из адресов, которые вы получите в своем веб-браузере. Это должно привести вас к целевой странице Nginx по умолчанию:
http://
изображение: https: //assets.digitalocean.com/articles/lemp_debian8/THcJfIl.png [страница по умолчанию для Nginx]
Если вы видите вышеупомянутую страницу, вы успешно установили Nginx.
Шаг 2 - Установка MariaDB
Теперь, когда у вас есть запущенный веб-сервер, вам нужно установить систему баз данных, чтобы иметь возможность хранить и управлять данными для вашего сайта.
В Debian 10 метапакет + mysql-server +
, который традиционно использовался для установки сервера MySQL, был заменен на + default-mysql-server +
. Этот метапакет ссылается на MariaDB, ветвь сообщества исходного сервера MySQL от Oracle, и в настоящее время он является стандартным MySQL-совместимым сервером базы данных, доступным в репозиториях диспетчера пакетов на основе debian.
Однако для более долгосрочной совместимости рекомендуется вместо использования метапакета установить MariaDB с использованием фактического пакета программы + mariadb-server +
.
Чтобы установить это программное обеспечение, запустите:
sudo apt install mariadb-server
После завершения установки рекомендуется запустить сценарий безопасности, который предустановлен вместе с MariaDB. Этот скрипт удалит некоторые небезопасные настройки по умолчанию и заблокирует доступ к вашей системе базы данных. Запустите интерактивный скрипт, выполнив:
sudo mysql_secure_installation
Этот скрипт проведет вас через серию подсказок, в которых вы сможете внести некоторые изменения в настройку MariaDB. Первая подсказка попросит вас ввести текущий * пароль root * базы данных. Это не следует путать с * системным корнем *. Пользователь * базы данных root * является администратором с полными привилегиями над системой баз данных. Поскольку вы только что установили MariaDB и еще не внесли никаких изменений в конфигурацию, этот пароль будет пустым, поэтому просто нажмите + ENTER +
в приглашении.
В следующем запросе вас спросят, хотите ли вы установить пароль * базы данных root *. Поскольку MariaDB использует специальный метод аутентификации для пользователя * root *, который, как правило, безопаснее, чем использование пароля, вам не нужно устанавливать его сейчас. Введите + A +
и затем нажмите + ENTER
.
Оттуда вы можете нажать + Y +
, а затем + ENTER +
, чтобы принять значения по умолчанию для всех последующих вопросов. Это приведет к удалению анонимных пользователей и тестовой базы данных, отключению удаленного входа в систему * root * и загрузке этих новых правил, чтобы MariaDB немедленно учитывала внесенные вами изменения. + Когда вы закончите, войдите в консоль MariaDB, набрав:
sudo mariadb
Он подключится к серверу MariaDB как пользователь административной базы данных * root *, что подразумевается при использовании + sudo +
при выполнении этой команды. Вы должны увидеть результат примерно так:
OutputWelcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10
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 +
вместо + password +
. Несмотря на то, что на первый взгляд это может показаться проблемой безопасности, это делает сервер базы данных более безопасным, поскольку единственные пользователи, которым разрешено войти в систему как пользователь * root * MariaDB, - это системные пользователи с привилегиями sudo, подключающиеся с консоли или через запущенное приложение с такими же привилегиями. С практической точки зрения это означает, что вы не сможете использовать администратора базы данных * root * для подключения из своего приложения PHP.
Для повышения безопасности лучше иметь выделенные учетные записи пользователей с менее широкими привилегиями для каждой базы данных, особенно если вы планируете разместить на своем сервере несколько баз данных. Чтобы продемонстрировать такую настройку, мы создадим базу данных с именем * example_database * и пользователя с именем * example_user *, но вы можете заменить эти имена другими значениями. + Чтобы создать новую базу данных, запустите следующую команду из консоли MariaDB:
CREATE DATABASE ;
Теперь вы можете создать нового пользователя и предоставить ему полные права доступа к пользовательской базе данных, которую вы только что создали. Следующая команда определяет пароль этого пользователя как ++
, но вы должны заменить это значение на безопасный пароль по вашему выбору.
GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
Это даст пользователю * example_user * полные права на базу данных * example_database *, не позволяя этому пользователю создавать или изменять другие базы данных на вашем сервере.
Сбросьте привилегии, чтобы убедиться, что они сохранены и доступны в текущем сеансе:
FLUSH PRIVILEGES;
После этого выйдите из оболочки MariaDB:
exit
Вы можете проверить, есть ли у нового пользователя соответствующие разрешения, снова войдя в консоль MariaDB, на этот раз с использованием пользовательских учетных данных:
mariadb -u -p
Обратите внимание на флаг + -p +
в этой команде, который запросит у вас пароль, использованный при создании пользователя * example_user *. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных * example_database *:
SHOW DATABASES;
Это даст вам следующий вывод:
Output+--------------------+
| Database |
+--------------------+
| |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
Чтобы выйти из оболочки MariaDB, введите:
exit
На этом этапе ваша система баз данных настроена, и вы можете перейти к установке PHP, последнего компонента стека LEMP.
Шаг 3 - Установка PHP для обработки
У вас установлен Nginx для обслуживания вашего контента и MySQL для хранения ваших данных и управления ими. Теперь вы можете установить PHP для обработки кода и создания динамического контента для веб-сервера.
В то время как Apache встраивает интерпретатор PHP в каждый запрос, Nginx требуется внешняя программа для обработки PHP и выполнения функции bridge между самим интерпретатором PHP и веб-сервером. Это позволяет повысить общую производительность большинства веб-сайтов на основе PHP, но требует дополнительной настройки. Вам нужно установить + php-fpm +
, что означает «менеджер процессов PHP fastCGI», и указать Nginx передавать запросы PHP в это программное обеспечение для обработки. Кроме того, вам понадобится + php-mysql
и модуль PHP, который позволяет PHP взаимодействовать с базами данных на основе MySQL. Базовые пакеты PHP будут автоматически установлены как зависимости.
Чтобы установить пакеты + php-fpm
и` + php-mysql`, запустите:
sudo apt install php-fpm php-mysql
Теперь у вас установлены компоненты PHP. Далее вы настроите Nginx для их использования.
Шаг 4 - Настройка Nginx для использования процессора PHP
При использовании веб-сервера Nginx server blocks (аналогично виртуальным хостам в Apache) можно использовать для инкапсуляции деталей конфигурации и размещения нескольких доменов на одном сервере. В этом руководстве мы будем использовать * your_domain * в качестве примера доменного имени. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, посетите наш introduction to DigitalOcean DNS.
В Debian 10 Nginx имеет один серверный блок, включенный по умолчанию, и настроен на обслуживание документов вне каталога в + / var / www / html +
. Хотя это хорошо работает для одного сайта, управление может быть затруднено, если вы размещаете несколько сайтов. Вместо того, чтобы модифицировать + / var / www / html +
, давайте создадим структуру каталогов внутри + / var / www +
для веб-сайта * your_domain *, оставив + / var / www / html +
в качестве каталога по умолчанию для обслуживаться, если запрос клиента не совпадает ни с одним другим сайтом.
Создайте корневой веб-каталог для * your_domain * следующим образом:
sudo mkdir /var/www/
Затем назначьте владельца каталога с помощью переменной среды $ USER, которая должна ссылаться на вашего текущего системного пользователя:
sudo chown -R $USER:$USER /var/www/
Затем откройте новый файл конфигурации в каталоге + sites-available +
в Nginx, используя предпочитаемый редактор командной строки. Здесь мы будем использовать + nano +
:
sudo nano /etc/nginx/sites-available/
Это создаст новый пустой файл. Вставьте в следующую конфигурацию:
/ И т.д. / Nginx / сайты Недоступные / your_domain
server {
listen 80;
listen [::]:80;
root /var/www/;
index index.php index.html index.htm;
server_name ;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}
Это базовая конфигурация, которая прослушивает порт + 80 +
и обслуживает файлы из только что созданного вами веб-корня. Он будет отвечать только на запросы к хосту или IP-адресу, указанному после + server_name +
, и любые файлы, оканчивающиеся на + .php +
, будут обработаны + php-fpm +
до того, как Nginx отправит результаты пользователю.
Когда вы закончите редактирование, сохраните и закройте файл. Если вы использовали + nano +
для создания файла, сделайте это, набрав + CTRL +
+ + X +
, а затем + y +
и + ENTER +
для подтверждения.
Активируйте свою конфигурацию, связавшись с файлом конфигурации из каталога + sites-enabled +
Nginx:
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
Это скажет Nginx использовать конфигурацию при следующей перезагрузке. Вы можете проверить свою конфигурацию на наличие синтаксических ошибок, набрав:
sudo nginx -t
Если сообщается о каких-либо ошибках, вернитесь к файлу конфигурации, чтобы просмотреть его содержимое, прежде чем продолжить.
Когда вы будете готовы, перезагрузите Nginx, чтобы внести изменения:
sudo systemctl reload nginx
Затем вы создадите файл в своем новом корневом веб-каталоге, чтобы протестировать обработку PHP.
Шаг 5 - Создание PHP-файла для проверки конфигурации
Ваш стек LEMP теперь должен быть полностью настроен. Вы можете проверить это, чтобы убедиться, что Nginx может правильно передать файлы + .php +
вашему процессору PHP.
Вы можете сделать это, создав тестовый файл PHP в корневом каталоге вашего документа. Откройте новый файл с именем + info.php +
в корневом каталоге вашего документа в текстовом редакторе:
nano /var/www//info.php
Введите или вставьте следующие строки в новый файл. Это действительный код PHP, который будет возвращать информацию о вашем сервере:
/var/www/your_domain/info.php
<?php
phpinfo();
Когда вы закончите, сохраните и закройте файл, набрав + CTRL +
+ + X +
, а затем + y +
и + ENTER +
для подтверждения.
Теперь вы можете получить доступ к этой странице в своем веб-браузере, посетив имя домена или общедоступный IP-адрес, который вы указали в файле конфигурации Nginx, а затем + / info.php +
:
http:///info.php
Вы увидите веб-страницу, содержащую подробную информацию о вашем сервере:
изображение: https: //assets.digitalocean.com/articles/lemp_debian10/phpinfo.png [информация о странице PHP]
После проверки соответствующей информации о вашем PHP-сервере через эту страницу лучше всего удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и вашем сервере Debian. Вы можете использовать + rm +
, чтобы удалить этот файл:
rm /var/www//info.php
Вы всегда можете восстановить этот файл, если он понадобится вам позже. Далее мы проверим соединение с базой данных со стороны PHP.
Шаг 6 - Тестирование соединения с базой данных из PHP (необязательно)
Если вы хотите проверить, может ли PHP подключиться к MariaDB и выполнить запросы к базе данных, вы можете создать тестовую таблицу с фиктивными данными и запросить ее содержимое из сценария PHP.
Сначала подключитесь к консоли MariaDB с пользователем базы данных, который вы создали по ссылке: # step-2-% E2% 80% 94-installation-mariadb [Шаг 2] этого руководства:
mariadb -u -p
Создайте таблицу с именем * todo_list *. В консоли MariaDB выполните следующую инструкцию:
CREATE TABLE . (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
Теперь вставьте несколько строк содержимого в тестовую таблицу. Возможно, вы захотите повторить следующую команду несколько раз, используя разные значения:
INSERT INTO . (content) VALUES ("");
Чтобы подтвердить, что данные были успешно сохранены в вашей таблице, выполните:
SELECT * FROM .;
Вы увидите следующий вывод:
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:
exit
Теперь вы можете создать PHP-скрипт, который будет подключаться к MariaDB и запрашивать ваш контент. Создайте новый PHP-файл в своем пользовательском корневом веб-каталоге, используя предпочитаемый вами редактор. Для этого мы будем использовать + nano
:
nano /var/www//
Добавьте следующее содержимое в ваш PHP-скрипт:
<?php
$user = "";
$password = "";
$database = "";
$table = "";
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-адрес, который вы указали в файле конфигурации Nginx, а затем + / todo_list.php +
:
http:///todo_list.php
Вы должны увидеть страницу, подобную этой, показывающую содержимое, которое вы вставили в свою тестовую таблицу:
image: https: //assets.digitalocean.com/articles/lemp_debian10/todo_list.png [Пример списка задач PHP]
Это означает, что ваша среда PHP готова для подключения и взаимодействия с вашим сервером MariaDB.
Заключение
В этом руководстве вы создали гибкую основу для предоставления посетителям веб-сайтов и приложений с PHP, используя Nginx в качестве веб-сервера. Вы настроили Nginx для обработки запросов PHP через + php-fpm +
, а также настроили базу данных MariaDB для хранения данных вашего веб-сайта.
Для дальнейшего улучшения текущих настроек вы можете зайти на install Composer для управления зависимостями и пакетами в PHP, и вы также можете install сертификат OpenSSL для вашего сайта используя Let’s Encrypt.