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

Как установить Nginx с PHP и MySQL (LEMP стек) на Ubuntu 22.04

LEMP стек программного обеспечения — это группа программ с открытым исходным кодом, которая позволяет серверу размещать динамические веб-сайты и приложения, написанные на PHP. Это акроним для L inux, Nginx (произносится как E ngine-X), M ySQL и P HP.

Этот гид покажет вам, как установить LEMP стек на сервере Ubuntu 22.04. Вы также научитесь устанавливать такие приложения, как phpMyAdmin.

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

  • Сервер с установленной Ubuntu 22.04.
  • Пользователь, не являющийся root, с правами sudo.
  • Простой брандмауэр (UFW) включен и работает.
  • Все обновлено. $ sudo apt update && sudo apt upgrade

Шаг 1 - Настройка брандмауэра

Первый шаг перед установкой любых пакетов — настроить брандмауэр для разрешения HTTP и HTTPS соединений.

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

$ sudo ufw status

Вы должны увидеть что-то вроде следующего.

Статус: активен

Кому                       Действие      Откуда
--                         ------      ----
OpenSSH                    РАЗРЕШИТЬ       Везде
OpenSSH (v6)               РАЗРЕШИТЬ       Везде (v6)

Разрешите порты HTTP и HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Проверьте статус снова, чтобы подтвердить.

$ sudo ufw status
Статус: активен

Кому                       Действие      Откуда
--                         ------      ----
OpenSSH                    РАЗРЕШИТЬ       Везде
80/tcp                     РАЗРЕШИТЬ       Везде
443/tcp                    РАЗРЕШИТЬ       Везде
OpenSSH (v6)               РАЗРЕШИТЬ       Везде (v6)
80/tcp (v6)                РАЗРЕШИТЬ       Везде (v6)
443/tcp (v6)               РАЗРЕШИТЬ       Везде (v6)

Шаг 2 - Установка PHP

Ubuntu 22.04 поставляется с PHP 8.1 по умолчанию. Вы можете установить его, выполнив следующую команду.

$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd

Мы установили расширения MySQL, CLI, GD, Mbstring и XML для PHP. Вы можете установить любые дополнительные расширения в зависимости от ваших требований.

Чтобы всегда оставаться на последней версии PHP или если вы хотите установить несколько версий PHP, добавьте репозиторий PHP от Ondrej.

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

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

Теперь вы можете установить любую версию PHP.

$ sudo apt install php8.0-fpm php8.0-cli

Проверьте версию установленного PHP.

$ php --version
PHP 8.1.2 (cli) (собран: 13 июня 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    с Zend OPcache v8.1.2, Copyright (c), от Zend Technologies

Шаг 3 - Установка MySQL

Ubuntu 22.04 поставляется с последней версией MySQL. Вы можете установить его одной командой.

$ sudo apt install mysql-server

Проверьте версию MySQL.

$ mysql --version
mysql  Вер 8.0.29-0ubuntu0.22.04.2 для Linux на x86_64 ((Ubuntu))

Этот шаг необходим для версий MySQL 8.0.28 и выше. Войдите в оболочку MySQL.

$ sudo mysql

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

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Выйдите из оболочки.

mysql> exit

Запустите скрипт безопасной установки MySQL.

$ sudo mysql_secure_installation

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

Далее вам будет предложено установить уровень политики проверки паролей. Выберите 2, так как это самый строгий уровень.

Далее введите ваш пароль root. Нажмите N, чтобы отказаться от его изменения.

Нажмите Y, чтобы удалить анонимных пользователей, запретить удаленные входы root, удалить тестовую базу данных и перезагрузить таблицы привилегий.

Шаг 4 - Настройка MySQL

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

$ sudo mysql -u root -p

Создайте тестовую базу данных.

mysql> CREATE DATABASE exampledb;

Создайте учетную запись SQL пользователя.

mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';

Предоставьте все привилегии на базу данных пользователю.

mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';

Обновите привилегии пользователей.

mysql> FLUSH PRIVILEGES;

Выйдите из оболочки.

mysql> exit

Давайте снова войдем в оболочку MySQL, используя вновь созданного пользователя.

$ sudo mysql -u exampleuser -p

Создайте тестовую таблицу.

mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );

Вставьте тестовые данные.

mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");

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

mysql> SELECT * FROM exampledb.name_list;

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

+-----+---------+
| sno | content |
+-----+---------+
|   1 | Navjot  |
|   2 | Adam    |
|   3 | Josh    |
|   4 | Peter   |
+-----+---------+
4 строки в наборе (0.00 сек)

Выйдите из оболочки MySQL.

mysql> exit

Шаг 5 - Установка Nginx

Ubuntu 22.04 поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.

Импортируйте ключ подписи Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Добавьте репозиторий для стабильной версии Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Обновите системные репозитории.

$ sudo apt update

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

$ sudo apt install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.0

Шаг 6 - Настройка PHP-FPM

Откройте php.ini для редактирования.

$ sudo nano /etc/php/8.1/fpm/php.ini

Чтобы установить размеры загружаемых файлов, измените значения переменных upload_max_filesize и post_max_size.

upload_max_filesize = 50M
...
post_max_size = 50M

Настройте лимит памяти PHP в зависимости от ресурсов вашего сервера и требований.

memory_limit = 256M

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

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

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

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

...
; Unix user/group of processes
; Примечание: Пользователь обязателен. Если группа не установлена, будет использована группа по умолчанию.
;       будет использована.
user = nginx
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 php8.1-fpm

Шаг 7 - Установка phpMyAdmin

Скачайте архивный файл phpMyAdmin для английского языка.

$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz

Создайте публичный каталог для сайта.

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

Извлеките архив в публичный каталог.

$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com

Перейдите в публичный каталог.

$ cd /var/www/html/example.com

Переименуйте извлеченный каталог во что-то неясное для повышения безопасности.

$ sudo mv phpMyAdmin-5.2.0-english sm175

Шаг 8 - Настройка phpMyAdmin

Скопируйте файл конфигурации образца.

$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php

Откройте файл конфигурации для редактирования.

$ sudo nano sm175/config.inc.php

Найдите строку $cfg['blowfish_secret'] = ''; и введите случайную строку из 32 символов для аутентификации на основе cookie.

Вы можете использовать онлайн-генератор blowfish от phpSolved или сделать это через командную строку.

Скопируйте значение и вставьте его, как показано.

$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';

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

Измените владельца сайта и phpMyAdmin на сервер Nginx.

$ sudo chown -R nginx:nginx /var/www/html/example.com

Удалите каталог настройки phpMyAdmin.

$ sudo rm -rf /var/www/html/example.com/sm175/setup

Шаг 9 - Настройка Opcache

Opcache — это система кэширования PHP. Она работает, сохраняя предварительно скомпилированный байт-код скрипта в памяти, так что каждый раз, когда пользователь посещает страницу, она загружается быстрее. Opcache установлен по умолчанию. Чтобы проверить, проверьте версию PHP.

$ php --version
PHP 8.1.2 (cli) (собран: 13 июня 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    с Zend OPcache v8.1.2, Copyright (c), от Zend Technologies

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

$ sudo apt install php-opcache

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

$ sudo nano /etc/php/8.1/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, когда будет предложено.

Шаг 10 - Установка Certbot для SSL

Нам нужно установить Certbot, чтобы сгенерировать бесплатные SSL сертификаты, предлагаемые Let’s Encrypt.

Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо взять последнюю версию, используя инструмент Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным Snapd по умолчанию. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.

$ sudo snap install core
$ sudo snap refresh core

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

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot может быть выполнена, создав символическую ссылку на каталог /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Шаг 11 - Тестирование демонстрационного сайта

Создание сайта

Создайте и откройте тестовую страницу для редактирования.

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

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

Список участников
    "; foreach($db->query("SELECT content FROM $table") as $row) { echo "
  1. " . $row['content'] . "
  2. "; } echo "
"; } catch (PDOException $e) { print "Ошибка!: " . $e->getMessage() . "
"; die(); }

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

Создание SSL сертификата

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

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

Вышеуказанная команда загрузит сертификат в каталог /etc/letsencrypt/live/example.com на вашем сервере.

Сгенерируйте сертификат группы Диффи-Хеллмана.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Откройте файл /etc/letsencrypt/renewal/example.com.conf для редактирования.

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

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

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

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

Мы сгенерировали SSL сертификат, используя автономный вариант Certbot. Он запускает свой веб-сервер для создания сертификата, что означает, что Nginx должен быть выключен во время обновления. Команды pre_hook и post_hook выполняются до и после обновления, чтобы автоматически остановить и перезапустить сервер Nginx, тем самым не требуя ручного вмешательства.

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

$ sudo certbot renew --dry-run

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

Настройка Nginx

Создайте и откройте файл /etc/nginx/conf.d/example.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/example.conf

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

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  example.com;

    access_log  /var/log/nginx/example.com.access.log;
    error_log   /var/log/nginx/example.com.error.log;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/html/example.com;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Передать PHP скрипты FastCGI серверу
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

# принудить HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  example.com;
    return 301   https://$host$request_uri;
}

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

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

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

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

Проверьте вашу конфигурацию Nginx.

$ sudo nginx -t

Если вы не видите ошибок, значит, вы готовы к работе. Запустите сервер Nginx.

$ sudo systemctl start nginx

Загрузите ваш веб-сайт, посетив https://example.com в вашем браузере, и вы увидите следующую страницу.

Вывод тестового сайта LEMP

Вы можете получить доступ к вашей установке phpMyAdmin, посетив URL https://example.com/sm175 в вашем браузере. Вы можете ввести своего пользователя root или пользователя, созданного ранее, чтобы войти.

Заключение

Это завершает наш учебник, в котором вы узнали, как настроить LEMP стек на сервере Ubuntu 22.04 и создать демонстрационный сайт. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.