В этом разделе даются базовые знания о настройке связки NGINX, HHVM и MongoDB. Этот материал не является руководством, как настраивать и запускать NGINX и HHVM в промышленную эксплуатацию.
В этом руководстве мы используем операционную систему Debian с
установленным с помощью apt-get
NGINX и HHVM,
собранным из исходных кодов, либо установленным из пакета в
директорию /usr/local/hhvm/3.9.1
(сам исполняемый файл
расположен тут /usr/local/hhvm/3.9.1/bin/hhvm
).
Установим NGINX самым простым способом, с помощью команды
apt-get install nginx-full
.
Если после установки NGINX не смог запуститься, то, скорее всего, это означает, что
у вас уже установлен и запущен другой веб сервер (например Apache). В этом
случае в логе /var/log/nginx/error.log
появятся следующий строки:
2015/09/29 10:19:27 [emerg] 22445#22445: bind() to 0.0.0.0:80 failed (98:Address already in use) 2015/09/29 10:19:27 [emerg] 22445#22445: bind() to [::]:80 failed (98: Address already in use)
Для решения этой проблемы просто смените порт по умолчанию для NGINX или Apache,
остановите процесс Apache командой service apache2 stop
, или же
удалите его полностью - apt-get remove apache2
.
Это руководство написано с точки зрения разработчика расширений, так что мы соберем HHVM из исходных кодов, что упростит разработку и гарантирует наличие отладочной информации. Тем не менее, если вы не хотите идти сложным путем, то чуваки из Facebook также предоставляют прекомпилированные пакеты, именно которые вы скорее всего захотите использовать при развертывании боевых сред. Инструкции по установке этих пакетов читайте в » HHVM Wiki.
Необходимо установить оба пакета, hhvm
и hhvm-dev
. Второй из них понадобится
позже при компиляции расширения MongoDB HHVM.
Если вы собираете HHVM из исходников, то вам будет нужно создать директорию
/var/run/hhvm
:
sudo mkdir -p /var/run/hhvm sudo chown www-data.www-data /var/run/hhvm sudo mkdir /etc/hhvm sudo touch /etc/hhvm/php.ini # Следующая строка для того, чтобы для редактирования файла не использовать ``sudo`` sudo chown derick /etc/hhvm/php.ini # Можно просто будет поступать таким образом echo "date.timezone=Europe/London" >> /etc/hhvm/php.ini
HHVM должен запускаться из под пользователя www-data
.
В этом руководстве мы запустим его на переднем плане в режиме
server, таким образом:
sudo -u www-data -s /usr/local/hhvm/3.9.1/bin/hhvm \ --mode server \ -vServer.Type=fastcgi \ -vServer.FileSocket=/var/run/hhvm/sock
Запустив HHVM, нам придется объяснить NGINX, как с ним взаимодействовать для
запуска скриптов .php
. Хотя это, пожалуй, не самый правильный
подход, но вы можете добавить следующий сниппет в
/etc/nginx/sites-enabled/default
, сразу за разделом
location / { … }
:
location ~ \.php$ { fastcgi_pass unix:/var/run/hhvm/sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
После добавления этого сниппета придется перезапустить NGINX:
sudo service nginx restart
Для проверки, что все работает как надо, мы создадим директорию проекта,
содержащую index.php
, в котором будет только phpinfo()
:
Создаем директорию проекта:
sudo mkdir -p /var/www/html/my-first-project
Изменяем права доступа для вашего пользователя и группы www-data
:
sudo chown derick.www-data /var/www/html/my-first-project
Создаем файл /var/www/html/my-first-project/index.php
.
С этого момента в руководсстве, для простоты, мы не включаем
полный путь /var/www/html/my-first-project/
при упоминании файлов.
Добавляем в созданный файл следующие строки:
<?php
phpinfo();
?>
Теперь в вашем браузере обратитесь к этому файлу
http://gargleblaster/my-first-project/index.php
(только имя хоста
поправьте). Должна появиться страница, начинающаяся с "HHVM Version 3.9.1" и
содержащая несколько таблиц с информацией.
Драйвер MongoDB является связующим звеном между PHP в HHVM и базой данных. Для его установки и регистрации в HHVM вам понадобится воспользоваться инструкцией Ручная установка драйвера MongoDB HHVM.
После того, как вы установили и включили это расширение, потребуется перезапустить HHVM. Если HHVM работает на переднем плане (так, как мы его запустили ранее), то просто остановите его с помощью Ctrl-C и запустите заново:
sudo -u www-data -s /usr/local/hhvm/3.9.1/bin/hhvm \ --mode server \ -vServer.Type=fastcgi \ -vServer.FileSocket=/var/run/hhvm/sock
Для проверки того, что драйвер загружен, замените содержимое
index.php
на:
<?php
var_dump(phpversion("mongodb"));
?>
Должно вывестить что-то подобное:
string(5) "x.y.z"
Продолжение этого руководство можно найти тут Использование библиотекм PHP для MongoDB (PHPLIB).