Image

(Последнее изменение: 06.11.2024)
В этом руководстве показано, как установить стек LEMP (Nginx, MariaDB и PHP-8.2) в Debian 12. Программный стек — это набор программных инструментов, объединенных вместе. LEMP означает Linux, Nginx (Engine-X), MariaDB/MySQL и PHP, все они имеют открытый исходный код и бесплатны для использования. Это наиболее распространенный программный стек, который поддерживает динамические веб-сайты и веб-приложения. Linux — это операционная система; Nginx — веб-сервер; MariaDB/MySQL — это сервер базы данных, а PHP — это серверный язык сценариев, отвечающий за создание динамических веб-страниц. В данном руководстве мы выполняем установку от пользователя root, если у Вас обычный, используйте команду sudo.


Наиболее часто задаваемые вопросы:

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

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


Конфигурация преднастроенного сервера доступна на форме заказа.

1. Обновите пакеты программного обеспечения

Прежде чем мы установим стек LEMP, рекомендуется обновить репозиторий и пакеты программного обеспечения. Выполните следующие команды в ОС Debian 12.

apt update
apt upgrade

2. Установите веб-сервер Nginx

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

apt install nginx

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

systemctl enable nginx

Затем запустите Nginx с помощью этой команды:

systemctl start nginx

Теперь проверьте его состояние.

systemctl status nginx

Теперь введите общедоступный IP-адрес вашего сервера Debian 12 в адресной строке браузера. Вы должны увидеть веб-страницу «Добро пожаловать в Nginx», что означает, что веб-сервер Nginx работает правильно. Если вы устанавливаете LEMP на свой локальный компьютер с Debian 12, введите 127.0.0.1 или localhost в адресной строке браузера.

Если соединение отклонено или не может быть установлено, возможно, брандмауэр блокирует входящие запросы на порт TCP 80. Если вы используете брандмауэр iptables, вам необходимо выполнить следующую команду, чтобы открыть порт TCP 80.

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Если вы используете брандмауэр UFW, запустите эту команду, чтобы открыть TCP-порт 80.

ufw allow http

Теперь нам нужно сделать www-data (пользователя Nginx) владельцем веб-каталога. По умолчанию он принадлежит пользователю root.

chown www-data:www-data /usr/share/nginx/html -R

3. Установите сервер базы данных MariaDB

MariaDB является заменой MySQL. Он разработан бывшими членами команды MySQL, которые обеспокоены тем, что Oracle может превратить MySQL в продукт с закрытым исходным кодом. Введите следующую команду, чтобы установить MariaDB в Debian 12.

apt install mariadb-server mariadb-client

После установки сервер MariaDB должен быть запущен автоматически. Используйте systemctl, чтобы проверить его статус.

systemctl status mariadb

Если он не запущен, запустите его с помощью этой команды:

systemctl start mariadb

Чтобы разрешить автоматический запуск MariaDB во время загрузки, запустите

systemctl enable mariadb

Теперь запустите сценарий безопасности после установки.

mysql_secure_installation

Когда вас попросят ввести пароль root для MariaDB, нажмите клавишу Enter, так как пароль root еще не установлен. Затем введите y, чтобы установить пароль root для сервера MariaDB.

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

По умолчанию пакет MaraiDB в Debian использует unix_socket для аутентификации пользователя, что в основном означает, что вы можете использовать имя пользователя и пароль ОС для входа в консоль MariaDB. Таким образом, вы можете запустить следующую команду для входа в систему, не предоставляя root-пароль MariaDB.

mariadb -u root

Для выхода запустите

exit;

4. Установим PHP-8.2

PHP-8.2 включен в репозиторий Debian 12 и имеет незначительное улучшение производительности по сравнению с PHP-7.x. Введите следующую команду, чтобы установить PHP-8.2 и некоторые распространенные расширения.

apt install php php-fpm php-mysql php-common php-cli php-common php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

Расширения PHP обычно необходимы для систем управления контентом (CMS), таких как WordPress. Например, если в вашей установке отсутствует php8.2-xml, то некоторые страницы вашего сайта WordPress могут быть пустыми, и вы можете найти ошибку в журнале ошибок Nginx, например:

Сообщение PHP: Неустранимая ошибка PHP: необработанная ошибка: вызов неопределенной функции xml_parser_create()

Установка этих расширений PHP гарантирует бесперебойную работу вашей CMS. Теперь запустите php8.2-fpm.

systemctl start php8.2-fpm

Включите автозапуск во время загрузки.

systemctl enable php8.2-fpm

Проверить статус:

systemctl status php8.2-fpm

5. Создадим серверный блок Nginx

Блок сервера Nginx похож на виртуальный хост в Apache. Мы не будем использовать блок сервера по умолчанию, потому что он не подходит для запуска PHP-кода, и если мы его изменим, он превратится в беспорядок. Поэтому удалите символическую ссылку по умолчанию в каталоге с поддержкой сайтов, выполнив следующую команду. (Он по-прежнему доступен как /etc/nginx/sites-available/default.)

rm /etc/nginx/sites-enabled/default

Затем используйте текстовый редактор командной строки, такой как Nano, чтобы создать новый файл блока сервера в каталоге /etc/nginx/conf.d/. Вставьте следующий текст в файл. Следующий фрагмент заставит Nginx прослушивать порт 80 IPv4 и порт 80 IPv6 с универсальным именем сервера.

nano /etc/nginx/conf.d/default.conf

server {

  listen 80;
  listen [::]:80;
  server_name _;
  root /usr/share/nginx/html/;
  index index.php index.html index.htm index.nginx-debian.html;
  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

 # A long browser cache lifetime can speed up repeat visits to your page
  location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
  }

  # disable access to hidden files
  location ~ /\.ht {
      access_log off;
      log_not_found off;
      deny all;
  }
}

Сохраните и закройте файл. (Чтобы сохранить файл в текстовом редакторе Nano, нажмите Ctrl+O, затем нажмите Enter для подтверждения. Чтобы выйти, нажмите Ctrl+X.)

Затем протестируйте конфигурации Nginx.

nginx -t

Если тест прошел успешно, перезагрузите Nginx.

systemctl reload nginx

6. Протестируем PHP

Чтобы протестировать PHP-FPM с веб-сервером Nginx, нам нужно создать файл info.php в каталоге webroot.

nano /usr/share/nginx/html/info.php


Сохраните и закройте файл. Теперь в адресной строке браузера введите server-ip-address/info.php. Замените серверный IP-адрес вашим фактическим IP-адресом. Если вы следуете этому руководству на своем локальном компьютере, введите 127.0.0.1/info.php или localhost/info.php.

Вы увидите информацию PHP вашего сервера. Это означает, что PHP-скрипты могут правильно работать с веб-сервером Nginx.

7. Автоматический перезапуск Nginx

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

systemctl restart nginx

Вместо того, чтобы вручную вводить эту команду, мы можем сделать автоматический перезапуск Nginx, отредактировав системный модуль nginx.service systemd. Чтобы переопределить конфигурацию службы systemd по умолчанию, мы создаем отдельный каталог.

mkdir -p /etc/systemd/system/nginx.service.d/

Затем создайте файл в этом каталоге.

nano /etc/systemd/system/nginx.service.d/restart.conf

Добавьте в файл следующие строки, которые заставят Nginx автоматически перезапускаться через 5 секунд после обнаружения сбоя. Значение RetartSec по умолчанию — 100 мс, что слишком мало. Nginx может жаловаться, что «запрос на запуск повторяется слишком быстро», если RestartSec недостаточно велик.


[Service]

Restart=always
RestartSec=5s

Сохраните и закройте файл. Затем перезагрузите systemd, чтобы изменения вступили в силу.

systemctl daemon-reload

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

pkill nginx

Затем проверьте статус Nginx. Вы обнаружите, что Nginx автоматически перезапускается.

systemctl status nginx

LEMP (Nginx, MariaDB и PHP8.2) успешно установлен на Debian 12. Все эти действия уже выполнены в предустановленной конфигурации LEMP Debian 12 для VPS серверов в форме заказа.




Андрей Владимирович
29.06.2023 18:52
Отличная инструкция. всё разложено по полочкам. Все команды верные и грамотные. Все коментарии - по делу. Отдельное спасибо за "nano", так как обычно отъявленные сторонники ОС Linux навязывают использование "vi".
Виктор
31.12.2023 12:04
Благодарю!
Сработало!, впервые сталкиваюсь с nginx.
Алексей
07.02.2024 10:32
Ужас, у меня команда ноу фаунд на этапе нгинкс -т, что мне делать
Synay Support
07.02.2024 11:59
Только нужно на английском nginx -t, попробуйте переустановить
apt remove nginx
apt install nginx
Александр
16.07.2024 14:30
6 пункт - Протестируем PHP
там в созданный документ по адресу /usr/share/nginx/html/info.php нужно внести следующее

<?php
phpinfo();
?>

тогда при переходе по адресу 127.0.0.1/info.php или localhost/info.php будет выдаваться информация об установленной версии php