LEMP-стек на Ubuntu 24.04: Nginx + MySQL + PHP за 20 минут

Сайты и веб-серверы
LEMP-стек на Ubuntu 24.04: Nginx + MySQL + PHP за 20 минут

LEMP-стек — это классическая связка для запуска сайтов на VPS: Linux, Nginx (читается «engine-x»), MySQL и PHP. На нём работают WordPress, Laravel, OpenCart, форумы и самописные проекты. В этой инструкции разберём установку LEMP на Ubuntu 24.04 LTS с нуля: поставим Nginx, MySQL 8 и PHP 8.3 с PHP-FPM, свяжем их между собой и проверим, что всё работает. Все команды рабочие — можно копировать построчно. На чистом сервере процесс занимает около 20 минут, а на VPS Cheap-Host с NVMe-дисками пакеты ставятся практически мгновенно.

Что такое LEMP и почему не LAMP

Отличие от старого доброго LAMP одно: вместо Apache используется Nginx. Для типичного VPS это осознанный выбор:

  • Меньше памяти. Nginx обрабатывает тысячи соединений в нескольких worker-процессах, а не плодит процесс на каждый запрос.
  • Быстрая статика. Картинки, CSS и JS Nginx отдаёт напрямую с диска — с NVMe это происходит за миллисекунды.
  • PHP через FPM. PHP работает отдельной службой (PHP-FPM), которую можно тонко тюнинговать под свою RAM.

Если сомневаетесь между веб-серверами, у нас есть отдельное сравнение — когда Apache лучше Nginx. Для 90% задач на VPS ответ — LEMP.

Что понадобится

  • VPS с Ubuntu 24.04 LTS и root-доступом (или пользователем с sudo);
  • 1+ ГБ RAM для теста, 2–8 ГБ для боевого сайта;
  • 10–15 минут времени и SSH-клиент.

Для примера подойдёт тариф Start у Cheap-Host: 6 vCPU, 8 ГБ RAM и 96 ГБ NVMe за 450 ₽/мес — сервер выдаётся за 45–60 секунд, так что к установке можно приступать сразу после оплаты.

Шаг 1. Подготовка сервера

Подключаемся по SSH и обновляем систему:

sudo apt update && sudo apt upgrade -y

Сразу открываем нужные порты в файрволе UFW и включаем его:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Подробнее о правилах и типичных ошибках — в статье про настройку UFW на Ubuntu.

Шаг 2. Установка Nginx

Nginx есть в стандартном репозитории Ubuntu 24.04:

sudo apt install -y nginx
systemctl status nginx

Служба стартует автоматически. Откройте в браузере http://IP_сервера — должна появиться страница «Welcome to nginx!». Если её нет, проверьте, что порт 80 открыт: sudo ufw status.

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

Ставим сервер БД и запускаем скрипт первичной защиты:

sudo apt install -y mysql-server
sudo mysql_secure_installation

Скрипт предложит включить проверку сложности паролей, удалить анонимных пользователей, запретить удалённый вход под root и убрать тестовую базу — на все вопросы отвечайте Y. В Ubuntu 24.04 root в MySQL по умолчанию входит через auth_socket (без пароля, но только из-под системного root) — это нормально и безопасно.

Создадим базу и отдельного пользователя для будущего сайта:

sudo mysql
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'Сложный_Пароль_123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Тонкой настройке СУБД посвящена отдельная статья — MySQL на VPS: установка, защита и первичная настройка.

Шаг 4. Установка PHP 8.3 и PHP-FPM

В Ubuntu 24.04 из коробки доступен PHP 8.3. Ставим FPM и самые нужные модули:

sudo apt install -y php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-intl
php -v
systemctl status php8.3-fpm

Обратите внимание: пакет apache2 нам не нужен, поэтому ставим именно php8.3-fpm, а не метапакет php, который потянул бы Apache зависимостью.

Шаг 5. Связываем Nginx и PHP-FPM

Nginx сам не исполняет PHP — он передаёт запросы в PHP-FPM через unix-сокет. Создаём конфиг сайта:

sudo nano /etc/nginx/sites-available/myapp

Содержимое:

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

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Вместо example.com укажите свой домен или IP сервера. Создаём каталог сайта, включаем конфиг и перезагружаем Nginx:

sudo mkdir -p /var/www/myapp
sudo chown -R www-data:www-data /var/www/myapp
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Команда nginx -t обязательна: она проверяет синтаксис конфига до перезагрузки, чтобы сайт не упал из-за опечатки.

Шаг 6. Проверяем стек целиком

Создаём тестовый файл:

echo '<?php phpinfo();' | sudo tee /var/www/myapp/info.php

Открываем http://IP_сервера/info.php. Если видите фиолетовую таблицу PHP 8.3 — Nginx и PHP-FPM связаны. Найдите на странице секцию mysqli: она подтверждает, что PHP видит драйвер MySQL. После проверки файл обязательно удалите — он раскрывает лишнюю информацию о сервере:

sudo rm /var/www/myapp/info.php

Что настроить после установки

Базовый LEMP готов, но до «боевого» состояния стоит сделать ещё несколько шагов:

  1. SSL-сертификат. Бесплатный Let's Encrypt ставится одной командой certbot — инструкция в статье про SSL от Let's Encrypt.
  2. Тюнинг PHP-FPM. Значения pm.max_children по умолчанию не рассчитаны на вашу RAM — как их подобрать, разбираем в материале об оптимизации PHP-FPM.
  3. Лимиты PHP. В /etc/php/8.3/fpm/php.ini поднимите upload_max_filesize и post_max_size, если планируете загрузку файлов, и перезапустите FPM: sudo systemctl restart php8.3-fpm.
  4. Бэкапы базы. Хотя бы простой mysqldump по cron.

Сколько ресурсов нужно под LEMP

СценарийRAMРекомендация
Тест, лендинг, пет-проект1–2 ГБЛюбой VPS с KVM и NVMe
Сайт на CMS с посещаемостью до 10–20 тыс./сутки4–8 ГБStart у Cheap-Host — 6 vCPU, 8 ГБ RAM, 450 ₽/мес
Несколько сайтов, магазин, нагрузка выше средней16 ГБPro — 12 vCPU, 16 ГБ RAM, 750 ₽/мес

Приятный момент: на Cheap-Host апгрейд CPU, RAM и диска делается без потери данных, поэтому начинать можно со Start и расти по мере трафика.

FAQ

Чем LEMP отличается от LAMP?

В LAMP веб-сервером выступает Apache, в LEMP — Nginx. Nginx экономнее расходует память и лучше держит много одновременных соединений, поэтому для VPS с ограниченной RAM LEMP обычно предпочтительнее.

Какая версия PHP ставится на Ubuntu 24.04 по умолчанию?

Из стандартного репозитория устанавливается PHP 8.3 (пакет php8.3-fpm). Этого достаточно для актуальных версий WordPress, Laravel и большинства CMS.

Сколько ресурсов нужно серверу под LEMP?

Голый стек запускается и на 1 ГБ RAM, но для сайта с базой комфортный минимум — 2–4 ГБ. Тариф Start у Cheap-Host (6 vCPU, 8 ГБ RAM, 96 ГБ NVMe за 450 ₽/мес) закрывает LEMP с запасом.

Можно ли поставить MariaDB вместо MySQL?

Да: вместо mysql-server установите mariadb-server. Остальные шаги не меняются, модуль php8.3-mysql работает с обеими СУБД.

Почему Nginx отдаёт 502 Bad Gateway?

Чаще всего Nginx не может достучаться до PHP-FPM: служба не запущена или в fastcgi_pass указан неверный сокет. Проверьте systemctl status php8.3-fpm и путь /run/php/php8.3-fpm.sock в конфиге сайта.

Вывод

Установка LEMP на Ubuntu 24.04 сводится к четырём командам apt install и одному конфигу Nginx: полчаса — и сервер готов принимать сайты на PHP. Дальше остаются SSL, тюнинг PHP-FPM и бэкапы. Если под этот стек нужен сервер — у Cheap-Host тариф Start от 450 ₽/мес: 6 vCPU, 8 ГБ RAM, NVMe, KVM с полным root, безлимитный трафик и выдача сервера за минуту. Тарифы и заказ — на cheap-host.onl.

Читайте также