Установка LEMP в Debian 10

Доброго времени суток, уважаемые читатели. Сегодня тема статьи: "Установка 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, так как конечный адрес будете знать только Вы.
# 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

- Вот и всё. Теперь ротация наших логов будет производиться по правилам, установленным по умолчанию.
Сегодня мы рассмотрели тему: "Установка LEMP в Debian 10". Произвели установку и настройку веб-окружения LEMP, в операционной системе Debian 10. Смотрите так же, видео по теме.
Надеюсь статья была вам полезна. До встречи в новых статьях.
✍
С уважением, Андрей Бондаренко.
Видео на тему "Установка LEMP в Debian 10":

WMZ-кошелёк = Z667041230317
«Debian»
Алексей
Грамотный мануал, спасибо за подготовку информации.
Андрей Бондаренко
Пожалуйста.
Олег
Сделайте, пожалуйста, статью как добавлять несколько сайтов на одном IP. Буду благодарен.
Андрей Бондаренко
Здравствуйте.
Если только появится свободное время, а с ним сейчас вообще никак…