Установка WordPress с Nginx на CentOS 8 и защита через Let's Encrypt
Для кого эта инструкция
Кратко: для системных администраторов и разработчиков, которые хотят разместить WordPress на CentOS 8 с Nginx и автоматически продлевать сертификат. Определения: LEMP — Linux + Nginx (Engine-X) + MariaDB + PHP-FPM.
Содержание
- Предварительные требования
- Отключение SELinux (если требуется)
- Установка стека LEMP
- Настройка базы данных WordPress
- Загрузка и подготовка WordPress
- Конфигурация Nginx для WordPress
- Доступ к установщику и проверка
- Установка Let’s Encrypt и получение сертификата
- Автоматическое продление сертификатов
- Дополнительная защита и рекомендации
- Типичные проблемы и их решения
- Рольные чек-листы
- Критерии приёмки
- Тест-кейсы и краткая методология
- Глоссарий 1 строкой
- Итог
Предварительные требования
- Сервер с CentOS 8 (root-доступ).
- Зарегистрированное доменное имя, указывающее на IP сервера.
- Резервная копия важных данных перед изменениями.
Важно: в CentOS 8 по умолчанию включён SELinux — в некоторых окружениях его можно оставить включённым, но в этой инструкции показан вариант с отключением для упрощения. Рассмотрите целесообразность для продакшена.
Отключение SELinux
Если вы решаете временно отключить SELinux для простоты настройки, отредактируйте файл:
nano /etc/selinux/configИзмените строку на:
SELINUX=disabledСохраните файл и перезагрузите сервер.
Important: Отключение SELinux снимает дополнительный уровень защиты. В продакшене лучше настроить правильные контексты SELinux, чем отключать его.
Установка LEMP (Nginx, MariaDB, PHP-FPM)
Установите необходимый набор пакетов:
yum install nginx php php-cli php-curl php-zip php-mbstring php-mysqlnd php-fpm curl unzip mariadb-server -yЗапустите сервисы и включите автозапуск:
systemctl start nginx
systemctl enable nginx
systemctl start mariadb
systemctl enable mariadb
systemctl start php-fpm
systemctl enable php-fpmПроверить статус PHP-FPM:
systemctl status php-fpmОжидаемый результат: сервис активен (running). Если нет — проверьте журналы через journalctl -u php-fpm.
Настройка базы данных для WordPress
MariaDB по умолчанию нуждается в базовой настойке безопасности. Запустите скрипт:
mysql_secure_installationОтвечайте на вопросы, например: удалить анонимных пользователей, отключить удалённый вход root, удалить тестовую базу, перезагрузить таблицы привилегий.
Затем войдите в консоль MariaDB:
mysql -u root -pСоздайте базу и пользователя для WordPress (замените имена и пароль на собственные):
MariaDB [(none)]> CREATE DATABASE wpdb;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;Совет: используйте сложный пароль и при необходимости ограничьте доступ по хостам.
Загрузка и подготовка WordPress
Перейдите в директорию веб-рендера и скачайте последнюю версию:
cd /var/www/html
wget https://wordpress.org/latest.tar.gzРаспакуйте и установите права:
tar -xvzf latest.tar.gz
chown -R nginx: /var/www/html/wordpress/Задайте файл конфигурации:
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
nano wp-config.phpУкажите данные доступа к базе:
define( 'DB_NAME', 'wpdb' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'password' );
define( 'DB_HOST', 'localhost' );Дополнительно: настройте уникальные ключи безопасности AUTH_KEY и пр. Их можно сгенерировать на https://api.wordpress.org/secret-key/1.1/salt/ и вставить в wp-config.php.
Конфигурация Nginx для WordPress
Создайте виртуальный хост:
nano /etc/nginx/conf.d/wordpress.confДобавьте конфигурацию (замените example.com на ваш домен):
server {
listen 80;
server_name example.com;
root /var/www/html/wordpress;
index index.php;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}Проверьте конфигурацию Nginx и перезагрузите:
nginx -t
systemctl restart nginxСовет: для сайтов с высокой нагрузкой рассмотрите включение gzip, настройку кеширования и лимитов буфера в nginx.conf.
Доступ к установщику WordPress
Откройте в браузере: http://example.com (замените example.com на ваш домен). Следуйте мастеру установки: введите название сайта, учётную запись администратора, пароль и e-mail. После установки авторизуйтесь.




ALT-примечание: изображения отображают последовательность: мастер установки, сообщение об успешной установке, форма входа и панель администратора.
Установка Let’s Encrypt (Certbot) и получение SSL
Certbot может не быть в репозиториях CentOS 8. Простейший способ — скачать скрипт certbot-auto и запустить его. Выполните:
wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-autoЗапустите получение сертификата (пример для Apache в оригинале; для Nginx используйте –nginx если поддерживается, либо получайте через standalone и затем вручную правьте конфиг):
certbot-auto --nginx -d example.comЕсли certbot-auto не поддерживает автоматическую правку Nginx в вашей сборке, используйте режим certonly и вручную добавьте редирект с HTTP на HTTPS в конфигурацию Nginx.
После успешного получения вы увидите путь к сертификатам, например:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pemLet’s Encrypt выдаёт сертификат на 90 дней; автоматическое продление обязательно.
Настройка автоматического продления сертификатов
Добавьте cron задачу, которая запускает продление дважды в день с случайной задержкой, чтобы снизить нагрузку на CA:
crontab -eДобавьте строку:
0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renewПроверка: выполните вручную:
/usr/local/bin/certbot-auto renew --dry-runЕсли dry-run успешен — cron будет работать корректно.
Дополнительная защита и рекомендации
- Используйте HTTPS-форсинг (редирект с HTTP на HTTPS) и HSTS при уверенности, что все ресурсы доступны по HTTPS.
- Ограничьте доступ к файлам конфигурации: wp-config.php — права 640, владелец nginx.
- Добавьте правило в Nginx, чтобы запретить доступ к .htaccess и к файлам конфигурации:
location ~* /\.(ht|git) {
deny all;
}- Обновляйте ядро WordPress, темы и плагины регулярно.
- Используйте сложные пароли и двухфакторную аутентификацию для администраторов.
- Настройте регулярный бэкап файлов и базы данных (обязательно тестируйте восстановление).
- Настройте лимиты по числу одновременных соединений и rate limiting в Nginx при необходимости.
Security hardening (кратко): отключите XML-RPC, если не нужен; ограничьте доступ к /wp-admin по IP (если фиксированы адреса); применяйте WAF (ModSecurity или облачный WAF).
Типичные проблемы и решения
- 502 Bad Gateway: проверьте, что php-fpm работает и сокет указан верно (unix:/run/php-fpm/www.sock).
- 403 Forbidden: проверьте права доступа к директориям и владельца (nginx:).
- Белая страница (500): включите WP_DEBUG в wp-config.php временно для диагностики.
- Проблемы с SSL после установки: проверьте, что fullchain.pem и privkey.pem читаемы и путь в конфиге nginx верный; выполните nginx -t.
Рольные чек-листы
Список для системного администратора:
- Проверить DNS A-запись домена.
- Установить и запустить Nginx, MariaDB, PHP-FPM.
- Настроить брандмауэр (firewalld/iptables) для портов 80 и 443.
- Настроить автоматическое обновление сертификатов.
Список для разработчика/интегратора:
- Проверить конфигурацию fastcgi и права на файлы.
- Настроить environment variables и file permissions.
- Провести нагрузочное и функциональное тестирование.
Список для контент-менеджера:
- Создать резервную учётную запись администратора.
- Проверить корректность отображения HTTPS-версии сайта.
- Протестировать формы и отправку почты.
Критерии приёмки
- Сайт доступен по HTTPS без ошибок смешанного контента.
- WordPress может подключаться к базе и работать без ошибок.
- Автоматическое обновление сертификата проходит успешно (dry-run).
- Резервная копия сайта сделана и восстановление протестировано.
Тест-кейсы и проверка приёма
- Переход на https://example.com — сайт открывается, padlock виден.
- Авторизация под администратором — успешный вход.
- Создание поста и проверка отображения на фронтенде.
- Прогон certbot renew –dry-run — возвращает успех.
- Отключение php-fpm — nginx возвращает 502, после включения сервис восстанавливается.
Критерий успеха: все тест-кейсы проходят без ручного вмешательства в течение 24 часов после деплоя.
Альтернативные подходы
- Вместо Nginx можно использовать Apache + mod_php (простейшая совместимость с .htaccess).
- Для продакшена рассмотрите контейнеризацию (Docker, Kubernetes) и управление сертификатами через ingress controller (например cert-manager).
- Использование управляемого хостинга WordPress (PaaS) избавляет от ряда инфраструктурных задач, но ограничивает контроль.
Когда этот подход не подходит:
- Если политика безопасности требует включённого SELinux с конкретными контекстами; тогда лучше настроить SELinux, а не отключать.
- Если у вас многосерверная архитектура с балансировщиком — SSL может быть терминирован на LB вместо Nginx.
Мини-методология развертывания (быстрая последовательность)
- Подготовить сервер и DNS.
- Установить LEMP и убедиться в работе сервисов.
- Настроить базу данных и пользователя.
- Развернуть WordPress и права доступа.
- Настроить Nginx и проверить доступ по HTTP.
- Получить SSL, настроить редирект и автопродление.
- Проверить бэкапы и мониторинг.
Короткий глоссарий
- LEMP — Linux + Nginx + MariaDB + PHP-FPM.
- Certbot — клиент для получения сертификатов Let’s Encrypt.
- PHP-FPM — менеджер процессов PHP для Nginx.
Итог
Вы развернули WordPress на CentOS 8 с Nginx, настроили базу данных, подготовили конфигурации и обеспечили сайт SSL-сертификатом Let’s Encrypt с автоматическим продлением. Дальнейшие шаги — настроить бэкапы, мониторинг, обновления и применить дополнительные меры безопасности для продакшена.
Summary:
- Проверьте конфигурации и права.
- Тестируйте продление сертификатов.
- Настройте регулярные бэкапы и обновления.
Notes: если вы используете другой дистрибутив или более новую версию ОС, некоторые пакеты и пути могут отличаться; проверяйте документы дистрибутива.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента