Как установить Linux, Nginx, MariaDB, PHP (стек LEMP) на Debian 10

Вступление

Программный стек 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.

Related