MHOSTMHOST

Веб-стек LEMP и LAMP

LEMP и LAMP — два самых распространённых веб-стека для сайтов на PHP: связка веб-сервера, базы данных и PHP, на которой работает практически любой PHP-движок — от собственных скриптов до WordPress и других CMS. В этой статье — в чём разница между ними и как поставить любой из них на свой VPS вручную, шаг за шагом, до рабочей тестовой PHP-страницы.

Что такое LEMP и LAMP

Буквы в названии — это компоненты стека:

  • LEMP — Linux, nginx (произносится «engine-x», отсюда «E» вместо «A» в названии), MariaDB (или MySQL) и PHP-FPM.
  • LAMP — Linux, Apache, MySQL (или MariaDB) и PHP как модуль самого Apache (mod_php).

Ключевая техническая разница — как веб-сервер выполняет PHP-код. У nginx нет модулей для выполнения PHP — он умеет отдавать статику и проксировать запросы, а PHP-файлы передаёт отдельному процессу, PHP-FPM (FastCGI Process Manager), через unix-сокет или TCP. Apache в классической LAMP выполняет PHP прямо внутри себя модулем mod_php — и только у Apache есть .htaccess, точечные настройки на уровне папки; у nginx прямого аналога нет, все правила задаются централизованно в конфиге.

Разница в производительности для небольшого/среднего сайта обычно малозаметна — на практике выбор чаще определяется тем, что уже привычно, или требованиями конкретной CMS (некоторые старые PHP-приложения жёстко рассчитаны на .htaccess и Apache).

Совет: оба стека можно поставить в один клик готовым рецептом VMmanager 6, вообще без единой команды в консоли — см. статью «Готовые рецепты VMmanager 6». Дальше в этой статье — ручная установка обоих стеков: пригодится, если нужен контроль над версиями пакетов, дополнительные модули PHP или рецепт по каким-то причинам не подходит.
MySQL или MariaDB? Сегодня в обоих стеках практически везде ставят MariaDB — форк MySQL, полностью совместимый с ним по протоколу, SQL и утилитам (тот же клиент mysql, тот же порт 3306). В Debian и Ubuntu «настоящего» пакета MySQL от Oracle в штатных репозиториях уже давно нет — его место занимает MariaDB. Поэтому ниже в обоих стеках мы устанавливаем именно MariaDB — это и есть стандартный современный «MySQL» для LAMP.
Совет: эта статья — про связку веб-сервер + БД + PHP целиком, на стандартном сайте по умолчанию. Если нужен отдельный виртуальный хост под конкретный домен, несколько сайтов на одном сервере или более глубокая настройка самого веб-сервера — см. статьи «Nginx: установка и первый сайт» и «Apache: установка и виртуальные хосты».

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

  • Доступ к VPS по SSH под root или пользователем с sudo.
  • Одна из поддерживаемых систем: Ubuntu 22.04/24.04, Debian 11/12, AlmaLinux/Rocky Linux 8/9.
  • Один веб-стек на сервер. Если хотите попробовать и LEMP, и LAMP — используйте разные серверы: nginx и Apache/httpd по умолчанию оба претендуют на порт 80 и одновременно на одном сервере не заработают.

Откройте порты в файрволе

Порт 80 (HTTP) нужен, чтобы открыть тестовую страницу из браузера; порт 443 (HTTPS) пригодится позже, если добавите TLS-сертификат.

Ubuntu/Debian (ufw):

bash
sudo apt install ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

AlmaLinux/Rocky (firewalld):

bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Важно: если ufw на сервере ещё не настроен вообще, сначала пройдите статью «Настройка файрвола UFW» — она разрешает SSH ещё до включения файрвола, иначе рискуете потерять доступ к серверу.

Часть 1. Ручная установка LEMP (nginx + MariaDB + PHP-FPM)

Шаг 1. Установите nginx

Ubuntu/Debian:

bash
sudo apt update
sudo apt install nginx

AlmaLinux/Rocky:

bash
sudo dnf install nginx

Включите автозапуск и запустите nginx:

bash
sudo systemctl enable --now nginx

Откройте http://SERVER_IP/ в браузере — должна появиться страница nginx по умолчанию.

Шаг 2. Установите и настройте MariaDB

Ubuntu/Debian:

bash
sudo apt install mariadb-server

AlmaLinux/Rocky:

bash
sudo dnf install mariadb-server

Включите автозапуск, запустите MariaDB и пройдите базовую настройку безопасности:

bash
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

Скрипт mysql_secure_installation задаст несколько вопросов: задать пароль root, удалить анонимных пользователей, запретить удалённый вход под root и удалить тестовую базу данных. На все вопросы можно отвечать Y — это безопасные значения по умолчанию.

Проверьте, что сервер отвечает:

bash
sudo mysql -e "SELECT VERSION();"

Шаг 3. Установите PHP-FPM

Ubuntu/Debian:

bash
sudo apt install php-fpm php-mysql
ls /etc/php/

Команда ls /etc/php/ покажет установленную версию PHP (например, 8.3) — она понадобится для имени службы и сокета на следующем шаге.

AlmaLinux/Rocky:

bash
sudo dnf install php-fpm php-mysqlnd

Включите автозапуск и запустите PHP-FPM. На Ubuntu/Debian подставьте вашу версию PHP вместо 8.3:

bash
sudo systemctl enable --now php8.3-fpm

На AlmaLinux/Rocky версия PHP на имя службы не влияет:

bash
sudo systemctl enable --now php-fpm

Шаг 4. Подключите PHP-FPM к nginx

Ubuntu/Debian. Откройте файл сайта по умолчанию:

bash
sudo nano /etc/nginx/sites-available/default

и добавьте внутрь существующего блока server { ... } (замените 8.3 на вашу версию PHP):

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

AlmaLinux/Rocky. Тот же блок, но в другом файле и с другим путём до сокета:

bash
sudo nano /etc/nginx/conf.d/default.conf
nginx
location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass unix:/run/php-fpm/www.sock;
}

Проверьте конфигурацию и перезапустите nginx:

bash
sudo nginx -t && sudo systemctl reload nginx
Только для AlmaLinux/Rocky: штатный пул PHP-FPM по умолчанию настроен на пользователя apache, а не nginx, — из-за этого nginx получит «Permission denied» при обращении к сокету. Откройте /etc/php-fpm.d/www.conf и приведите четыре строки к такому виду:
ini
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx

Затем перезапустите PHP-FPM:

bash
sudo systemctl restart php-fpm

Шаг 5. Создайте тестовую PHP-страницу и проверьте результат

Ubuntu/Debian:

bash
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php > /dev/null

AlmaLinux/Rocky:

bash
echo '<?php phpinfo(); ?>' | sudo tee /usr/share/nginx/html/info.php > /dev/null

Откройте в браузере http://SERVER_IP/info.php. Должна появиться страница с информацией о PHP: в строке Server API — значение FPM/FastCGI (подтверждает, что PHP выполняется через PHP-FPM), а в разделах mysqli / pdo_mysql — что драйвер для MariaDB подключён.

Готово: если страница открылась и показывает FPM/FastCGI — LEMP настроен и работает.
Важно: phpinfo() показывает подробности о сервере — версии, пути, переменные окружения. Не оставляйте эту страницу публично доступной, удалите файл сразу после проверки.

Ubuntu/Debian:

bash
sudo rm /var/www/html/info.php

AlmaLinux/Rocky:

bash
sudo rm /usr/share/nginx/html/info.php

Часть 2. Ручная установка LAMP (Apache + MySQL + PHP)

Если на этом же сервере уже настроен LEMP из Части 1, сначала остановите nginx, чтобы освободить порт 80 для Apache: sudo systemctl disable --now nginx.

Шаг 1. Установите Apache

Ubuntu/Debian:

bash
sudo apt update
sudo apt install apache2

AlmaLinux/Rocky:

bash
sudo dnf install httpd

Включите автозапуск и запустите веб-сервер.

Ubuntu/Debian:

bash
sudo systemctl enable --now apache2

AlmaLinux/Rocky:

bash
sudo systemctl enable --now httpd

Откройте http://SERVER_IP/ в браузере — должна появиться стандартная приветственная страница Apache.

Шаг 2. Установите и настройте MariaDB (MySQL)

Если MariaDB уже установлена и настроена — например, вы уже прошли Часть 1 на этом сервере — пропустите этот шаг.

Ubuntu/Debian:

bash
sudo apt install mariadb-server

AlmaLinux/Rocky:

bash
sudo dnf install mariadb-server
bash
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

Шаг 3. Установите PHP

Ubuntu/Debian:

bash
sudo apt install php libapache2-mod-php php-mysql

AlmaLinux/Rocky:

bash
sudo dnf install php php-mysqlnd

Пакет libapache2-mod-php включает модуль PHP в Apache автоматически; на AlmaLinux/Rocky пакет php сам добавляет конфиг для httpd (/etc/httpd/conf.d/php.conf), если httpd уже установлен — поэтому важно ставить Apache раньше PHP, как в этой статье. Осталось перезапустить веб-сервер.

Ubuntu/Debian:

bash
sudo systemctl restart apache2

AlmaLinux/Rocky:

bash
sudo systemctl restart httpd
Совет: если браузер вместо выполнения .php-файла предлагает его скачать — модуль PHP не подключился. На Ubuntu/Debian проверьте /etc/apache2/mods-enabled/php*.conf (если файла нет — включите модуль командой a2enmod phpX.Y, подставив вашу версию, и перезапустите Apache); на AlmaLinux/Rocky проверьте, что существует файл /etc/httpd/conf.d/php.conf — если нет, переустановите пакет php уже после httpd.

Шаг 4. Создайте тестовую PHP-страницу и проверьте результат

Путь один и тот же на всех системах — стандартный DocumentRoot Apache:

bash
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php > /dev/null

Откройте в браузере http://SERVER_IP/info.php. В строке Server API должно быть Apache 2.0 Handler (модуль mod_php внутри самого Apache — в отличие от FPM/FastCGI у LEMP), а в разделах mysqli / pdo_mysql — что драйвер для MariaDB подключён.

Готово: если страница открылась и показывает Apache 2.0 Handler — LAMP настроен и работает.
Важно: удалите тестовую страницу сразу после проверки — phpinfo() показывает подробности о сервере, публично её оставлять не стоит.
bash
sudo rm /var/www/html/info.php

Что дальше

Дальше обычно нужно завести домен и виртуальный хост под конкретный сайт — см. статьи «Nginx: установка и первый сайт» и «Apache: установка и виртуальные хосты», — а для боевого проекта добавить HTTPS-сертификат. Если ещё не заходили в панель управления сервером — начните со статьи «Как войти в VMmanager 6»; полный список готовых рецептов — в статье «Готовые рецепты VMmanager 6».