Как установить HHVM с Nginx на Ubuntu 14.04

Вступление

HHVM - это виртуальная машина с открытым исходным кодом для выполнения кода PHP и Hack. HHVM разработан и поддерживается Facebook, что в последнее время привлекает все больше внимания к HHVM.

HHVM отличается от других движков PHP своим подходом к компиляции «точно в срок» (JIT). HHVM компилирует код PHP в промежуточный байтовый код, а затем непосредственно в машинные инструкции x64. Это обеспечивает большую оптимизацию и более высокую производительность по сравнению с тем, как работают другие движки.

HHVM является мощным и быстрым, но он также требует ресурсов, как любая другая виртуальная машина (например, JVM). Таким образом, HHVM требует больше оперативной памяти и ЦП по сравнению с другими более легкими интерпретаторами PHP, такими как PHP-FPM. Наши тесты показали, что для достойной производительности требуется капелька с минимум 1 ГБ ОЗУ.

В этой статье мы покажем вам, как установить HHVM и интегрировать его с Nginx.

Предпосылки

Это руководство было протестировано на Ubuntu 14.04. Описанные установка и конфигурация будут аналогичны для других версий ОС или ОС, но команды и расположение файлов конфигурации могут отличаться.

Для этого урока вам понадобятся:

  • Ubuntu 14.04 Droplet с минимумом 1 ГБ ОЗУ

  • Пользователь root без полномочий root (см. Https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Initial Setup Server с Ubuntu 14.04])

  • Nginx установлен (выполните первый шаг из статьи How Установить стек Linux, Nginx, MySQL, PHP (LEMP) в Ubuntu 14.04)

Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для этой команды требуется root-доступ, ему будет предшествовать + sudo +.

Монтаж

Для Ubuntu 14.04 есть официально поддерживаемый репозиторий HHVM. Чтобы добавить этот репозиторий, вы должны импортировать его открытые ключи GnuPG с помощью команды:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

После этого вы можете безопасно установить репозиторий HHVM с помощью команды:

sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"

После того, как вы добавили репозиторий, вы должны сделать apt, менеджер программного обеспечения Ubuntu, осознавая, что есть новые пакеты, которые могут быть установлены с ним. Это можно сделать, обновив кэш apt командой:

sudo apt-get update

Наконец, вы можете установить HHVM с помощью команды:

sudo apt-get install hhvm

Приведенная выше команда устанавливает HHVM и запускает его впервые. Чтобы убедиться, что HHVM запускается и останавливается автоматически с помощью капли, добавьте HHVM к уровням запуска по умолчанию с помощью команды:

sudo update-rc.d hhvm defaults

конфигурация

HHVM поставляется со скриптом, который делает интеграцию с Nginx очень простой. При условии, что у вас установлена ​​Nginx по умолчанию, вы можете запустить скрипт без каких-либо аргументов:

sudo /usr/share/hhvm/install_fastcgi.sh

При запуске этот скрипт добавляет файл конфигурации + / etc / nginx / hhvm.conf + в конфигурацию блока сервера Nginx по умолчанию + / etc / nginx / sites-enabled / default +. Он работает только с конфигурацией Nginx по умолчанию без каких-либо настроек FastCGI.

Если вы уже изменили серверный блок по умолчанию с помощью пользовательской конфигурации FastCGI, например, для PHP-FPM, вам придется вручную заменить предыдущую конфигурацию FastCGI на следующую:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

location ~ \.(hh|php)$ {
   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 должен использовать HHVM для обработки любого запрошенного файла + .php + или + .hh + (взломать).

Вам также нужно будет перезапустить Nginx, чтобы активировать изменения:

sudo service nginx restart

Также предполагается, что вы не изменили конфигурацию HHVM по умолчанию, которая делает службу доступной по адресу 127.0.0.1: 9000 +. Этот параметр берется из основного файла конфигурации HHVM ` / etc / hhvm / server.ini +`, который содержит:

/etc/hhvm/server.ini

; php options

pid = /var/run/hhvm/pid

; hhvm specific

hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc

В приведенной выше конфигурации вы можете заметить переменную + hhvm.server.port +, которая определяет, что HHVM будет прослушивать TCP-порт 9000. Кроме того, если не указано иное, он будет прослушивать localhost по умолчанию.

HHVM рассматривается для сред с большой нагрузкой, поэтому первое изменение конфигурации, которое вы можете сделать, - это заставить HHVM прослушивать сокет вместо порта TCP. Таким образом, связь между Nginx и HHVM потребует меньше ресурсов процессора и памяти.

Чтобы настроить HHVM для прослушивания через сокет, откройте файл + / etc / hhvm / server.ini + в вашем любимом редакторе, например, с помощью + vim +:

sudo vim /etc/hhvm/server.ini

Затем удалите строку, начинающуюся с + hhvm.server.port +, и вместо нее добавьте следующую:

/etc/hhvm/server.ini

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

Сохраните файл конфигурации и перезапустите HHVM с помощью команды:

sudo service hhvm restart

Затем вы должны сообщить Nginx об этом изменении. Для этого откройте файл + / etc / nginx / hhvm.conf + для редактирования:

sudo vim /etc/nginx/hhvm.conf

В этом файле убедитесь, что директива + fastcgi_pass + указывает на сокет HHVM и выглядит следующим образом:

fastcgi_pass ;

Вам также придется перезапустить Nginx, чтобы изменения вступили в силу. Для этого используйте команду:

sudo service nginx restart

Сценарий + / usr / share / hhvm / install_fastcgi.sh + может сэкономить вам некоторое время, но есть вещи, которые вы должны адаптировать вручную, особенно в отношении блоков вашего сервера Nginx. Например, конфигурация блока сервера по умолчанию открывается как файлы индекса только файлы + index.html + и + index.htm +, в то время как листинг каталога запрещен. Это одна вещь, которую вы должны обязательно изменить и включить файлы + index.php в качестве файлов индекса. Для этого снова откройте файл конфигурации для блока сервера по умолчанию в вашем любимом редакторе:

sudo vim /etc/nginx/sites-enabled/default

Затем перейдите к части + server + и добавьте + index.php + в строку с индексами, чтобы она выглядела следующим образом:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

index index.html index.htm index.php;

Перезапустите Nginx, чтобы этот параметр вступил в силу:

sudo service nginx restart

Тестирование и настройка HHVM

Первый тест, который вы можете выполнить, - это интерфейс командной строки PHP (cli) + / usr / bin / php +, который указывает на + / etc / alternatives / php +, что в терминах указывает на двоичный файл HHVM `+ / usr / bin / hhvm + `.

/usr/bin/php --version

Когда вы запустите указанную выше команду, вы должны увидеть распечатанную версию HHVM и информацию о репозитории, например:

HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33

Если у вас был установлен PHP до HHVM, вы все равно можете увидеть вывод старого PHP. Чтобы изменить это и указать на HHVM, выполните команду:

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

Далее вы можете использовать хорошо известную функцию + phpinfo () +, чтобы увидеть настройки и опции HHVM. Для этого создайте новый файл с именем + info.php + внутри корня документа по умолчанию - + / usr / share / nginx / html + в вашем любимом редакторе.

sudo vim /usr/share/nginx/html/info.php

Новый файл должен содержать:

/usr/share/nginx/html/info.php

<?php
phpinfo();
?>

Всегда полезно убедиться, что все веб-файлы Nginx принадлежат пользователю Nginx + www-data +. Это изменит владельца этого файла на + www-data с помощью команды:

sudo chown www-data: /usr/share/nginx/html/info.php

Теперь попробуйте получить доступ к этому файлу по IP вашего Droplet. URL для размещения в вашем браузере должен выглядеть как + http: /// info.php +.

Результат в вашем браузере должен выглядеть так:

изображение: https: //assets.digitalocean.com/articles/HHVM_ubuntu1404/HHVMinfo.png [PHP-информация HHVM]

Если вы не видите подобную страницу, то сначала убедитесь, что вы правильно выполнили инструкции по установке из предварительных условий. Во-вторых, ищите ошибки в журнале ошибок Nginx (+ / var / log / nginx / error.log +) и HHVM (+ / var / log / hhvm / error.log +).

Возвращаясь к вашему браузеру, вы можете заметить, что эта страница похожа на страницу, создаваемую + phpinfo () + с обычным PHP. Фактически, большинство переменных идентичны переменным из обычного PHP, за исключением специфичных для HHVM переменных, начинающихся с префикса + hhvm. +.

При изучении переменных обратите внимание, что + memory limit + равна 17179869184 байта, что немного больше 17 ГБ. Такой высокий предел ресурсов памяти, безусловно, убьет Droplet с несколькими ГБ оперативной памяти, что делает его безразличным. Вам следует уменьшить это значение до значения, меньшего, чем доступная оперативная память вашей капли, чтобы другие службы на капле не пострадали от недостатка оперативной памяти.

В качестве общего примера, если ваша Droplet имеет 2 ГБ ОЗУ, то можно безопасно выделить около 1,2 ГБ для HHVM. Чтобы это произошло, отредактируйте файл + / etc / hhvm / php.ini + в своем любимом редакторе (+ sudo vim / etc / hhvm / php.ini +) и добавьте новую переменную после `+; php options + `section:

/etc/hhvm/php.ini

memory_limit =

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

sudo service hhvm restart

Далее вы можете выполнить более сложный тест с обычным веб-приложением. Важно знать, что HHVM не на 100% совместим ни с обычным PHP, ни со всеми популярными средами PHP. Наши тесты во время написания этой статьи показали, что многие веб-приложения PHP, такие как WordPress, работают нормально. Однако официально число supported frameworks ограничено.

При тестировании с полным фреймворком / веб-приложением не должно быть ничего особенного для HHVM. Инструкции по установке и эксплуатации должны быть такими же, как и для обычного стека LEMP. Это связано с тем, что по умолчанию HHVM поставляется в комплекте со всеми большинством модулей PHP, что обеспечивает хорошую совместимость.

Тем не менее, в некоторых довольно редких случаях вам может понадобиться установить дополнительный модуль для HHVM. Например, если вы используете PostgreSQL в качестве сервера базы данных, вам понадобится модуль + pgsql. В таких случаях сначала обратитесь к официальной документации HHVM, даже если она может перенаправить вас на сторонний ресурс, например, в случае + pgsql +.

Заключение

Как показано в этой статье, HHVM можно легко установить, настроить и интегрировать с Nginx. Если у вас достаточно ресурсов, обязательно попробуйте и посмотрите, как уникальный JIT-компилятор HHVM работает для вас с точки зрения производительности и стабильности. Для такого сайта, как Facebook, со сложной функциональностью и непревзойденным трафиком должна быть веская причина доверять ему. Однако для небольших сайтов с меньшим трафиком вы можете найти решение с меньшим объемом памяти, такое как PHP-FPM, тем не менее, лучшим выбором.

Related