Гид по технологиям

Установка LEMP на Fedora 31

• 7 min read • Серверы • Обновлено 26 Nov 2025
LEMP на Fedora 31: установка и настройка
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 для тестов и продакшена.

Краткий план действий

  1. Подготовка сервера и пакетов. 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 на Fedora

Конфигурация 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 отображается.

Страница PHP Info

Установка PhpMyAdmin

PhpMyAdmin не всегда доступен в стандартных репозиториях Fedora; безопасный путь — скачать официальную сборку и разместить её в защищённой директории.

  1. Скачайте последнюю стабильную версию с 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
  1. Создайте конфигурационный файл и секретную фразу:
$ cd phpmyadmin
$ cp config.sample.inc.php config.inc.php
# Откройте config.inc.php и задайте $cfg['blowfish_secret'] = 'сложная_фраза';
  1. Ограничьте доступ к 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';"

Отладка распространённых проблем

  1. Nginx возвращает 502 Bad Gateway — проверьте, что php-fpm запущен и сокет /run/php-fpm/www.sock существует и принадлежит nginx.
  2. Права на /var/www — убедитесь, что nginx имеет доступ к файлам (владелец/права).
  3. PHP модуль не загружается — проверьте логи /var/log/php-fpm/error.log и journalctl -u php-fpm.
  4. MariaDB не стартует — просмотрите /var/log/mariadb/mariadb.log и вывод systemctl.

Роли и чек-листы

Системный администратор:

  • Обновить систему и репозитории.
  • Настроить брандмауэр и мониторинг.
  • Управлять резервным копированием баз данных.

Разработчик:

  • Проверить работу PHP-скриптов и зависимости.
  • Настроить окружения (dev/stage/prod) с разными конфигурациями Opcache и кэшей.

Инженер безопасности:

  • Настроить SELinux, HTTPS, ограничение доступа и аудит логов.
  • Проверить актуальность пакетов и CVE по установленным компонентам.

Мини-методология развёртывания (SOP)

  1. Подготовка образа ОС и базовой конфигурации сети.
  2. Установка и настройка Nginx, PHP, MariaDB по шагам данного руководства.
  3. Тестирование функционала (test.php, подключение к БД, кеши).
  4. Настройка SSL и hardening.
  5. Автоматизация конфигурации (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 redis

1-строчный глоссарий

  • LEMP — Linux, Nginx, MariaDB/MySQL, PHP.
  • PHP-FPM — FastCGI Process Manager для PHP.
  • Opcache — встроенный кеш байткода PHP.
  • Redis — in-memory key-value хранилище, используется для кэша и сессий.

Сводка

LEMP на Fedora 31 — рабочий, масштабируемый и быстрый стек для веб-приложений. Следуя шагам установки, вы получите настраиваемую платформу для разработки и продакшена. Включите безопасность, настройте резервные копии и автоматизацию для надёжной эксплуатации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро