Установка 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
Если вывод показывает 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 или 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
Совет по безопасности: для продакшена используйте более сложный пароль, ограничьте доступ по 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 к другим решениям — тестируйте совместимость с вашей версией 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');
Примените SELinux-контекст к каталогу сайта:
semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?"
restorecon -Rv /var/www/hakaseОткройте в браузере ваш домен (например, http://natsume.co) и продолжите установку через веб-интерфейс: выберите язык, укажите заголовок сайта и создайте администратора.

Поздравляем — WordPress с HHVM и Nginx на CentOS 7 установлен.
Отладка и распространённые проблемы
HHVM не запускается
- Проверьте journalctl:
journalctl -u hhvm -b --no-pager. - Убедитесь, что /var/run/hhvm существует и принадлежит nginx.
- Проверьте права и SELinux-контексты (restorecon, semanage).
- Проверьте journalctl:
Nginx возвращает 502 Bad Gateway
- Обычно означает, что сокет hhvm недоступен или HHVM упал.
- Проверьте
netstat -pl | grep hhvmи логи hhvm и nginx (/var/log/nginx/error.log).
Ошибки подключения к базе данных
- Проверьте, что MariaDB запущена и что пользователь/пароль/хост корректны.
- Попробуйте подключиться вручную:
mysql -u wpuser -p -h localhost wordpressdb.
SELinux блокирует доступ
- Просмотрите AVC-сообщения:
ausearch -m avc -ts recentилиjournalctl | grep AVC. - Примените правильные контексты, как в шагах выше.
- Просмотрите 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)
- Остановите nginx:
systemctl stop nginx. - Верните конфигурации к предыдущим версиям (из копий):
/etc/nginx/,/etc/hhvm/,/etc/systemd/system/hhvm.service. - Перезапустите hhvm и nginx:
systemctl daemon-reload && systemctl restart hhvm && systemctl start nginx. - Восстановите базу данных из дампа, если были изменения:
mysql -u root -p wordpressdb < backup.sql. - Убедитесь, что сайт доступен и логов об ошибках нет.
Критерии приёмки
- Сайт отвечает на HTTP/S и возвращает главную страницу без ошибок.
- Админ-панель WordPress доступна, и авторизация проходит.
- Nginx проксирует PHP-запросы в HHVM через unix-сокет;
netstatпоказывает слушающий hhvm процесс. - SELinux не пишет AVC-ошибок, связанных с конфигурацией сайта.
Тест-кейсы / приёмочные проверки
- Переход на главную страницу: HTTP 200.
- Открытие /wp-admin: форма логина отображается.
- Создание новой записи: запись создаётся и видна на сайте.
- Нагрузка: симуляция 100 одновременных запросов — проверить, что отклики остаются в разумных пределах.
Роли и ответственность (чек-листы)
Администратор сервера:
- Установил пакеты и репозитории.
- Настроил SELinux-контексты.
- Включил автозапуск сервисов.
DevOps-инженер:
- Настроил systemd-сервис для HHVM.
- Настроил виртуальный хост и SSL.
- Настроил мониторинг и бэкапы.
Разработчик/контент-менеджер:
- Проверил работу плагинов и темы под HHVM.
- Протестировал создание/редактирование контента.
Минимальная методология проверки
- Локальная проверка конфигураций:
nginx -t,systemctl status hhvm,mysql -e "show databases;". - Интеграционное тестирование через браузер (главная, админ, создание поста).
- Логи:
journalctl -u hhvm,/var/log/nginx/error.log,/var/log/messages.
Совместимость и миграция
- HHVM совместим не со всеми актуальными версиями WordPress и плагинов. Перед миграцией проверьте плагины в тестовой среде.
- Для миграции с PHP-FPM: экспортируйте базу и файлы; замените fastcgi_pass на PHP-FPM сокет и настройте соответствующий сервис.
Пример действий после обновления системы
- Обновите пакеты:
yum update. - Проверьте, что hhvm и nginx ещё работают:
systemctl status hhvm nginx. - Если после обновления система не стартует, просмотрите 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.
Ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента