Установка LEMP в Ubuntu Server 20.04

Здравствуйте, уважаемые читатели. Сегодня статья на тему: "Установка LEMP в Ubuntu Server 20.04". Рассмотрим процесс установки и настройки веб-окружения LEMP, в операционной системе Ubuntu Server 20.04.
LEMP – это комплект программного обеспечения (Linux, Nginx, MySQL, PHP), готовая платформа для работы сайтов и веб-приложений.
Как и в предыдущих статьях, я буду использовать доменное имя test.ru, которое предварительно прописал в файле hosts, за ip-адресом сервера.
Создание директорий для сайта
- Создадим отдельную директорию для будущего сайта, с директориями для файлов сайта, и логов веб-сервера
# mkdir -p /var/www/test.ru/{site,log}
Установка веб-сервера Nginx в Ubuntu Server 20.04
- Установку Nginx можно произвести двумя способами. Либо из внутреннего архива пакетов, либо подключив официальный репозиторий Nginx.
- Во втором случае, будет возможность установки более новой версии.
- О том как произвести подключение официального репозитория Nginx, можно узнать посетив соответствующую страницу на официальном сайте продукта:
- https://nginx.org/ru/linux_packages.html#Ubuntu
- Для установки из внутреннего архива, достаточно выполнить одну команду:
# 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.4-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; } }
- С веб-сервером пока закончим. Перезагружать его не стоит, так как ещё не установлен PHP, и нет сертификатов от Let’s Encrypt.
Настройка Firewall для работы Nginx в Ubuntu Server 20.04
- Для доступа к сайту извне, нужно открыть 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 в Ubuntu Server 20.04
Сервер баз данных MariaDB, так же как и Nginx, можно установить либо из внутреннего архива, либо подключив официальный репозиторий. Как подключать официальный репозиторий MariaDB, я уже писал в статье об установке LAMP.
- Устанавливаем сервер баз данных.
# apt install mariadb-server mariadb-client
- В процессе установки, сервер баз данных будет запущен, и добавлен в автозагрузку.
- После установки, запускаем скрипт настройки безопасности.
# mysql_secure_installation
- Так как мы ещё не создавали пароля для root, то на первый вопрос жмём просто «Enter». Дальше соглашаемся на создание пароля, и на все следующие вопросы отвечаем (Y).
- Теперь нужно создать базу данных, и пользователя с паролем. Я создам базу данных test, и пользователя admin с паролем 123.
# 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;
Установка PHP-FPM и требуемых модулей в Ubuntu Server 20.04
- Следующее что нужно сделать, это произвести установку 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 для версии 7.4, можно настроить в директории /etc/php/7.4/fpm. Если в Вашем случае версия PHP будет другой, то путь так же будет отличаться.
Сертификат Let’s Encrypt для Nginx в Ubuntu Server 20.04
- Для возможности получения сертификата от Let’s Encrypt, нужно произвести установку утилиты certbot.
# apt install certbot python3-certbot-nginx
- В процессе установки утилиты, будет настроено задание на запуск обновления имеющихся сертификатов. Задание будет выполняться каждые 12 часов. В систему устанавливается таймер, который можно вызвать с помощью команды:
# systemctl status certbot.timer
- Если Вы хотите запустить обновление в ручную, то можно запустить команду:
# certbot renew --dry-run
- Сertbot установлена, и можно запускать процесс получения сертификата. Запускаем соответствующую команду.
# certbot --nginx -d test.ru -d www.test.ru
- В процессе выпуска сертификата, будет задано несколько вопросов. Нужно указать свой email, согласиться с правилами использования, согласиться или отказаться от рассылки, а так же нужно отказаться от настройки редиректа. Редирект у нас уже настроен в конфигурационном файле Nginx.
- После выпуска сертификата, в консоли появится сообщение с поздравлением.
- Php установлен, и сертификат получен. Теперь можно перезапустить веб-сервер.
# systemctl restart nginx
- Создаем в корневой директории сайта файл index.php, с выводом информации об установленном PHP. Таким образом, мы проверим работу конфигурации веб-сервера и самого PHP.
# echo ' /var/www/test.ru/site/index.php
- Если после этого, зайдя браузером на Ваш сайт, Вы увидите информационную страницу PHP, и всё это будет по протоколу HTTPS, значит всё работает правильно.

- После проверки, можно удалять из корневой директории файл index.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/
Установка phpMyAdmin для Nginx в Ubuntu Server 20.04
- Устанавливаем phpMyAdmin из внутреннего архива пакетов.
# apt install phpmyadmin php-curl
- В процессе установки, появляется сообщение с предложением выбрать веб-сервер для автоматической настройки. В списке нет Nginx, поэтому ничего не выбираем, а просто жмём на «ОК».

- Появляется второе сообщение, в котором предлагается произвести автоматическую настройку базы данных .
- Соглашаемся, и жмём на «Yes».

- Для того чтобы задействовать phpMyAdmin, нам достаточно создать в корневой директории сайта символьную ссылку. Имя для ссылки создаём из бессвязных символов. Это будет самая лучшая защита от взломов. В итоге только Вы будет знать, что нужно вводить в адресной строке.
# ln -s /usr/share/phpmyadmin /var/www/test.ru/site/WbG@qAbxT7VczQdD
- В моём случае, чтобы попасть в phpMyAdmin, нужно вводить в браузере:
https://test.ru/WbG@qAbxT7VczQdD
- Перейдя по данному адресу, мы попадём на форму входа phpMyAdmin. И повторюсь, никто кроме Вас не будет знать этого адреса.

Настройка ротации логов Nginx в Ubuntu Server 20.04
- Веб-окружение полностью готово. Осталось только настроить ротацию логов веб-сервера, так как логирование у нас производится в нестандартных директориях.
- Находим файл /etc/logrotate.d/nginx, и в самом верху добавляем одну строчку.
/var/www/*/log/*log

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

WMZ-кошелёк = Z667041230317
«Ubuntu»