Веб-стек 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).
Что понадобится
- Доступ к 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):
sudo apt install ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpAlmaLinux/Rocky (firewalld):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadЧасть 1. Ручная установка LEMP (nginx + MariaDB + PHP-FPM)
Шаг 1. Установите nginx
Ubuntu/Debian:
sudo apt update
sudo apt install nginxAlmaLinux/Rocky:
sudo dnf install nginxВключите автозапуск и запустите nginx:
sudo systemctl enable --now nginxОткройте http://SERVER_IP/ в браузере — должна появиться страница nginx по умолчанию.
Шаг 2. Установите и настройте MariaDB
Ubuntu/Debian:
sudo apt install mariadb-serverAlmaLinux/Rocky:
sudo dnf install mariadb-serverВключите автозапуск, запустите MariaDB и пройдите базовую настройку безопасности:
sudo systemctl enable --now mariadb
sudo mysql_secure_installationСкрипт mysql_secure_installation задаст несколько вопросов: задать пароль root, удалить анонимных пользователей, запретить удалённый вход под root и удалить тестовую базу данных. На все вопросы можно отвечать Y — это безопасные значения по умолчанию.
Проверьте, что сервер отвечает:
sudo mysql -e "SELECT VERSION();"Шаг 3. Установите PHP-FPM
Ubuntu/Debian:
sudo apt install php-fpm php-mysql
ls /etc/php/Команда ls /etc/php/ покажет установленную версию PHP (например, 8.3) — она понадобится для имени службы и сокета на следующем шаге.
AlmaLinux/Rocky:
sudo dnf install php-fpm php-mysqlndВключите автозапуск и запустите PHP-FPM. На Ubuntu/Debian подставьте вашу версию PHP вместо 8.3:
sudo systemctl enable --now php8.3-fpmНа AlmaLinux/Rocky версия PHP на имя службы не влияет:
sudo systemctl enable --now php-fpmШаг 4. Подключите PHP-FPM к nginx
Ubuntu/Debian. Откройте файл сайта по умолчанию:
sudo nano /etc/nginx/sites-available/defaultи добавьте внутрь существующего блока server { ... } (замените 8.3 на вашу версию PHP):
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}AlmaLinux/Rocky. Тот же блок, но в другом файле и с другим путём до сокета:
sudo nano /etc/nginx/conf.d/default.conflocation ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php-fpm/www.sock;
}Проверьте конфигурацию и перезапустите nginx:
sudo nginx -t && sudo systemctl reload nginxuser = nginx
group = nginx
listen.owner = nginx
listen.group = nginxЗатем перезапустите PHP-FPM:
sudo systemctl restart php-fpmШаг 5. Создайте тестовую PHP-страницу и проверьте результат
Ubuntu/Debian:
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php > /dev/nullAlmaLinux/Rocky:
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 подключён.
Ubuntu/Debian:
sudo rm /var/www/html/info.phpAlmaLinux/Rocky:
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:
sudo apt update
sudo apt install apache2AlmaLinux/Rocky:
sudo dnf install httpdВключите автозапуск и запустите веб-сервер.
Ubuntu/Debian:
sudo systemctl enable --now apache2AlmaLinux/Rocky:
sudo systemctl enable --now httpdОткройте http://SERVER_IP/ в браузере — должна появиться стандартная приветственная страница Apache.
Шаг 2. Установите и настройте MariaDB (MySQL)
Если MariaDB уже установлена и настроена — например, вы уже прошли Часть 1 на этом сервере — пропустите этот шаг.
Ubuntu/Debian:
sudo apt install mariadb-serverAlmaLinux/Rocky:
sudo dnf install mariadb-serversudo systemctl enable --now mariadb
sudo mysql_secure_installationШаг 3. Установите PHP
Ubuntu/Debian:
sudo apt install php libapache2-mod-php php-mysqlAlmaLinux/Rocky:
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:
sudo systemctl restart apache2AlmaLinux/Rocky:
sudo systemctl restart httpdШаг 4. Создайте тестовую PHP-страницу и проверьте результат
Путь один и тот же на всех системах — стандартный DocumentRoot Apache:
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 подключён.
sudo rm /var/www/html/info.phpЧто дальше
Дальше обычно нужно завести домен и виртуальный хост под конкретный сайт — см. статьи «Nginx: установка и первый сайт» и «Apache: установка и виртуальные хосты», — а для боевого проекта добавить HTTPS-сертификат. Если ещё не заходили в панель управления сервером — начните со статьи «Как войти в VMmanager 6»; полный список готовых рецептов — в статье «Готовые рецепты VMmanager 6».