Доброго времени суток, уважаемые читатели. Сегодня тема статьи: "Установка LEMP в Debian 10". Будем устанавливать и настраивать веб-окружение LEMP, в операционной системе Debian 10.

LEMP – это комплект серверного программного обеспечения (Linux, Nginx, MySQL, PHP), веб-окружение для работы сайтов и веб-приложений.

В статье я буду использовать доменное имя test.ru, которое предварительно прописал в файле hosts, за ip-адресом сервера.

Создание директорий для работы сайта

  • Начнём с того, что создадим инфраструктуру для работы будущего сайта. Создаём директорию для сайта, а в ней директории для файлов сайта, и логов веб-сервера.
# mkdir -p /var/www/test.ru/{site,log}

Установка веб-сервера Nginx в Debian 10

Установку веб-сервера Nginx, можно произвести либо из внутреннего архива пакетов, либо подключив архив пакетов официального сайта Nginx. Во втором случае, будет возможность установки более новой версии веб-сервера.

Как подключить официальный репозиторий, можно узнать на официальном сайте: https://nginx.org/ru/linux_packages.html#Debian

  • Запускаем команду установки веб-сервера:
# apt install nginx
  • В процессе установки, Nginx будет запущен, и добавлен в автозагрузку.

Создание конфигурации для сайта в Nginx

  • Настройку веб-сервера, нужно начать с удаления дефолтной конфигурации. Заходим в директории /etc/nginx/sites-enabled/ и /etc/nginx/sites-available/, удаляем дефолтный конфиг default, и ссылку на него.
  • Создаём конфигурационный файл для будущего сайта: /etc/nginx/sites-enabled/test.ru.conf.
  • В конфигурацию включаем поддержку PHP и HTTPS.

server {
     listen 80;
     server_name test.ru www.test.ru;
     index index.php index.html index.htm;
     access_log /var/www/test.ru/log/access.log;
     error_log /var/www/test.ru/log/error.log;
     root /var/www/test.ru/site/;
     return 301 https://$server_name$request_uri;

}

server {
     listen  443;
     server_name test.ru www.test.ru;
     index index.php index.html index.htm;
     access_log /var/www/test.ru/log/ssl-access.log;
     error_log /var/www/test.ru/log/ssl-error.log;
     root /var/www/test.ru/site/;
     ssl on;
     ssl_certificate /etc/letsencrypt/live/test.ru/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/test.ru/privkey.pem;
     ssl_protocols TLSv1.2;
     ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
     ssl_prefer_server_ciphers on;



 location / {
     try_files $uri $uri/ /index.php?$args;
 }
 location ~ .php$ {
     try_files  $uri =404;
     fastcgi_pass   unix:/run/php/php7.3-fpm.sock;
     fastcgi_index index.php;
     fastcgi_param DOCUMENT_ROOT /var/www/test.ru/site/;
     fastcgi_param SCRIPT_FILENAME /var/www/test.ru/site$fastcgi_script_name;
     fastcgi_param PATH_TRANSLATED /var/www/test.ru/site$fastcgi_script_name;
     include fastcgi_params;
     fastcgi_param QUERY_STRING $query_string;
     fastcgi_param REQUEST_METHOD $request_method;
     fastcgi_param CONTENT_TYPE $content_type;
     fastcgi_param CONTENT_LENGTH $content_length;
     fastcgi_intercept_errors on;
     fastcgi_ignore_client_abort off;
     fastcgi_connect_timeout 60;
     fastcgi_send_timeout 180;
     fastcgi_read_timeout 180;
     fastcgi_buffer_size 128k;
     fastcgi_buffers 4 256k;
     fastcgi_busy_buffers_size 256k;
     fastcgi_temp_file_write_size 256k;
 }
 location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
      expires modified +30d;
      access_log off;
}

 location = /favicon.ico {
     log_not_found off;
     access_log off;
 }
 location = /robots.txt {
     rewrite ^ /robots.txt break;
     allow all;
     log_not_found off;
     access_log off;
 }
 }

Настройка Firewall для работы Nginx в Debian 10

  • Для работы веб-сайта по протоколу HTTPS, нужно открыть в системном брандмауэре 80 и 443 порты.
  • Для UFW, команды будут такими:
# ufw allow 80/tcp
# ufw allow 443/tcp
  • Если Вы используете iptables, то нужно выполнить:
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables-save > /etc/iptables/rules.v4

Установка и настройка сервера баз данных MariaDB в Debian 10

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

Как произвести подключение официального репозитория, я уже писал в статье об установке LAMP в Debian 10.

  • Запускаем установку сервера баз данных.
# apt install mariadb-server mariadb-client
  • Сервер будет установлен, и добавлен в автозагрузку.
  • Сразу после установки, нужно произвести первоначальную настройку безопасности MariaDB.
# mysql_secure_installation
  • Первое действие которое будет запрошено после запуска скрипта, это просьба ввести пароль root. Пароля мы пока не создавали, поэтому просто жмём на «Enter». Далее нужно будет создать пароль, и на все вопросы ответить (Y).
  • После настройки безопасности, можно создать базу данных для будущего сайта, а так же пользователя с паролем для этой базы.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE test;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON test.* TO 'admin'@'localhost' IDENTIFIED BY '123';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

  • Я создал базу данных test, пользователя admin, и пароль 123.

Установка PHP-FPM и требуемых модулей в Debian 10

  • Для работы с динамическим содержимым, Nginx требуется PHP-FPM. Производим установку PHP-FPM, и некоторых дополнительных модулей.
# apt install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
  • PHP-FPM будет установлен, и добавлен в автозагрузку.
  • Директория конфигурации для PHP-FPM в Debian 10, зависит от версии PHP. В моём случае, это /etc/php/7.3/fpm.

Сертификат Let’s Encrypt для Nginx в Debian 10

  • Чтобы иметь возможность использования сертификатов от Let’s Encrypt, нужно установить на сервер утилиту certbot. Помимо самой утилиты, будет настроено автообновление сертификатов, и таймер запуска обновлений.
# apt install certbot python3-certbot-nginx
  • Вот команды для проверки таймера, и запуска обновления вручную
# systemctl status certbot.timer
# certbot renew --dry-run
  • Чтобы получить сертификат, нужно запустить соответствующую команду.
# certbot --nginx -d test.ru -d www.test.ru
  • В процессе создания сертификата, Вам нужно будет указать свой email, согласиться с правилами использования, отказаться или согласиться с рассылкой, и отказаться от настройки редиректа.
  • Редирект уже настроен в конфигурационном файле сайта, который мы добавили ранее.
  • После создания сертификата и установки PHP, можно загружать файлы сайта в корневую директорию, и после этого настроить нужные права.
# chown www-data:www-data -R /var/www/test.ru/site/
# chmod -R 0775 /var/www/test.ru/site/
# chown root:www-data /var/lib/php/sessions/
# chown -R www-data:www-data /var/lib/php/sessions/
  • Перезапускаем веб-сервер.
# systemctl restart nginx
  • После всех произведённых действий, веб-окружение полностью работоспособно.

Установка phpMyAdmin для Nginx в Debian 10

  • PhpMyAdmin отсутствует во внутреннем архиве пакетов Debian 10. Для его установки, можно скачать архив с официального сайта, и произвести кучу разных донастроек. Либо облегчить себе задачу, подключив архив пакетов предыдущей версии Debian 9, и произведя установку из него. Версия phpMyAdmin будет не совсем новая, но поддерживаемая.
  • Для подключения архива пакетов Debian 9, нужно в файле /etc/apt/sources.list, добавить две строчки.
deb http://deb.debian.org/debian/ stretch main contrib non-free
deb-src http://deb.debian.org/debian/ stretch main contrib non-free
  • Запускаем обновление apt.
# apt update
  • После произведённых действий, можно запускать установку phpMyAdmin.
# apt install phpmyadmin php-curl
  • В процессе установки, открываются два окна.
  • В первом случае, нас просят выбрать веб-сервер для автоматической конфигурации. Nginx отсутствует в предложенном списке, поэтому ничего не выбираем, а просто жмём на «ОК».
выбор веб-сервера для конфигурации при установке phpMyAdmin
  • Во втором окне, нам предлагают произвести автоматическую конфигурацию базы данных phpMyAdmin.
  • Соглашаемся, и жмём на «Да».
настройка базы данных для phpMyAdmin
  • Чтобы phpMyAdmin стал доступен, нужно создать символьную ссылку на директорию его нахождения, в корневой директории сайта. Имя для создаваемой ссылки, лучше придумать в формате бессвязных символов.
  • Это будет лучшая защита Вашего phpMyAdmin, так как конечный адрес будете знать только Вы.
# ln -s /usr/share/phpmyadmin /var/www/test.ru/site/Wb2qAtbxT7VcxzQ
  • В моём случае, для доступа к phpMyAdmin, ссылка будет такой:
https://test.ru/Wb2qAtbxT7VcxzQ

Настройка ротации логов Nginx в Debian 10

  • И последнее что нам осталось сделать, это настроить ротацию логов веб-сервера.
  • Для этого в файле /etc/logrotate.d/nginx, добавляем одну строчку.

/var/www/*/log/*log

настройка ротации логов Nginx
  • Вот и всё. Теперь ротация наших логов будет производиться по правилам, установленным по умолчанию.

Сегодня мы рассмотрели тему: "Установка LEMP в Debian 10". Произвели установку и настройку веб-окружения LEMP, в операционной системе Debian 10. Смотрите так же, видео по теме.

Надеюсь статья была вам полезна. До встречи в новых статьях.

С уважением, Андрей Бондаренко.


Видео на тему "Установка LEMP в Debian 10":