Default Green Orange
Gemini_13's Blog
Блокнот полезных вещей
Home
    • Карта сайта
    • Обо мне
RSS

HHVM + Nginx на Debian 7

Linux, Настройка сервера Add comments

HHVM (HipHop Virtual Machine) — это виртуальная машина с открытым исходным кодом предназначенная для выполнения скриптов, написанных на Hack и PHP. HHVM использует JIT-компиляцию для достижения высокой производительности при сохранении гибкости разработки, которая обеспечивает PHP. Как-то так звучит перевод с официального сайта.

Ну вот настал тот момент, когда и я заинтересовался сием чудом от Facebook и попробую записать все манипуляции по установке к себе на сервер. Скажу честно, что колесо я тут переоткрывать не собираюсь, на гитхабе проекта есть готовые мануалы и прочие доки. С чем столкнулся, так это с проблемой в шелле установки HHVM, он заточен под старый nginx, поэтому я хост настрою сам. Еще один важный момент, что нужна платформа amd64, ибо i386 не поддерживается.

Поехали…

Первым делом поставим Nginx. Как это сделать написано в заметке Установка Nginx на Debian 6.

Подключим репозитарий HHVM:

# nano /etc/apt/sources.list

Дописываем репозитарий:

# HHVM
deb http://dl.hhvm.com/debian wheezy main

Добавляем ключ:

# wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add -

Обновляемся:

# apt-get update && apt-get upgrade

Проверяем:

# apt-cache search hhvm
hhvm - HHVM virtual machine, runtime, and JIT for the PHP language
hhvm-dbg - HHVM virtual machine, runtime, and JIT for the PHP language
hhvm-fastcgi - The package provides FastCGI support for HHVM. HHVM is a high-performance just-in-time compiled PHP runtime. FastCGI is a protocol that allows language interpreters to run behind web servers.
hhvm-nightly - HHVM virtual machine, runtime, and JIT for the PHP language
hhvm-nightly-dbg - HHVM virtual machine, runtime, and JIT for the PHP language

Отлично, всё на месте! Приступим к установке:

# apt-get install hhvm

В конце мы получим такую вот инфу:

********************************************************************
* HHVM is installed. Here are some more things you might want to do:
*
* Configure your webserver to use HHVM:
* $ sudo /usr/share/hhvm/install_fastcgi.sh
* $ sudo /etc/init.d/nginx restart
* $ sudo /etc/init.d/apache restart
* $ sudo /etc/init.d/hhvm restart
*
* Run command line scripts with HHVM:
* $ hhvm whatever.php
*
* Use HHVM for /usr/bin/php even if you have php-cli installed:
* $ sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
********************************************************************

В процессе первой установки я слепо поверил ману и запустил /usr/share/hhvm/install_fastcgi.sh, но он написан под старый nginx, точнее старую иерархию папок и конфигов. Теперь я его запускать не буду, нет смысла, можно вручную правки внести.
Сам файл есть на гитхабе: https://github.com/hhvm/packaging/blob/master/hhvm/deb/skeleton/usr/share/hhvm/install_fastcgi.sh
Настроим дефолтный хост Nginx-а:

# nano /etc/nginx/conf.d/default.conf

В следствии правок получится такой файлик:

server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/html;
    include hhvm.conf;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Если грубо, то всё сводится к подключению файла hhvm.conf.
Теперь посмотрим что же внутри hhvm.conf:

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;
}

И проверим конфиг HHVM:

; 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.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false

Теперь рестартанем Nginx и HHVM:

# service nginx restart && service hhvm restart

Теперь всё в порядке, можно тестить. Создадим тестовый файл:

# echo "<!--?php phpinfo(); ?-->" &gt; /usr/share/nginx/html/index.php

Если открыть его, то увидим надпись «HipHop». Вот, как это выглядит в консоли:

# php /usr/share/nginx/html/index.php
HipHop

Если у вас так же, значит всё замечательно работает! 🙂

Но мне хочется это дело кинуть на сокет, поэтому нужно внести небольшие изменения:

# nano /etc/nginx/conf.d/default.conf
location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    #fastcgi_pass   127.0.0.1:9000;
    fastcgi_pass   unix:/var/run/hhvm/hhvm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

… и поправим еще конфиг /etc/hhvm/server.ini:

# nano /etc/hhvm/server.ini
; php options

pid = /var/run/hhvm/pid

; hhvm specific

;hhvm.server.port = 9000
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false

Снова рестартанем Nginx и HHVM:

# service nginx restart && service hhvm restart

Проверяем:

# php /usr/share/nginx/html/index.php
HipHop

Помните, после уставноки HHVM нам выдало небольшую инструкцию? Так вот, в её конце был такой текст:

* Use HHVM for /usr/bin/php even if you have php-cli installed:
* $ sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60

Если хотите, чтобы обращения к php перенаправлялись на hhvm, то выполните команду. Для лучшего понимания, пример:

# php -v
HipHop VM 3.0.1 (rel)
Compiler: tags/HHVM-3.0.1-0-g97c0ac06000e060376fdac4a7970e954e77900d6
Repo schema: a1146d49c5ba0d6db903beb3a4ed8a3766fef182

Теперь пора сделать автозапуск сервиса:

# update-rc.d hhvm defaults
update-rc.d: using dependency based boot sequencing

Теперь можно смело использовать сие благо. Успехов, господа! 🙂

Немного ссылок которыми воспользовался:
http://hhvm.com/
https://github.com/facebook/hhvm
https://github.com/facebook/hhvm/wiki/FastCGI#making-it-work-with-nginx
http://habrahabr.ru/post/208778/


17 мая, 2014  
Tags: debian, hhvm, hiphop, HipHop Virtual Machine, nginx

Leave a Reply

  • Рубрики

    • FreeBSD (20)
    • Linux (46)
    • MySQL (11)
    • Windows (14)
    • Железо (3)
    • Мои моды к TorrentPier II (16)
    • Настройка сервера (49)
    • Разное (33)
    • Скрипты (30)
  • Свежие записи

    • Поля форм на Yii2: textInput(), passwordInput() и hiddenInput()
    • Поля форм на Yii2: CheckboxList()
    • SpeedTest датацентров Digital Ocean
    • Патчим Gearman на Debian
    • nginx + Apache 2.4 и REMOTE_ADDR (решение проблемы)
    • Создание и подключение swap-файла в Debian
    • Запуск PhpStorm 9 x64 на Windows
    • Рекурсивная замена прав доступа для папок и файлов в Linux
    • VirtualBox 5 + phpVirtualBox на Debian 8.2 (jessie)
    • Обработка сессий PHP с помощью Redis + phpredis на Debian 7.8
  • Ссылки

    • My GitHub
  • Архивы

    • Июнь 2016 (2)
    • Март 2016 (2)
    • Январь 2016 (3)
    • Ноябрь 2015 (2)
    • Август 2015 (1)
    • Февраль 2015 (1)
    • Январь 2015 (7)
    • Октябрь 2014 (1)
    • Июнь 2014 (1)
    • Май 2014 (1)
    • Апрель 2014 (7)
    • Февраль 2014 (9)
    • Январь 2014 (5)
    • Декабрь 2013 (7)
    • Ноябрь 2013 (1)
    • Октябрь 2013 (3)
    • Август 2013 (4)
    • Июль 2013 (4)
    • Июнь 2013 (3)
    • Апрель 2013 (2)
    • Март 2013 (2)
    • Февраль 2013 (6)
    • Январь 2013 (2)
    • Декабрь 2012 (1)
    • Ноябрь 2012 (2)
    • Октябрь 2012 (7)
    • Сентябрь 2012 (22)
Все права защищены © 2014 Gemini_13's Blog
G13.org.ua