Установка стека LEMH (Nginx, MariaDB, HHVM) на Ubuntu
Краткие определения
- LEMH: Linux + E (Nginx) + MariaDB + HHVM. Простая аббревиатура для описанного стека.
- HHVM: виртуальная машина от Facebook для выполнения PHP/Hack с JIT-компиляцией.
- php5-fpm: реализация FastCGI для PHP, используемая как резерв или для совместимости.
Предположения
- Инструкции проверялись на Ubuntu 14.04; они подойдут и для других Debian-подобных дистрибутивов.
- Гайд покрывает установку и базовую настройку стека LEMH, но не заменяет полный аудит безопасности сервера.
- У вас должен быть доступ по SSH или физический доступ к машине.
Что важно знать перед началом
- Nginx не использует файлы .htaccess — все правила нужно переносить в конфигурацию Nginx.
- MariaDB — drop-in замена MySQL, совместима с существующими базами данных.
- HHVM даёт прирост производительности на некоторых нагрузках, но не всегда полностью совместим с модульными расширениями PHP; поэтому мы оставляем php5-fpm как fallback.
Установка Nginx
Nginx — лёгкий и производительный веб-сервер/реверс-прокси, ориентированный на высокую конкуренцию и малое потребление памяти.
Добавьте официальный PPA стабильной ветки и обновите списки пакетов:
sudo add-apt-repository ppa:nginx/stable
sudo apt-get updateЕсли вы хотите экспериментальную ветку, используйте ppa:nginx/development вместо stable:
sudo add-apt-repository ppa:nginx/development
sudo apt-get updateУстановка Nginx:
sudo apt-get install nginxЗапустите сервис и проверьте статус:
sudo service nginx start
sudo service nginx status
Откройте в браузере http://

Установка MariaDB
MariaDB — форк MySQL, сохраняющий совместимость и активно развивающийся как open-source проект. В репозиториях есть разные версии; в исходном исходнике использовалась ветка 10.0.
Если на сервере уже установлен MySQL, рекомендуется полностью удалить его перед установкой MariaDB:
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo rm -rf /var/lib/mysql
sudo apt-get autocleanДобавьте репозиторий MariaDB (пример для trusty и ветки 10.0 — при необходимости выберите свой регион/ветку):
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main'
sudo apt-get updateУстановите MariaDB:
sudo apt-get install mariadb-serverВо время установки система предложит задать пароль для root-пользователя базы данных.

Запустите сервис MariaDB:
sudo service mysql startУстановка PHP и HHVM
HHVM — это не «замена PHP» в привычном смысле, это виртуальная машина с JIT для выполнения PHP/Hack-кода, дающая выгоду по производительности в ряде сценариев.
Сначала установим минимальный набор PHP через php5-fpm (без Apache-зависимостей):
sudo apt-get install php5-fpm php5-mysql php5-curl
Затем устанавливаем HHVM (пример репозиториев для Ubuntu Trusty):
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo 'deb http://dl.hhvm.com/ubuntu trusty main' | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm
После установки зарегистрируйте HHVM как FastCGI-процесс для Nginx:
sudo /usr/share/hhvm/install_fastcgi.sh
Перезапустите HHVM:
sudo service hhvm restartСоздайте файл phpinfo для проверки (в корне сайта Nginx по умолчанию /var/www/html):
sudo nano /var/www/html/phpinfo.phpВставьте:
Сохраните и откройте в браузере http://
Конфигурация сайта в Nginx с переключением на php5-fpm при падении HHVM
Создайте файл конфигурации виртуального хоста:
sudo nano /etc/nginx/sites-available/my-siteПример содержимого (адаптируйте server_name и root под свой проект):
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.php;
server_name mywebsite.com;
include hhvm-with-fallback.conf;
location / {
try_files $uri $uri/ =404;
}
location @fallback {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}Обратите внимание: в блоке location @fallback мы явно направляем запросы в php5-fpm через unix-сокет. Это наша резервная стратегия при падении HHVM.
Создаём файл hhvm-with-fallback.conf:
sudo nano /etc/nginx/hhvm-with-fallback.confВставьте:
location ~ \.(hh|php)$ {
proxy_intercept_errors on;
error_page 500 501 502 503 = @fallback;
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Проверьте синтаксис Nginx и перезапустите сервис:
sudo nginx -t
sudo service nginx restartКогда это работает и когда — нет (ограничения и контрпримеры)
- HHVM даёт преимущество на CPU-интенсивных приложениях и там, где код «горячий» и многократно выполняемый. Для простых сайтов с низкой нагрузкой выигрыш может быть незаметен.
- Некоторые PHP-расширения или специфичные фреймворки/плагины могут быть несовместимы с HHVM — тестируйте на стейдже.
- Если вам критичны низкие задержки первого байта для динамических страниц, сравните php5-fpm vs HHVM на реальных нагрузках.
Альтернативные подходы
- Оставить Apache, но переключить на PHP-FPM и MariaDB — минимальные изменения при частичной оптимизации.
- Использовать PHP 7+ (если доступно) вместо HHVM — в современности PHP 7/8 часто даёт такое же или лучшее ускорение и совместимость.
- Использовать контейнеры (Docker) для изоляции разных версий PHP/HHVM и упрощения отката.
Методология миграции (мини-план)
- Подготовьте резервные копии: файлы сайта и дамп баз данных.
- Разверните LEMH на отдельном тестовом сервере.
- Перенесите код и БД, прогоните тесты (unit/integration).
- Нагрузочное тестирование (ab, wrk, siege) для сравнения.
- Поэтапный rollout: DNS/балансировщик -> наблюдение -> full cutover.
Факты и версии (факти-бокс)
- Пример в гайде использует Nginx 1.6.2 (стабильная ветка) и dev 1.7.8 для экспериментов.
- MariaDB в примере — репозиторий ветки 10.0.
- HHVM требует отдельного репозитория; поведение и поддержка зависят от конкретной версии OS.
Чек-лист ролей
- Системный администратор:
- Резервные копии файлов и БД, мониторинг сервисов (HHVM, Nginx, MariaDB).
- Настроить logrotate, мониторинг (Prometheus/Datadog) и алерты.
- Разработчик:
- Проверить совместимость кода с HHVM, провести интеграционные тесты.
- Обеспечить корректную обработку ошибок и логирование.
- Девопс/релиз-инженер:
- Провести canary-deploy, прогнать нагрузочные тесты и откатный план.
Критерии приёмки
- Nginx успешно обслуживает статические файлы.
- PHP-страницы корректно обрабатываются HHVM; при падении HHVM сайт продолжает работать через php5-fpm.
- Все функциональные тесты приложения проходят.
- Мониторинг отлавливает падения HHVM и оповещает админов.
Тесты и сценарии проверки
- Тест 1: Запрос phpinfo.php — ожидается текст «HipHop».
- Тест 2: Принудительный стоп hhvm и повторный запрос — ожидаем обработку через php5-fpm (HTTP 200).
- Тест 3: Нагрузочный тест (1000 RPS) — сравнить p95 и p99 для HHVM vs php5-fpm.
Устранение неполадок (Runbook)
- Если Nginx не стартует: sudo nginx -t и посмотреть /var/log/nginx/error.log.
- Если HHVM не отвечает: sudo service hhvm status; посмотреть логи /var/log/hhvm/error.log.
- Если сайт возвращает 500 и в конфиге указан fallback: убедиться, что php5-fpm работает (sudo service php5-fpm status) и сокет /var/run/php5-fpm.sock доступен.
- Для восстановления после некорректного обновления HHVM: откатить пакет, рестартовать hhvm и nginx.
Безопасность — краткие рекомендации
- Закройте доступ к административным портам (SSH по ключам, отключите root-login).
- Настройте брандмауэр (ufw/iptables) и ограничьте входящие соединения только по нужным портам.
- Ограничьте доступ к сокетам php5-fpm и файлам конфигурации правами.
- Регулярно обновляйте пакеты и применяйте патчи безопасности.
Совместимость и миграция от MySQL к MariaDB
- MariaDB позиционируется как drop-in замена MySQL: большинство SQL-запросов и клиентских библиотек останутся работоспособны.
- Тестируйте специфические функции (например, плагины хранения, пользовательские UDF), прежде чем переключать продакшн.
Резюме
Вы установили и настроили стек LEMH: Nginx для отдачи контента, MariaDB вместо MySQL и HHVM для ускорения PHP-кода с php5-fpm в качестве резервного исполнителя. Тщательно протестируйте приложение и настройте мониторинг/алерты перед переводом в продакшн.
Важно: прежде чем применять HHVM в продакшне, выполните полное тестирование совместимости и нагрузочное тестирование, чтобы оценить реальную выгоду для вашего приложения.
Авторитетная цитата: «Выбор стека всегда компромисс между производительностью, совместимостью и простотой поддержки. Тестируйте и автоматизируйте откат».
Сводка действий (коротко): резервная копия → установка Nginx → установка MariaDB → php5-fpm → HHVM → конфигурация Nginx с fallback → тесты → мониторинг.
Похожие материалы
Установка Windows 11 на неподдерживаемые ПК
Устранение ошибки Epson 1131: полное руководство
Отключить Bluetooth в Arch Linux быстро и безопасно
Windows netstat: прослушиваемые порты
Ограничения ресурсов в Kubernetes: CPU, память и хранилище