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

Как установить стек LEMP (Nginx, PHP и MariaDB) на Debian 12

Стек LEMP на Linux — это популярный программный пакет для разработки и хостинга веб-приложений. Он состоит из четырех ключевых компонентов: Linux, Nginx (произносится как “Engine-X”), MySQL или MariaDB (реляционная база данных) и PHP (популярный язык веб-программирования). В этой конфигурации Linux является операционной системой, а Nginx — веб-сервером, который обрабатывает HTTP-запросы и обслуживает статический контент, такой как изображения и .css файлы. MySQL, или в нашем случае MariaDB, используется в качестве системы баз данных. PHP — это язык сценариев, используемый для динамической генерации веб-контента и взаимодействия с базой данных. Эти компоненты формируют надежную и масштабируемую среду для создания и развертывания веб-сайтов и веб-приложений.

Этот гид научит вас устанавливать стек LEMP на сервер Debian 12 (bookworm), выпущенный несколько дней назад. Вы также узнаете, как установить такие приложения, как phpMyAdmin.

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

  • Сервер с установленным Debian 12.
  • Пользователь, не являющийся root, с правами sudo.
  • Полностью квалифицированное доменное имя (FQDN), например example.com, указывающее на сервер.
  • Упрощенный брандмауэр (UFW) включен и работает.
  • Все обновлено. $ sudo apt update && sudo apt upgrade
  • Несколько пакетов, которые нужны вашей системе. $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y Некоторые из этих пакетов могут уже быть установлены на вашей системе.

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

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

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

$ sudo ufw status

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

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

Кому                       Действие      Откуда
--                         ------      ----
OpenSSH                    ALLOW       Везде
OpenSSH (v6)               ALLOW       Везде (v6)

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

$ sudo ufw allow http
$ sudo ufw allow https

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

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

Кому                       Действие      Откуда
--                         ------      ----
OpenSSH                    ALLOW       Везде
80/tcp                     ALLOW       Везде
443/tcp                    ALLOW       Везде
OpenSSH (v6)               ALLOW       Везде (v6)
80/tcp (v6)                ALLOW       Везде (v6)
443/tcp (v6)               ALLOW       Везде (v6)

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

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

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

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

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

Сначала импортируйте GPG-ключ репозитория Sury.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

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

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

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

$ sudo apt update   

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

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

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

$ php --version
PHP 8.2.7 (cli) (собран: 9 июня 2023 г. 19:37:27) (NTS)
Copyright (c) Группа PHP
Zend Engine v4.2.7, Copyright (c) Технологии Zend
    с Zend OPcache v8.2.7, Copyright (c), Технологии Zend

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

Debian 12 не поставляется с MySQL по умолчанию, и они еще не выпустили официальный пакет для него. Поэтому мы будем использовать MariaDB. У MariaDB также нет официального пакета для Debian 12, но Debian поставляется с ним. Поэтому установите его, используя следующую команду.

$ sudo apt install mariadb-server

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

$ mysql --version
mysql  Вер 15.1 Distrib 10.11.3-MariaDB, для debian-linux-gnu (x86_64) с использованием  EditLine wrapper

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

$ sudo mysql_secure_installation

Вам будет предложено ввести пароль root. Нажмите Enter, потому что мы еще не установили для него пароль.

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

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

Введите текущий пароль для root (нажмите Enter для отсутствия):

Далее вам будет предложено, хотите ли вы переключиться на метод аутентификации Unix socket. Плагин unix_socket позволяет использовать ваши учетные данные операционной системы для подключения к серверу MariaDB. Поскольку у вас уже есть защищенная учетная запись root, введите n, чтобы продолжить.

Хорошо, успешно использован пароль, продолжаем...

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

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

Переключиться на аутентификацию unix_socket [Y/n] n

Далее вам будет предложено изменить пароль root. В Debian 12 пароль root тесно связан с автоматическим обслуживанием системы, поэтому его следует оставить в покое. Введите n, чтобы продолжить.

 ... пропуск.

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

Изменить пароль root? [Y/n] n

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

 ... пропуск.

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

Удалить анонимных пользователей? [Y/n] y
 ... Успех!

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

Запретить удаленный вход root? [Y/n] y
 ... Успех!

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

Удалить тестовую базу данных и доступ к ней? [Y/n] y
 - Удаление тестовой базы данных...
 ... Успех!
 - Удаление привилегий на тестовую базу данных...
 ... Успех!

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

Перезагрузить таблицы привилегий сейчас? [Y/n] y
 ... Успех!

Очистка...

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

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

Вы можете войти в оболочку MariaDB, набрав sudo mysql или sudo mariadb в командной строке.

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

Войдите в оболочку MariaDB.

$ sudo mysql

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

MariaDB> CREATE DATABASE exampledb;

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

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

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

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

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

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

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

MariaDB> FLUSH PRIVILEGES;

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

MariaDB> exit

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

$ sudo mysql -u exampleuser -p

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

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

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

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

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

MariaDB> SELECT * FROM exampledb.name_list;

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

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

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

MariaDB> exit

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

Debian 12 поставляется со старой версией 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] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

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

$ sudo apt update

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

$ sudo apt install nginx

Проверьте установку. На системах Debian следующая команда будет работать только с sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Запустите Nginx.

$ sudo systemctl start nginx

Проверьте статус службы.

$ sudo systemctl status nginx
? nginx.service - nginx - высокопроизводительный веб-сервер
     Загружено: загружено (/lib/systemd/system/nginx.service; включено; предустановлено: включено)
     Активно: активно (работает) с Чт 2023-06-15 16:33:46 UTC; 1с назад
       Документы: https://nginx.org/en/docs/
    Процесс: 2257 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (код=вышел, статус=0/УСПЕХ)
   Основной PID: 2258 (nginx)
      Задачи: 2 (лимит: 1108)
     Память: 1.8M
        CPU: 6ms
     CGroup: /system.slice/nginx.service
             ??2258 "nginx: основной процесс /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??2259 "nginx: рабочий процесс"

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

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

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

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

upload_max_filesize = 50M
...
post_max_size = 50M

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

memory_limit = 256M

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

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

$ sudo sed -i 's/post_max_size = 8M/post_max_size = 50M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini

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

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

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

...
; Unix пользователь/группа процессов
; Примечание: Пользователь обязателен. Если группа не установлена, будет использована группа по умолчанию.
;       будет использована.
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.2-fpm

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

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

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

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

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

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

$ sudo tar -xzf phpMyAdmin-5.2.1-english.tar.gz -C /var/www/html/example.com

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

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

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

$ sudo mv phpMyAdmin-5.2.1-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.2.7 (cli) (собран: 9 июня 2023 г. 19:37:27) (NTS)
Copyright (c) Группа PHP
Zend Engine v4.2.7, Copyright (c) Технологии Zend
    с Zend OPcache v8.2.7, Copyright (c), Технологии Zend

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

$ sudo apt install php-opcache

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

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

Перезапустите PHP-FPM.

$ sudo systemctl restart php8.2-fpm

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

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

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

Debian 12 не поставляется с установленным Snapd. Установите пакет Snapd.

$ sudo apt install 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

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

$ certbot --version
certbot 2.6.0

Шаг 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 --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

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

Сгенерируйте сертификат Diffie-Hellman group.

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

Проверьте службу планировщика обновления Certbot.

$ sudo systemctl list-timers

Вы найдете snap.certbot.renew.service как одну из служб, запланированных для выполнения.

СЛЕДУЮЩИЙ                    ОСТАЛОСЬ      ПОСЛЕДНИЙ                    ПРОШЛО      ЮНИТ                      АКТИВИРУЕТ
.....
Вс 2023-02-26 06:32:00 UTC 9ч осталось       Сб 2023-02-25 18:04:05 UTC 2ч 59мин назад  snap.certbot.renew.timer  snap.certbot.renew.service
Вс 2023-02-26 06:43:20 UTC 9ч осталось       Сб 2023-02-25 10:49:23 UTC 10ч назад       apt-daily-upgrade.timer   apt-daily-upgrade.service
Вс 2023-02-26 09:00:06 UTC 11ч осталось      Сб 2023-02-25 20:58:06 UTC 5мин назад      apt-daily.timer           apt-daily.service

Выполните пробный запуск процесса, чтобы проверить, работает ли обновление 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.2-fpm.sock; #в зависимости от версий PHP
        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 в вашем браузере. Вы можете ввести своего административного пользователя или пользователя, созданного ранее, чтобы войти.

Заключение

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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.