Установка LEMP на Fedora 31
TL;DR
Кратко: пошаговая инструкция по установке и настройке стека LEMP (Linux, Nginx, MariaDB, PHP 7.4) на Fedora 31, с настройкой брандмауэра, PHP-FPM, примером конфигурации Nginx и дополнительными компонентами: PhpMyAdmin, Redis и Opcache. Включены проверки, рекомендации по безопасности, тесты и контрольный список.
Введение

LEMP — это набор свободного программного обеспечения для размещения веб-сайтов и приложений: Linux, Nginx, MariaDB/MySQL и PHP. В этом руководстве мы установим LEMP на сервер с Fedora 31 и дополним его PhpMyAdmin, Redis и включением Opcache для повышения производительности.
Важно: инструкции ориентированы на Fedora 31 и PHP 7.4 через репозиторий REMI. Если вы используете другую версию Fedora или хотите другую версию PHP/Nginx, адаптируйте команды и пути.
Кому полезно
- Системным администраторам и девопсам, настраивающим хостинг на Fedora.
- Разработчикам, которым нужен быстрый и безопасный LEMP для тестов и продакшена.
Краткий план действий
- Подготовка сервера и пакетов. 2. Настройка брандмауэра. 3. Установка PHP 7.4 (REMI). 4. Установка MariaDB 10.4. 5. Установка и настройка Nginx. 6. Настройка PHP-FPM и проверка. 7. Опционально: PhpMyAdmin, Redis, Opcache. 8. Контроль качества и безопасность.
Необходимые условия
- Сервер с Fedora 31.
- Пользователь с sudo (не root).
- Подключение к интернету для загрузки репозиториев и пакетов.
Проверьте и обновите систему:
$ sudo dnf upgradeУстановите вспомогательные утилиты:
$ sudo dnf install wget curl nano -yДля простоты в этой инструкции мы временно отключим SELinux (если вы хотите продвинутую безопасность, вместо полного выключения настройте контексты SELinux):
$ sudo setenforce 0Важно: отключение SELinux снижает уровень защиты. На продакшене рекомендуется настроить контексты и правило, а не отключать SELinux полностью.
Настройка брандмауэра
Fedora использует firewalld. Проверьте статус:
$ sudo firewall-cmd --stateОжидаемый результат:
runningУстановим зону по умолчанию и откроем HTTP/HTTPS:
$ sudo firewall-cmd --set-default-zone=public
$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https
$ sudo firewall-cmd --reloadПроверьте список сервисов:
$ sudo firewall-cmd --zone=public --permanent --list-servicesОжидаемый пример вывода:
dhcpv6-client http https mdns sshСоветы:
- Если вы управляете сервером через нестандартный порт SSH, добавьте и его.
- Для продакшена рассмотрите настройку fail2ban или ограничения по IP для административных интерфейсов.
Установка PHP 7.4 (REMI)
Fedora 31 по умолчанию поставляется с PHP 7.3. Мы установим PHP 7.4 через REMI.
Добавьте REMI репозиторий:
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-31.rpmВключите нужные репозитории и отключите modular версию:
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-enabled remi-php74
$ sudo dnf config-manager --set-disabled remi-modularУстановите PHP и базовые модули:
$ sudo dnf install -y php-cli php-fpm php-mysqlnd php-opcache php-xml php-mbstring php-jsonПроверка версии PHP:
$ php --versionОжидаемый пример вывода (вариант):
PHP 7.4.x (cli) (built: ...) ( NTS )Примечание: пакет php-opcache включает Opcache; некоторые сборки уже включают его по умолчанию.
Установка MariaDB 10.4
MariaDB — совместимая замена MySQL. Чтобы установить 10.4, добавим официальный репозиторий MariaDB.
Создайте файл репозитория:
$ sudo nano /etc/yum.repos.d/MariaDB.repoВставьте:
# MariaDB 10.4 Fedora repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/fedora31-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1Сохраните (Ctrl+X, Y).
Установите сервер MariaDB 10.4:
$ sudo dnf install MariaDB-server -yЕсли хотите оставить версию из Fedora (10.3), используйте пакет mariadb-server без заглавной M.
Проверьте версию клиента:
$ mysql --versionЗапустите и включите службу:
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadbЗапустите скрипт безопасности:
$ sudo mysql_secure_installationВ процессе вам предложат настроить unix_socket или пароль root. unix_socket позволяет входить в MariaDB под системным пользователем без пароля — удобно и безопасно для локального администрирования, но для внешних приложений (PhpMyAdmin и т.п.) потребуется отдельный пользователь с паролем. В этом руководстве мы оставим unix_socket включённым и создадим отдельного пользователя для приложений.
Создание отдельного администратора для приложений:
$ sudo mysql
> CREATE USER 'webadmin'@'localhost' IDENTIFIED BY 'StrongPasswordHere';
> GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'localhost' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
> EXIT;Замените StrongPasswordHere на надёжный пароль.
Установка Nginx
Установим стабильную версию Nginx из репозиториев Fedora:
$ sudo dnf install nginx -yПроверим версию:
$ nginx -vЗапустим и включим автозапуск:
$ sudo systemctl start nginx
$ sudo systemctl enable nginxОткройте IP сервера в браузере. Вы увидите тестовую страницу Nginx:

Конфигурация Nginx
Создаём директории для серверных блоков и сайта:
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo mkdir -p /var/www/example.com/html
$ sudo chown -R $USER:$USER /var/www/example.com/html
$ sudo chmod -R 755 /var/www/example.comСоздайте конфигурацию сайта:
$ sudo nano /etc/nginx/sites-available/example.com.confВставьте конфигурацию:
server {
listen *:80;
server_name example.com;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}Активируйте сайт:
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/Откройте основной файл nginx.conf и добавьте include для sites-enabled и увеличьте хэш:
$ sudo nano /etc/nginx/nginx.confНайдите строку include /etc/nginx/conf.d/*.conf и после неё вставьте:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;Увеличьте types_hash_max_size до 4096:
types_hash_max_size 4096;Проверьте конфигурацию и перезагрузите Nginx:
$ sudo nginx -t
$ sudo systemctl reload nginxСоветы:
- Для нескольких сайтов используйте отдельные файлы в sites-available и симлинки в sites-enabled.
- Перед публикацией добавьте SSL (Let’s Encrypt) и перенаправление с HTTP на HTTPS.
Настройка PHP-FPM
Откройте пул www:
$ sudo nano /etc/php-fpm.d/www.confИзмените пользователя и группу на nginx:
user = nginx
group = nginxРаспаковка прав сокета (уберите ; если были закомментированы):
listen.owner = nginx
listen.group = nginxСохраните и перезапустите PHP-FPM:
$ sudo systemctl restart php-fpmСоздайте тестовый файл PHP:
$ sudo nano /var/www/example.com/html/test.phpВставьте:
Перейдите в браузере по адресу http://<ваш_ip>/test.php и убедитесь, что страница PHP Info отображается.

Установка PhpMyAdmin
PhpMyAdmin не всегда доступен в стандартных репозиториях Fedora; безопасный путь — скачать официальную сборку и разместить её в защищённой директории.
- Скачайте последнюю стабильную версию с https://www.phpmyadmin.net/ и распакуйте в каталог сайта:
$ cd /var/www/example.com/html
$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
$ tar xvf phpMyAdmin-latest-all-languages.tar.gz
$ mv phpMyAdmin-*-all-languages phpmyadmin
$ rm phpMyAdmin-latest-all-languages.tar.gz- Создайте конфигурационный файл и секретную фразу:
$ cd phpmyadmin
$ cp config.sample.inc.php config.inc.php
# Откройте config.inc.php и задайте $cfg['blowfish_secret'] = 'сложная_фраза';- Ограничьте доступ к PhpMyAdmin по IP или настройте Nginx location с базовой аутентификацией.
Пример безопасного блока Nginx (добавьте в конфигурацию сервера):
location /phpmyadmin {
root /var/www/example.com/html;
index index.php;
allow 192.0.2.0/24; # замените на ваш адрес или уберите для всех
deny all;
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
include fastcgi_params;
}
}Если вы используете unix_socket для root, логин в PhpMyAdmin под root будет недоступен; используйте ранее созданного пользователя webadmin с паролем.
Установка Redis
Redis полезен как кэш и хранилище сессий.
$ sudo dnf install redis -y
$ sudo systemctl enable redis
$ sudo systemctl start redis
$ sudo systemctl status redisДля использования Redis с PHP установите расширение phpredis (можно через pecl) или php-redis из репозиториев REMI:
$ sudo dnf install php-redis -y
$ sudo systemctl restart php-fpmПроверьте подключение: напишите небольшой PHP-скрипт, который сохраняет и читает ключ из Redis.
Включение и проверка Opcache
Opcache значительно ускоряет выполнение PHP-кода. В большинстве сборок PHP 7.4 Opcache доступен как расширение.
Проверьте, включён ли Opcache в phpinfo(). Если нет, убедитесь, что установлен пакет php-opcache и в php.ini есть настройки, например:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2После изменения перезапустите php-fpm:
$ sudo systemctl restart php-fpmБезопасность и рекомендации
Important: перед тем как выводить сайт в продакшен, выполните следующие шаги:
- Включите SELinux и настройте контексты для /var/www (alternative: создайте SELinux policy).
- Настройте HTTPS через Let’s Encrypt (certbot для Nginx).
- Ограничьте доступ к PhpMyAdmin по IP или включите двухфакторную аутентификацию на уровне приложения/проксирования.
- Регулярно обновляйте пакеты: sudo dnf upgrade.
- Создайте резервные копии баз данных и конфигураций.
Тесты и критерии приёмки
Критерии приёмки:
- Nginx запущен и отвечает на HTTP/HTTPS.
- PHP-FPM работает от пользователя nginx и выполняет PHP-скрипты.
- MariaDB работает и доступны пользовательские учётные записи для приложений.
- Opcache активен и повышает производительность.
- Redis запущен и доступен для PHP.
Контрольные проверки:
$ sudo systemctl status nginx php-fpm mariadb redis
$ curl -I http://localhost
$ php -r "echo extension_loaded('redis') ? 'redis OK' : 'redis NO';"Отладка распространённых проблем
- Nginx возвращает 502 Bad Gateway — проверьте, что php-fpm запущен и сокет
/run/php-fpm/www.sockсуществует и принадлежит nginx. - Права на /var/www — убедитесь, что nginx имеет доступ к файлам (владелец/права).
- PHP модуль не загружается — проверьте логи
/var/log/php-fpm/error.logиjournalctl -u php-fpm. - MariaDB не стартует — просмотрите
/var/log/mariadb/mariadb.logи вывод systemctl.
Роли и чек-листы
Системный администратор:
- Обновить систему и репозитории.
- Настроить брандмауэр и мониторинг.
- Управлять резервным копированием баз данных.
Разработчик:
- Проверить работу PHP-скриптов и зависимости.
- Настроить окружения (dev/stage/prod) с разными конфигурациями Opcache и кэшей.
Инженер безопасности:
- Настроить SELinux, HTTPS, ограничение доступа и аудит логов.
- Проверить актуальность пакетов и CVE по установленным компонентам.
Мини-методология развёртывания (SOP)
- Подготовка образа ОС и базовой конфигурации сети.
- Установка и настройка Nginx, PHP, MariaDB по шагам данного руководства.
- Тестирование функционала (test.php, подключение к БД, кеши).
- Настройка SSL и hardening.
- Автоматизация конфигурации (Ansible/Playbook) и документация.
Кому не подойдёт этот подход
- Тем, кто предпочитает стек с Apache вместо Nginx (требуется другая конфигурация).
- При необходимости полной изоляции контейнерами лучше использовать Docker/Kubernetes.
- Если ваш хостинг использует другой менеджер пакетов или прокси, команды могут отличаться.
Сопутствующие заметки по совместимости
- PHP 7.4 совместим с большинством современных CMS, но для старых приложений проверьте совместимость расширений и deprecations.
- MariaDB 10.4 совместима с MySQL клиентами, но некоторые edge-case функции могут отличаться.
Итог и дальнейшие шаги
В этом руководстве вы установили полноценный LEMP-стек на Fedora 31, настроили брандмауэр, PHP-FPM, MariaDB, Nginx и добавили Redis, Opcache и PhpMyAdmin. Следующие шаги:
- Настроить HTTPS и автоматическое обновление сертификатов.
- Перенести реальные приложения и выполнить нагрузочное тестирование.
- Автоматизировать развёртывание через конфигурационный менеджер.
Краткие рекомендации:
- Для продакшена обязательно включите SELinux (с настройкой контекстов), настройте бэкапы и мониторинг.
- Для масштабирования рассмотрите использование распределённого кэша и репликации MariaDB.
Полезные команды наглядно
# Проверка статуса служб
$ sudo systemctl status nginx php-fpm mariadb redis
# Тестовая страница
$ curl -I http://localhost/test.php
# Перезагрузка сервисов
$ sudo systemctl restart nginx php-fpm mariadb redis1-строчный глоссарий
- LEMP — Linux, Nginx, MariaDB/MySQL, PHP.
- PHP-FPM — FastCGI Process Manager для PHP.
- Opcache — встроенный кеш байткода PHP.
- Redis — in-memory key-value хранилище, используется для кэша и сессий.
Сводка
LEMP на Fedora 31 — рабочий, масштабируемый и быстрый стек для веб-приложений. Следуя шагам установки, вы получите настраиваемую платформу для разработки и продакшена. Включите безопасность, настройте резервные копии и автоматизацию для надёжной эксплуатации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента