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

Установка WordPress с HHVM и Nginx на CentOS 7

• 8 min read • DevOps • Обновлено 22 Nov 2025
WordPress с HHVM и Nginx на CentOS 7
WordPress с HHVM и Nginx на CentOS 7

  • Кратко: пошаговая инструкция по установке WordPress на CentOS 7 с использованием HHVM (FastCGI) и Nginx. Включены настройка SELinux, MariaDB, сервисы systemd, конфигурация сокета HHVM, создание виртуального хоста, рекомендации по безопасности и проверке работоспособности.
  • Для кого: системные администраторы и DevOps-инженеры с базовыми знаниями CentOS.

Введение

HHVM (HipHop Virtual Machine) — это виртуальная машина с открытым исходным кодом для выполнения программ на PHP и Hack. Проект изначально развивался Facebook; HHVM поддерживал многие возможности PHP 7 и обеспечивал ускоренное выполнение PHP-кода через JIT/оптимизации. В этой инструкции мы установим WordPress поверх HHVM и Nginx на CentOS 7, используя Unix-сокет для обмена между Nginx и HHVM (быстрее, чем TCP).

Важно: в примерах используется домен natsume.co и база данных wordpressdb/wpuser. Замените их на свои значения.

Краткие требования

  • CentOS 7 — 64-bit
  • root или sudo-права

Содержание

  • Подготовка SELinux и репозитория EPEL
  • Установка Nginx
  • Установка и настройка MariaDB
  • Установка HHVM
  • Настройка HHVM (systemd, сокет)
  • Связка HHVM и Nginx
  • Создание виртуального хоста
  • Установка WordPress
  • Тестирование, отладка и безопасность
  • Контрольный список и сценарии отката

Важное

  • Следуйте шагам в том порядке, в котором они приведены: SELinux и контексты влияют на работу Nginx/HHVM.
  • Выбирайте безопасные пароли и не используйте пароли из примера на продакшене.

Основные термины (1 строка каждый)

  • HHVM: виртуальная машина для PHP/Hack; заменяет бинарный php-cli.
  • SELinux: механизм контроля доступа (обязательно учитывать контексты файлов).
  • Unix-сокет: файл-канал для локального обмена между процессами (быстрее, чем TCP).

Шаг 1 — Настройка SELinux и добавление репозитория EPEL

По умолчанию SELinux включён в CentOS 7. Мы будем использовать режим enforcing и инструменты для управления контекстами.

Проверка статуса SELinux:

sestatus
getenforce

Проверка статуса SELinux (sestatus/getenforce)

Если вывод показывает Enforcing — SELinux активен и будет блокировать неподходящие операции, пока вы не настроите контексты.

Установите инструменты управления SELinux и сетевые утилиты:

yum -y install setroubleshoot setools net-tools

Затем добавьте репозиторий EPEL (нужен для некоторых пакетов):

yum -y install epel-release

Примечание: ошибки при установке epel-release обычно связаны с недоступностью зеркала; пробуйте снова или смените зеркало.

Шаг 2 — Установка Nginx

Nginx — лёгкий и производительный веб-сервер. Установка из репозитория CentOS:

yum -y install nginx

Запуск и автозапуск:

systemctl start nginx
systemctl enable nginx

Проверка доступности на локальном IP:

curl 192.168.1.110

Проверка Nginx: стартовая страница по IP

Если браузер показывает стартовую страницу Nginx или curl возвращает HTML — Nginx работает.

Совет: при использовании публичного сервера убедитесь, что правила firewall (firewalld/iptables) разрешают порт 80/443.

Шаг 3 — Установка и настройка MariaDB

MariaDB — форк MySQL, полностью совместимый с большинством приложений.

Установка:

yum -y install mariadb mariadb-server

Запуск и автозапуск:

systemctl start mariadb
systemctl enable mariadb

Безопасная настройка root-пароля и базовых ограничений:

mysql_secure_installation

Следуйте подсказкам, отвечая Y для установки пароля и удаления тестовых записей. После этого создайте базу данных и пользователя для WordPress (замените пароль на надёжный):

mysql -u root -p
# введите пароль root
create database wordpressdb;
create user wpuser@localhost identified by 'wpuser@';
grant all privileges on wordpressdb.* to wpuser@localhost identified by 'wpuser@';
flush privileges;
\q

Создание базы данных для WordPress в MariaDB

Совет по безопасности: для продакшена используйте более сложный пароль, ограничьте доступ по IP, включите резервное копирование дампов.

Шаг 4 — Установка HHVM

HHVM можно собрать из исходников или установить из предварительно собранных пакетов. В этом руководстве используется пакетный rpm.

Установите зависимости (список длинный — команды берите как есть):

yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \
{ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \
lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \
{unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \
glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \
mariadb mariadb-server libc-client make

Затем загрузите rpm и установите его (адрес в примере — зеркало, может отличаться):

rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm
ln -s /usr/local/bin/hhvm /bin/hhvm

Проверьте установку:

hhvm --version

Чтобы использовать hhvm как php в командной строке, зарегистрируйте альтернативу:

sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
php --version

Установка HHVM: вывод установки и версия HHVM

Примечание: в репозиториях и зеркалах версии HHVM различаются. На момент написания многие дистрибутивы перемещались от HHVM к другим решениям — тестируйте совместимость с вашей версией WordPress/плагинов.

Шаг 5 — Настройка HHVM (systemd и unix-сокет)

Мы запустим HHVM как systemd-сервис и настроим его на прослушивание Unix-сокета /var/run/hhvm/hhvm.sock.

Создайте файл сервиса:

cd /etc/systemd/system/
vim hhvm.service

Вставьте конфигурацию сервиса:

[Unit]
Description=HHVM HipHop Virtual Machine (FCGI)
After=network.target nginx.service mariadb.service

[Service]
ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi -vServer.FileSocket=/var/run/hhvm/hhvm.sock

[Install]
WantedBy=multi-user.target

Редактирование server.ini в /etc/hhvm/:

cd /etc/hhvm/
vim server.ini

Убедитесь, что присутствует строка (или замените порт на сокет):

hhvm.server.file_socket = /var/run/hhvm/hhvm.sock

Права и контексты SELinux: сервис запускается от пользователя nginx, поэтому каталог сокета должен принадлежать nginx и иметь корректный SELinux-контекст:

chown -R nginx:nginx /var/run/hhvm/
semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?"
restorecon -Rv /var/run/hhvm

Автоматическое создание каталога сокета при загрузке (иначе после перезагрузки каталога не будет):

vim /etc/rc.local

Добавьте в конец:

mkdir -p /var/run/hhvm/
chown -R nginx:nginx /var/run/hhvm/
semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?"
restorecon -Rv /var/run/hhvm

Сделайте rc.local исполняемым:

chmod +x /etc/rc.local

Перезагрузите systemd и запустите сервис:

systemctl daemon-reload
systemctl start hhvm
systemctl enable hhvm

Проверка, что hhvm слушает через сокет:

netstat -pl | grep hhvm

Отладка: если HHVM не запускается — смотрите логи journalctl:

journalctl -u hhvm -b --no-pager

Шаг 6 — Настройка связки HHVM и Nginx

Создайте файл конфигурации для hhvm в каталоге Nginx:

cd /etc/nginx/
vim hhvm.conf

Вставьте блок:

location ~ \.(hh|php)$ {
    root /usr/share/nginx/html;
    fastcgi_keep_conn on;
    fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Подключите hhvm.conf в основном nginx.conf (внутри server или http секции, как в вашем конфиге):

vim /etc/nginx/nginx.conf

Добавьте строку:

include /etc/nginx/hhvm.conf;

Примените SELinux-контекст к файлу конфигурации:

semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf
restorecon -v /etc/nginx/hhvm.conf

Проверка конфигурации и перезапуск:

nginx -t
systemctl restart nginx

Если nginx -t сообщает об ошибках — исправьте синтаксис перед перезапуском.

Шаг 7 — Создание виртуального хоста для домена

Создайте файл виртуального хоста в /etc/nginx/conf.d/:

cd /etc/nginx/conf.d/
vim natsume.conf

Пример конфигурации домена (замените server_name и root на свои):

server {
    listen       80;
    server_name  natsume.co;

    root   /var/www/hakase;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    location = /50x.html {
        root /var/www/hakase;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Создайте веб-каталог и выставьте владельца nginx:

mkdir -p /var/www/hakase
chown -R nginx:nginx /var/www/hakase

Примените SELinux-контексты к конфигурации Nginx:

semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?"
restorecon -Rv /etc/nginx/conf.d

Проверка и перезапуск nginx:

nginx -t
systemctl restart nginx

Шаг 8 — Установка WordPress

Скачайте и распакуйте WordPress в корень сайта:

cd /var/www/hakase
wget wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz
mv wordpress/* .

Создайте конфигурационный файл wp-config.php и укажите данные базы:

cp wp-config-sample.php wp-config.php
vim wp-config.php

Измените значения:

define('DB_NAME', 'wordpressdb');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'wpuser@');
define('DB_HOST', 'localhost');

Редактирование wp-config.php

Примените SELinux-контекст к каталогу сайта:

semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?"
restorecon -Rv /var/www/hakase

Откройте в браузере ваш домен (например, http://natsume.co) и продолжите установку через веб-интерфейс: выберите язык, укажите заголовок сайта и создайте администратора.

Выбор языка установки WordPress Настройка администратора и заголовка сайта Установка завершена: страница успеха Вход в панель администратора WordPress Панель администратора WordPress Главная страница WordPress (по умолчанию)

Поздравляем — WordPress с HHVM и Nginx на CentOS 7 установлен.

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

  1. HHVM не запускается

    • Проверьте journalctl: journalctl -u hhvm -b --no-pager.
    • Убедитесь, что /var/run/hhvm существует и принадлежит nginx.
    • Проверьте права и SELinux-контексты (restorecon, semanage).
  2. Nginx возвращает 502 Bad Gateway

    • Обычно означает, что сокет hhvm недоступен или HHVM упал.
    • Проверьте netstat -pl | grep hhvm и логи hhvm и nginx (/var/log/nginx/error.log).
  3. Ошибки подключения к базе данных

    • Проверьте, что MariaDB запущена и что пользователь/пароль/хост корректны.
    • Попробуйте подключиться вручную: mysql -u wpuser -p -h localhost wordpressdb.
  4. SELinux блокирует доступ

    • Просмотрите AVC-сообщения: ausearch -m avc -ts recent или journalctl | grep AVC.
    • Примените правильные контексты, как в шагах выше.

Рекомендации по безопасности и производительности

  • Используйте HTTPS (Let’s Encrypt) и настройте редирект с HTTP на HTTPS.
  • Ограничьте доступ к панели /wp-admin по IP (если возможно) или включите двухфакторную аутентификацию.
  • Регулярные обновления: ядро WordPress, плагины и темы.
  • Резервные копии базы данных и файлов (например, cron + mysqldump + rsync).
  • Настройка кеширования (object cache, opcode cache). HHVM даёт преимущества, но совместимость плагинов нужно тестировать.
  • Мониторинг: настройте базовые метрики CPU/памяти/latency и алерты для процессов nginx/hhvm/mariadb.

Дополнительные подходы и альтернативы

  • Использовать PHP-FPM вместо HHVM: проще для совместимости с современными плагинами WordPress.
  • Контейнеризация: запуск Nginx/HHVM/MariaDB в контейнерах (Docker/Kubernetes) для изоляции и масштабирования.
  • Управляемые сервисы: использовать RDS/Managed DB и CDN вместо локальной базы и статики.

Контрольный список перед переходом в продакшен

  • Пароли базы данных и администратора заменены.
  • SELinux контексты применены для всех каталогов и конфигов.
  • Наличие SSL и корректный редирект HTTP→HTTPS.
  • Резервное копирование настроено (бэкап базы и файлов).
  • Мониторинг и алерты настроены.
  • Нагрузочное тестирование завершено (легкая проверка пиков).

Сценарий отката (rollback)

  1. Остановите nginx: systemctl stop nginx.
  2. Верните конфигурации к предыдущим версиям (из копий): /etc/nginx/, /etc/hhvm/, /etc/systemd/system/hhvm.service.
  3. Перезапустите hhvm и nginx: systemctl daemon-reload && systemctl restart hhvm && systemctl start nginx.
  4. Восстановите базу данных из дампа, если были изменения: mysql -u root -p wordpressdb < backup.sql.
  5. Убедитесь, что сайт доступен и логов об ошибках нет.

Критерии приёмки

  • Сайт отвечает на HTTP/S и возвращает главную страницу без ошибок.
  • Админ-панель WordPress доступна, и авторизация проходит.
  • Nginx проксирует PHP-запросы в HHVM через unix-сокет; netstat показывает слушающий hhvm процесс.
  • SELinux не пишет AVC-ошибок, связанных с конфигурацией сайта.

Тест-кейсы / приёмочные проверки

  • Переход на главную страницу: HTTP 200.
  • Открытие /wp-admin: форма логина отображается.
  • Создание новой записи: запись создаётся и видна на сайте.
  • Нагрузка: симуляция 100 одновременных запросов — проверить, что отклики остаются в разумных пределах.

Роли и ответственность (чек-листы)

Администратор сервера:

  • Установил пакеты и репозитории.
  • Настроил SELinux-контексты.
  • Включил автозапуск сервисов.

DevOps-инженер:

  • Настроил systemd-сервис для HHVM.
  • Настроил виртуальный хост и SSL.
  • Настроил мониторинг и бэкапы.

Разработчик/контент-менеджер:

  • Проверил работу плагинов и темы под HHVM.
  • Протестировал создание/редактирование контента.

Минимальная методология проверки

  1. Локальная проверка конфигураций: nginx -t, systemctl status hhvm, mysql -e "show databases;".
  2. Интеграционное тестирование через браузер (главная, админ, создание поста).
  3. Логи: journalctl -u hhvm, /var/log/nginx/error.log, /var/log/messages.

Совместимость и миграция

  • HHVM совместим не со всеми актуальными версиями WordPress и плагинов. Перед миграцией проверьте плагины в тестовой среде.
  • Для миграции с PHP-FPM: экспортируйте базу и файлы; замените fastcgi_pass на PHP-FPM сокет и настройте соответствующий сервис.

Пример действий после обновления системы

  1. Обновите пакеты: yum update.
  2. Проверьте, что hhvm и nginx ещё работают: systemctl status hhvm nginx.
  3. Если после обновления система не стартует, просмотрите journalctl и примените откат конфигураций.

Короткое руководство по безопасности SELinux (ключевые команды)

  • Просмотр текущих контекстов: ls -Z /var/www/hakase.
  • Назначение контекста для директории: semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?".
  • Применение контекстов: restorecon -Rv /var/www/hakase.
  • Поиск AVC-блокировок: ausearch -m avc -ts recent.

Короткая памятка команд

  • Проверка сервисов: systemctl status nginx hhvm mariadb
  • Логи HHVM: journalctl -u hhvm -b --no-pager
  • Проверка сокета: ls -l /var/run/hhvm и netstat -pl | grep hhvm

Заключение

Эта инструкция покрывает полный путь установки WordPress на CentOS 7 с HHVM и Nginx: от базовой подготовки окружения и настройки SELinux до финальной установки и отладки. Для продакшена рекомендуется тщательно протестировать совместимость плагинов и настроить мониторинг и бэкапы. Если требуется максимальная совместимость, рассмотрите PHP-FPM как альтернативу HHVM.

Ссылки

Поделиться: 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 быстро