Debian 12: установка веб-сервера LEMP с нуля
LEMP — это связка Nginx, базы данных и PHP, на которой работает огромная доля сайтов. Debian 12 с его репутацией стабильной серверной платформы — отличная основа под такой стек. Установка веб-сервера LEMP на Debian 12 с нуля выглядит громоздко из-за числа компонентов, но по шагам всё просто. Мы поднимем Nginx, поставим MariaDB и PHP-FPM, свяжем их в рабочую цепочку и проверим, что сайт открывается. В финале у вас будет production-платформа под первый проект.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое LEMP и почему он экономичен
Аббревиатура LEMP означает Linux, Engine-X (Nginx), MariaDB и PHP. В отличие от связки с Apache, здесь веб-сервером выступает Nginx — он бережнее расходует память и лучше держит множество одновременных соединений. На типовом VPS с 1–2 ГБ RAM это ощутимо: сайт под Nginx выдержит больше посетителей при том же железе, а Debian с его аккуратным управлением ресурсами усиливает этот эффект.
Важно понять схему работы. Nginx сам не исполняет PHP — он отдаёт статические файлы и передаёт динамические запросы обработчику PHP-FPM через Unix-сокет, а база данных хранит контент. Держа эту цепочку в голове, вы легко локализуете любую поломку: не работает статика — вопрос к Nginx, ошибка PHP — к PHP-FPM, проблема с данными — к MariaDB. Соберём все три звена по порядку.
Готовим систему
Подключитесь к серверу и обновите пакеты, чтобы ставить актуальные версии:
apt update && apt upgrade -y
Обновление важно ради свежих патчей безопасности — начинать сборку стека на устаревшей системе не стоит. Заодно продумайте, где будут лежать сайты. По умолчанию корень веб-сервера — /var/www/html, но под проекты удобнее заводить отдельную папку на каждый, например /var/www/mysite. Такой порядок пригодится, когда на сервере появится второй и третий сайт: у каждого своя директория, свой конфиг и свой домен, ничего не путается. Права на эти папки стоит выдать пользователю веб-сервера www-data, чтобы Nginx и PHP-FPM могли в них работать.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS на Debian 12Устанавливаем Nginx
Поставьте веб-сервер:
apt install -y nginx
Nginx запускается сразу после установки. Проверьте это, открыв в браузере http://ВАШ_IP — должна появиться стандартная страница приветствия Debian Nginx. Её наличие означает, что веб-сервер работает и доступен снаружи. Если вы уже настроили фаервол UFW, откройте веб-порты профилем приложения командой sudo ufw allow 'Nginx Full' — он открывает и 80, и 443. Если страница не грузится, проверьте состояние службы командой systemctl status nginx и правила фаервола: служба должна быть active (running), а нужные порты — открыты.
Ставим MariaDB
MariaDB — свободная и совместимая с MySQL база, которую Debian предлагает по умолчанию. Установите сервер БД:
apt install -y mariadb-server
Сразу запустите скрипт первичной защиты, закрывающий типичные дыры свежей установки — анонимных пользователей, тестовую базу, удалённый вход root:
mysql_secure_installation
Скрипт задаст несколько вопросов: задайте надёжный пароль root и отвечайте «Y» на предложения удалить лишнее. Незащищённая база на публичном IP — частая причина взломов, поэтому шаг пропускать нельзя. Хорошая практика — не использовать root базы для сайтов: под каждый проект заведите отдельного пользователя MariaDB с правами только на его базу, зайдя в консоль командой sudo mariadb и выполнив запросы создания базы, пользователя и выдачи прав через GRANT. Тогда компрометация одного сайта не откроет доступ к остальным.
Подключаем PHP-FPM
Установите обработчик PHP и модуль связи с базой:
apt install -y php-fpm php-mysql
PHP-FPM (FastCGI Process Manager) — это отдельная служба, исполняющая PHP-код и общающаяся с Nginx через Unix-сокет. Ключевой для Debian 12 нюанс: здесь ставится PHP версии 8.2, а сокет лежит по пути /run/php/php8.2-fpm.sock — именно его мы укажем в конфиге Nginx. Это отличается от Ubuntu, где версия новее, так что не копируйте чужие конфиги вслепую, а сверяйтесь с реальной версией командой php -v. Убедитесь, что служба поднята: systemctl status php8.2-fpm. Отдельный процесс PHP-FPM даёт стабильность — падение одного PHP-воркера не роняет весь веб-сервер.
Связываем Nginx с PHP
Осталось объяснить Nginx, что PHP-файлы нужно передавать в PHP-FPM. Создайте конфиг сайта, например /etc/nginx/sites-available/mysite, опишите серверный блок с корнем /var/www/mysite, индексом index.php и секцией location ~ \.php$ с директивой fastcgi_pass unix:/run/php/php8.2-fpm.sock;. Затем включите сайт и перезагрузите Nginx, обязательно проверив синтаксис:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Команда nginx -t — обязательный предохранитель: она проверяет конфиг на ошибки, и только при ответе «test is successful» стоит применять изменения через reload, который обновляет конфигурацию без разрыва соединений. Так вы никогда не уроните работающий сайт опечаткой в конфиге.
Отдельно стоит понять разницу между reload и restart, потому что новички часто используют не ту команду. restart полностью останавливает и заново запускает Nginx — все текущие соединения при этом рвутся, и на доли секунды сайт становится недоступен. reload же мягко перечитывает конфигурацию, не разрывая уже установленных соединений: старые запросы дообслуживаются на прежних настройках, а новые принимаются на обновлённых. Для работающего боевого сайта это принципиально: применяя изменения через reload, вы обновляете конфигурацию совершенно незаметно для посетителей. К restart прибегают лишь в редких случаях — например, после обновления самого пакета Nginx. Возьмите за правило: правки конфига применяются через reload, и только когда он почему-то не срабатывает, используется restart.
Проверяем стек и убираем следы
Убедитесь, что PHP исполняется и видит базу. Положите в корень сайта файл info.php с вызовом phpinfo() и откройте http://ВАШ_IP/info.php. Подробная таблица с версией PHP означает, что связка Nginx + PHP-FPM работает. Найдите в ней строки mysqli или pdo_mysql — они подтверждают, что PHP умеет общаться с MariaDB. После проверки сразу удалите файл командой sudo rm /var/www/mysite/info.php: на боевом сервере он раскрывает детали конфигурации потенциальному злоумышленнику. На этом базовый LEMP на Debian готов — можно разворачивать WordPress, Laravel или любой PHP-проект. Логичный следующий шаг — выпустить бесплатный SSL-сертификат через certbot, чтобы сайт открывался по HTTPS.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS на Debian 12Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Почему в конфиге путь php8.2, а не другой?
В Debian 12 из репозитория ставится PHP 8.2. Путь сокета зависит от версии, поэтому всегда сверяйтесь с выводом php -v и подставляйте актуальный номер в fastcgi_pass.
Почему сайт отдаёт 502 Bad Gateway?
Почти всегда это несоответствие пути сокета в конфиге Nginx реальному пути PHP-FPM. Проверьте версию PHP и поправьте fastcgi_pass, затем sudo nginx -t и reload.
Хватит ли минимального VPS под LEMP на Debian?
Для блога или небольшого сайта 1 ядра и 1–2 ГБ RAM достаточно, а экономичность Debian это только усиливает. Под нагруженный магазин берите тариф с запасом памяти под базу.
Как оплатить VPS на Debian из России?
У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой и токеном MAAT — иностранная карта не требуется.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.