Здравствуйте, уважаемые читатели. Сегодня статья на тему: "Установка 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 '<?php phpinfo();' > /var/www/test.ru/site/index.php

  • Если после этого, зайдя браузером на Ваш сайт, Вы увидите информационную страницу PHP, и всё это будет по протоколу HTTPS, значит всё работает правильно.
информация об установленном php
  • После проверки, можно удалять из корневой директории файл 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, поэтому ничего не выбираем, а просто жмём на «ОК».
выбор веб-сервера для автоматической конфигурации phpMyAdmin
  • Появляется второе сообщение, в котором предлагается произвести автоматическую настройку базы данных .
  • Соглашаемся, и жмём на «Yes».
согласие с автоматической конфигурацией базы данных для phpMyAdmin
  • Для того чтобы задействовать phpMyAdmin, нам достаточно создать в корневой директории сайта символьную ссылку. Имя для ссылки создаём из бессвязных символов. Это будет самая лучшая защита от взломов. В итоге только Вы будет знать, что нужно вводить в адресной строке.
# ln -s /usr/share/phpmyadmin /var/www/test.ru/site/WbG@qAbxT7VczQdD
  • В моём случае, чтобы попасть в phpMyAdmin, нужно вводить в браузере:
https://test.ru/WbG@qAbxT7VczQdD
  • Перейдя по данному адресу, мы попадём на форму входа phpMyAdmin. И повторюсь, никто кроме Вас не будет знать этого адреса.
форма авторизации phpMyAdmin

Настройка ротации логов Nginx в Ubuntu Server 20.04

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

/var/www/*/log/*log

настройка ротации логов nginx
  • После произведённых действий, ротация наших логов будет производится как положено.

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

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

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


Видео на тему "Установка LEMP в Ubuntu Server 20.04":