Установка LEMP · 13 min read · Oct 13, 2025
Как установить Nginx с PHP и MariaDB (LEMP стек) с Opcache, Redis и Let's Encrypt на Ubuntu

Акроним “LEMP” обозначает группу программного обеспечения, которое обычно устанавливается вместе, чтобы сервер мог хостить динамические веб-сайты и веб-приложения. Этот термин на самом деле является акронимом, представляющим четыре ключевых компонента:
- L inux: Операционная система. Linux — это популярная операционная система с открытым исходным кодом, которая служит основой для сервера.
- E ngine-X (произносится как “nginx”): Веб-сервер. Nginx — это высокопроизводительный веб-сервер, известный своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов.
- M ySQL или MariaDB: Система управления базами данных. MySQL — это широко используемая система управления реляционными базами данных, которая хранит и управляет данными для веб-сайта или приложения. Обратите внимание, что MySQL иногда заменяется MariaDB, улучшенной, полностью открытой, разработанной сообществом веткой MySQL.
- 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
Настройте директории, где будут находиться серверные блоки.
$ 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 в вашем веб-браузере, и вы должны увидеть следующее.

Установка 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 завершена, и вы можете начать создавать и хостить свои веб-сайты и приложения.
Get new posts in your inbox
No spam. Unsubscribe anytime.