Установка LEMP · 13 min read · Oct 13, 2025

Как установить Nginx с PHP и MariaDB (LEMP стек) с Opcache, Redis и Let's Encrypt на Ubuntu

Акроним “LEMP” обозначает группу программного обеспечения, которое обычно устанавливается вместе, чтобы сервер мог хостить динамические веб-сайты и веб-приложения. Этот термин на самом деле является акронимом, представляющим четыре ключевых компонента:

  1. L inux: Операционная система. Linux — это популярная операционная система с открытым исходным кодом, которая служит основой для сервера.
  2. E ngine-X (произносится как “nginx”): Веб-сервер. Nginx — это высокопроизводительный веб-сервер, известный своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов.
  3. M ySQL или MariaDB: Система управления базами данных. MySQL — это широко используемая система управления реляционными базами данных, которая хранит и управляет данными для веб-сайта или приложения. Обратите внимание, что MySQL иногда заменяется MariaDB, улучшенной, полностью открытой, разработанной сообществом веткой MySQL.
  4. P HP: Язык программирования. PHP — это язык сценариев на стороне сервера, предназначенный для веб-разработки, но также используемый как язык общего назначения.

Стек LEMP является популярным выбором для хостинга веб-сайтов, которые требуют базы данных и обработки на стороне сервера, таких как веб-сайты WordPress, платформы электронной коммерции и другие динамические веб-приложения. Он сопоставим со стеком LAMP, где вместо Nginx используется Apache (представленный “A” в LAMP).

В этом руководстве вы установите стек LEMP на сервере на базе Ubuntu 20.04. Мы также установим phpMyAdmin, Redis, Opcache и SSL Let’s Encrypt.

Предварительные требования

  • Сервер с установленным Ubuntu 20.04.
  • Пользователь с правами sudo, не являющийся root.
  • Убедитесь, что все обновлено. shell $ sudo apt update $ sudo apt upgrade
  • Несколько пакетов, которые нужны вашей системе. shell $ sudo apt install wget curl nano -y Некоторые из этих пакетов могут уже быть установлены на вашей системе.

Настройка брандмауэра

Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall).

Проверьте, работает ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий вывод.

Status: inactive

Разрешите SSH-порт, чтобы брандмауэр не разорвал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Также разрешите порты HTTP и HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Включите брандмауэр

$ sudo ufw enable
Команда может нарушить существующие ssh-соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы

Проверьте статус брандмауэра снова.

$ sudo ufw status

Вы должны увидеть аналогичный вывод.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Установка PHP

Ubuntu 20.04 по умолчанию поставляется с PHP 7.4, но чтобы иметь обновленный репозиторий PHP, мы добавим репозиторий PHP от Ondrej.

Установите репозиторий PHP от Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Установите PHP 7.4 вместе с некоторыми дополнительными пакетами.

$ sudo apt install php-cli php-fpm php-mysql -y

Проверьте, работает ли PHP правильно.

$ php --version

Вы должны увидеть аналогичный вывод.

PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Установка MariaDB

MariaDB является заменой MySQL, что означает, что команды для запуска и управления MariaDB такие же, как и для MySQL.

Ubuntu 20.04 по умолчанию поставляется с MariaDB 10.3, которая немного устарела. Чтобы получить последнюю стабильную версию MariaDB, мы установим его официальный репозиторий.

Добавьте официальный репозиторий MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'

Чтобы установить MariaDB, выполните следующую команду.

$ sudo apt install mariadb-server -y

Проверьте, правильно ли установлена MariaDB.

$ mysql --version

Вы должны увидеть следующий вывод.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Включите службу MariaDB.

$ sudo systemctl enable mariadb

Выполните следующую команду для выполнения стандартной конфигурации, такой как установка пароля root, удаление анонимных пользователей, запрет удаленного входа root и удаление тестовых таблиц.

$ sudo mysql_secure_installation

С MariaDB 10.4 вам теперь будет предложено выбрать между использованием пароля root или плагина unix_socket. Плагин unix_socket позволяет вам войти в MariaDB с помощью учетных данных вашего пользователя Linux. Это считается более безопасным, хотя вам потребуется традиционное имя пользователя/пароль для использования сторонних приложений, таких как phpMyAdmin. Мы будем придерживаться использования плагина unix_socket для этого руководства. Вы все равно можете использовать phpMyAdmin через любого пользователя, которого вы создадите для ваших баз данных.

Нажатие Enter выбирает вариант по умолчанию (тот, который написан с заглавной буквы, Y в данном случае).

NOTE: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ СЕРВЕРОВ MariaDB В ПРОИЗВОДСТВЕ!  ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ КАЖДЫЙ ШАГ!

Чтобы войти в MariaDB и обеспечить ее безопасность, нам нужен текущий
пароль для пользователя root. Если вы только что установили MariaDB и
еще не установили пароль root, просто нажмите Enter здесь.

Введите текущий пароль для root (нажмите Enter для отсутствия): [НАЖМИТЕ ENTER]
OK, успешно использован пароль, продолжаем...

Установка пароля root или использование unix_socket гарантирует, что никто
не сможет войти в пользователя root MariaDB без надлежащей авторизации.

Вы уже защитили свою учетную запись root, поэтому можете безопасно ответить 'n'.

Переключиться на аутентификацию unix_socket [Y/n] [НАЖМИТЕ ENTER]
Успешно включено!
Перезагрузка таблиц привилегий..
 ... Успех!

Вы уже защитили свою учетную запись root, поэтому можете безопасно ответить 'n'.

Изменить пароль root? [Y/n] [ОТВЕТ n]
... пропускаем.

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

Удалить анонимных пользователей? [Y/n] [НАЖМИТЕ ENTER]
 ... Успех!

Обычно root должен иметь возможность подключаться только с 'localhost'.
Это гарантирует, что кто-то не сможет угадать пароль root из сети.

Запретить удаленный вход root? [Y/n] [НАЖМИТЕ ENTER]
 ... Успех!

По умолчанию MariaDB поставляется с базой данных с именем 'test', к которой любой может
получить доступ. Это также предназначено только для тестирования и должно быть удалено
перед переходом в производственную среду.

Удалить тестовую базу данных и доступ к ней? [Y/n] [НАЖМИТЕ ENTER]
 \- Удаление тестовой базы данных...
 ... Успех!
 \- Удаление привилегий на тестовую базу данных...
 ... Успех!

Перезагрузка таблиц привилегий обеспечит немедленное применение всех изменений, сделанных до сих пор.

Перезагрузить таблицы привилегий сейчас? [Y/n] [НАЖМИТЕ ENTER]
 ... Успех!

Очистка...

Все готово!  Если вы выполнили все вышеперечисленные шаги, ваша установка MariaDB
теперь должна быть защищена.

Спасибо за использование MariaDB!

Вот и все. В следующий раз, когда вы захотите войти в MySQL, используйте следующую команду

$ sudo mysql

Введите свой пароль root, когда будет предложено.

Установка Redis

Используйте следующую команду для установки Redis и соответствующего расширения PHP Redis.

$ sudo apt install redis php-redis

Настройка сервера Redis

Давайте выполним некоторые базовые настройки на сервере Redis.

Откройте файл /etc/redis/redis.conf с помощью редактора Nano.

$ sudo nano /etc/redis/redis.conf

Внутри файла найдите директиву supervised. Эта директива позволяет вам объявить систему инициализации для управления Redis как службой. По умолчанию она установлена в no. Поскольку мы используем Ubuntu, которая использует систему инициализации systemd, измените ее значение с no на systemd, как показано ниже.

supervised systemd

Если вы хотите, чтобы удаленные клиенты могли подключаться к вашему экземпляру Redis, найдите строку bind 127.0.0.1 и измените ее на следующую.

bind 0.0.0.0

Вы также можете изменить порт по умолчанию, на котором Redis слушает, с 6379 на значение по вашему выбору.

port 3458

Чтобы настроить Redis как кэш-сервер, установите следующие значения.

maxmemory 256mb
maxmemory-policy allkeys-lru

Это говорит Redis удалять любой ключ, используя алгоритм LRU, когда максимальная память в 256 МБ достигнута. Вы можете установить значение памяти в соответствии с вашими требованиями и сервером, который вы используете.

Вы можете установить пароль, чтобы любой клиент, которому нужен Redis, должен был сначала пройти аутентификацию. Для этого установите пароль с помощью следующей директивы.

requirepass  

Вы можете найти больше директив для изменения в конфигурационном файле. После завершения нажмите Ctrl + X и введите Y, когда будет предложено сохранить файл.

Перезапустите сервер Redis, чтобы применить изменения.

$ sudo systemctl restart redis

Нам также нужно будет добавить правило в наш брандмауэр, если вы хотите, чтобы удаленные клиенты могли подключаться к нему. В противном случае вы можете пропустить этот шаг.

$ sudo ufw allow 6379/tcp

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

Установка Nginx

Ubuntu 20.04 по умолчанию поставляется с последней основной версией Nginx (1.17.10). Тем не менее, мы переключимся на использование официального стабильного репозитория Nginx.

Сначала установите некоторые предварительные условия.

$ sudo apt install curl gnupg2 ca-certificates lsb-release

Некоторые из них уже установлены на вашей системе.

Добавьте репозиторий Nginx.

$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Установите Nginx.

$ sudo apt update
$ sudo apt install nginx -y

Проверьте, работает ли он правильно.

$ nginx -v

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

nginx version: nginx/1.18.0

Запустите и включите Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

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

Страница по умолчанию Nginx

Настройка Nginx

Настройте директории, где будут находиться серверные блоки.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Создайте директорию, где будет находиться ваш сайт.

$ sudo mkdir /var/www/example.com/html -p

Использование директивы -p создает родительские директории, которые не существовали ранее.

Выполните следующую команду, чтобы добавить файл конфигурации для вашего сайта.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Вставьте следующий код в редактор.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

Этот файл предполагает, что мы будем хостить example.com в директории /var/www/html. Если вы не собираетесь использовать какой-либо домен и настраиваете свой сервер для доступа только через IP-адрес/localhost, вам нужно будет удалить соответствующие настройки серверного блока из файла nginx.conf, иначе это помешает серверному блоку, который вы создадите.

Активируйте этот файл конфигурации, связав его с директорией sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf   

Вставьте следующие строки после строки include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл. Проверьте конфигурацию Nginx.

$ sudo nginx -t

Вы должны увидеть следующий вывод, указывающий на то, что ваша конфигурация правильная.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузите службу Nginx.

$ sudo systemctl reload nginx

Настройка PHP-FPM

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Нам нужно установить Unix-пользователя/группу процессов PHP на nginx. Найдите строки user=www-data и group=www-data в файле и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Также найдите строки listen.owner=www-data и listen.group=www-data в файле и измените их на nginx.

listen.owner = nginx
listen.group = nginx

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перезапустите процесс PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Чтобы протестировать вашу настройку PHP, создайте файл test.php в папке html.

$ sudo nano /var/www/example.com/html/test.php

Добавьте в него следующий контент и сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Запустите http://<вашсерверныйip>/test.php в вашем веб-браузере, и вы должны увидеть следующее.

Информация о PHP

Установка phpMyAdmin

Мы будем устанавливать phpMyAdmin вручную для нашего руководства.

Сначала нам нужно установить несколько дополнительных пакетов PHP, чтобы phpMyAdmin работал.

$ sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml

Перейдите в директорию /usr/share, чтобы скачать и установить phpMyAdmin.

$ cd /usr/share

Скачайте файлы phpMyAdmin. (Проверьте последнюю версию на его сайте) Мы установим только версию на английском языке.

$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
$ tar xvzf phpMyAdmin-5.0.2-english.tar.gz
$ sudo mv phpMyAdmin-5.0.2-english /usr/share/phpmyadmin
$ sudo rm phpMyAdmin*.tar.gz

Дайте правильные разрешения для папки phpMyAdmin.

$ sudo chown -R nginx:nginx phpmyadmin 
$ sudo chmod -R 744 phpmyadmin 

Настройка phpMyAdmin

Создайте файл конфигурации из образца файла, предоставленного с пакетом.

$ sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Нам нужно добавить секретное значение в файл конфигурации для целей куки и безопасности. Используйте следующие команды, чтобы сгенерировать и добавить код.

$ randomBlowfishSecret=$(openssl rand -base64 32)
$ sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.inc.php

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

Для этого выполните следующую команду.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Ваша установка phpMyAdmin работает. Чтобы получить к нему доступ, просто откройте http://example.com/phpmyadmin.

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

$ sudo mv /var/www/example.com/html/phpmyadmin /var/www/example.com/html/sm123

По сути, мы переместили наше местоположение phpMyAdmin в папку sm123. Чтобы получить к нему доступ, теперь вам нужно будет открыть http://example.com/sm123 в вашем браузере.

Поскольку мы используем unix_authentication с MySQL здесь, нет пользователя root, чтобы войти через phpMyAdmin. Вам нужно будет сначала создать пользователя MySQL и предоставить ему привилегии на базы данных, чтобы иметь возможность использовать phpMyAdmin.

Для этого войдите в оболочку MySQL.

$ sudo mysql

Теперь вставьте следующие команды, чтобы создать нового пользователя и предоставить ему все привилегии базы данных.

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT

Теперь вы можете войти с помощью этого пользователя на http://example.com/phpmyadmin.

Настройка Opcache

Если вы следовали этому руководству, Opcache уже должен быть установлен с PHP. В случае, если это не так, вы можете просто установить Opcache с помощью следующей команды.

$ sudo apt install php7.4-opcache   

Проверьте, что он установлен.

$ php -v
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Чтобы изменить настройки Opcache, откройте файл /etc/php/7.4/fpm/conf.d/10-opcache.ini.

$ sudo nano /etc/php/7.4/fpm/conf.d/10-opcache.ini

Вставьте следующий код в конец файла. Следующие настройки должны помочь вам начать использовать Opcache и обычно рекомендуются как хорошая производительность.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перезагрузите сервер, чтобы применить настройки.

$ sudo systemctl restart php7.4-fpm

Установка SSL через Let’s Encrypt

SSL стал важной частью любого веб-сайта. Здесь мы установим SSL с помощью сервиса Let’s Encrypt.

Для этого сначала установите инструмент Certbot.

$ sudo apt install certbot python3-certbot-nginx

Сгенерируйте сертификаты.

$ sudo certbot --nginx -d example.com

Если вы впервые запускаете certbot на своей системе, вас попросят указать адрес электронной почты и согласиться с условиями обслуживания. Вам также будет предложено согласиться на обмен данными с фондом EFF, на что вы можете ответить “нет”. После этого certbot свяжется с серверами Let’s Encrypt и выполнит проверку, чтобы подтвердить ваши домены.

Если это будет успешно, вам будет предложено, как обрабатывать HTTPS-перенаправления.

Пожалуйста, выберите, требуется ли HTTPS-доступ или он является необязательным.
-------------------------------------------------------------------------------
1: Легко - Разрешить доступ как по HTTP, так и по HTTPS к этим сайтам
2: Безопасно - Сделать все запросы перенаправленными на безопасный HTTPS-доступ
-------------------------------------------------------------------------------
Выберите соответствующий номер [1-2], затем [введите] (нажмите 'c', чтобы отменить):

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

Ваши сертификаты готовы, и вы можете открыть свой сайт, перейдя по адресу https://example.com.

Проверка автоматического продления SSL

Это последний шаг перед завершением этого руководства.

Проверьте процесс продления, выполнив пробный запуск процесса продления.

$ sudo certbot renew --dry-run

Если вы не получите ошибок, это означает, что вы готовы. Certbot автоматически продлит ваши сертификаты. Вам будет отправлено электронное письмо с предупреждением о истечении сертификата.

Заключение

На этом все в этом руководстве. Ваша установка LEMP завершена, и вы можете начать создавать и хостить свои веб-сайты и приложения.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.