AlmaLinux 9: установка веб-сервера LEMP с нуля
LEMP — связка Nginx, базы данных и PHP, на которой работает огромная доля сайтов. AlmaLinux 9 как стабильный клон RHEL — надёжная корпоративная основа под такой стек. Установка веб-сервера LEMP на AlmaLinux 9 с нуля отличается от Ubuntu: другой пакетный менеджер dnf, фаервол firewalld и включённый SELinux, который нужно учитывать. Разберём по шагам: поднимем Nginx, поставим MariaDB и PHP-FPM, свяжем их и проверим, что сайт открывается.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое LEMP и почему он экономичен
Аббревиатура LEMP означает Linux, Engine-X (Nginx), MariaDB и PHP. В отличие от связки с Apache, здесь веб-сервером выступает Nginx — он бережнее расходует память и лучше держит множество одновременных соединений. На типовом VPS это ощутимо: сайт под Nginx выдержит больше посетителей при том же железе. Nginx сам не исполняет PHP — он отдаёт статику и передаёт динамические запросы обработчику PHP-FPM, а база данных хранит контент.
Держа эту цепочку в голове, вы легко локализуете любую поломку: не работает статика — вопрос к Nginx, ошибка PHP — к PHP-FPM, проблема с данными — к MariaDB. Важная особенность AlmaLinux, о которой стоит помнить с самого начала: здесь по умолчанию работает SELinux, дополнительный механизм безопасности, который может блокировать веб-серверу доступ к нестандартным папкам. Мы учтём это при настройке, чтобы не ловить загадочные ошибки «доступ запрещён» при рабочих на первый взгляд правах.
Устанавливаем Nginx
Обновите систему и поставьте веб-сервер, затем сразу включите его и добавьте в автозагрузку:
dnf upgrade -y
dnf install -y nginx
systemctl enable --now nginx
В отличие от Debian, где сервис стартует сам, в RHEL-семействе принято явно включать службу командой systemctl enable --now, которая и запускает её, и ставит в автозагрузку. Теперь откройте веб-порты в firewalld и перезагрузите правила:
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
Откройте http://ВАШ_IP в браузере — должна появиться стандартная страница AlmaLinux. Её наличие подтверждает, что веб-сервер работает и доступен снаружи. Если страница не грузится, проверьте состояние службы командой systemctl status nginx и правила фаервола командой firewall-cmd --list-all.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS на AlmaLinux 9Ставим MariaDB
MariaDB — свободная и совместимая с MySQL база. Установите её, включите и запустите скрипт первичной защиты:
dnf install -y mariadb-server
systemctl enable --now mariadb
mariadb-secure-installation
Скрипт закрывает типичные дыры свежей установки: задаёт пароль root, удаляет анонимных пользователей, тестовую базу и запрещает удалённый вход администратора. Отвечайте «Y» на предложения удалить лишнее и задайте надёжный пароль. Незащищённая база на публичном IP — частая причина взломов, поэтому шаг пропускать нельзя. Хорошая практика — не использовать root базы для сайтов: под каждый проект заведите отдельного пользователя MariaDB с правами только на его базу, зайдя в консоль командой mariadb и выполнив запросы создания базы, пользователя и выдачи прав через GRANT.
Подключаем PHP-FPM
Установите обработчик PHP и модуль для работы с базой. В RHEL-семействе модуль называется php-mysqlnd:
dnf install -y php-fpm php-mysqlnd
systemctl enable --now php-fpm
AlmaLinux 9 из базового репозитория ставит PHP версии 8.0; если нужна новее, её включают через модульные потоки командой dnf module или из репозитория Remi. Проверить установленную версию можно командой php -v. PHP-FPM (FastCGI Process Manager) — отдельная служба, исполняющая PHP-код; в AlmaLinux она по умолчанию слушает сокет /run/php-fpm/www.sock, который мы укажем в конфиге Nginx. Убедитесь, что служба поднята: systemctl status php-fpm. Отдельный процесс PHP-FPM даёт стабильность — падение одного воркера не роняет весь веб-сервер.
Связываем Nginx с PHP и учитываем SELinux
Опишите в конфиге Nginx (например, /etc/nginx/conf.d/mysite.conf) серверный блок с корнем сайта, индексом index.php и секцией location ~ \.php$ с директивой fastcgi_pass unix:/run/php-fpm/www.sock;. Проверьте синтаксис и перезагрузите Nginx:
nginx -t
systemctl reload nginx
А вот ключевой момент, на котором спотыкаются новички в AlmaLinux: если корень сайта лежит не в стандартной папке или Nginx проксирует запросы по сети, SELinux может заблокировать доступ, хотя обычные права верны. Чтобы разрешить веб-серверу сетевые подключения (например, к PHP-FPM или внешним сервисам), выполните sudo setsebool -P httpd_can_network_connect 1. А для нестандартной папки сайта задайте правильный контекст командами semanage и restorecon. Помните про SELinux при любой «необъяснимой» ошибке доступа — это первое, что стоит проверить.
Чтобы SELinux не воспринимался как загадочный источник проблем, стоит понять, как он в принципе работает. Обычные права доступа Linux отвечают на вопрос «кто владелец файла и что ему разрешено». SELinux добавляет второй, независимый слой: он навешивает на каждый файл и процесс метку-контекст и разрешает действие, только если политика допускает взаимодействие этих контекстов. Например, веб-серверу разрешено читать файлы с меткой httpd_sys_content_t и запрещено лезть в чужие каталоги, даже если обычные права это позволяют. Смысл в том, что взломанная через уязвимость служба остаётся заперта в своих рамках и не может разгуляться по всей системе. Поэтому правильная реакция на блокировку — не отключить SELinux, а поставить нужную метку или включить нужный переключатель. Посмотреть, что именно он заблокировал и почему, помогает утилита sealert из пакета setroubleshoot, которая переводит записи аудита в понятные рекомендации.
Проверяем стек и убираем следы
Убедитесь, что PHP исполняется и видит базу. Положите в корень сайта файл info.php с вызовом phpinfo() и откройте http://ВАШ_IP/info.php. Подробная таблица с версией PHP означает, что связка Nginx + PHP-FPM работает, а строки mysqli или pdo_mysql подтверждают связь с MariaDB. После проверки сразу удалите файл командой rm /путь/info.php: на боевом сервере он раскрывает детали конфигурации. На этом базовый LEMP на AlmaLinux готов — можно разворачивать WordPress, Laravel или любой PHP-проект. Логичный следующий шаг — выпустить бесплатный SSL-сертификат через certbot, чтобы сайт открывался по HTTPS.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS на AlmaLinux 9Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Почему сайт отдаёт ошибку доступа при верных правах?
В AlmaLinux почти всегда виноват SELinux. Проверьте его сообщения командой sudo ausearch -m avc -ts recent и разрешите нужное через setsebool или правильный контекст, а не отключайте SELinux целиком.
Как поставить свежую версию PHP?
Базовый репозиторий даёт PHP 8.0. Новее подключают через модульные потоки dnf module list php или репозиторий Remi, после чего ставят нужную версию.
Почему сайт отдаёт 502 Bad Gateway?
Обычно это неверный путь сокета PHP-FPM в конфиге Nginx или блокировка со стороны SELinux. Проверьте путь /run/php-fpm/www.sock и переключатель httpd_can_network_connect.
Как оплатить VPS на AlmaLinux из России?
У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой и токеном MAAT — иностранная карта не требуется.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.