Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

HHVM, Nginx и PHP (а также Laravel)

Anna | 31.05.2014 | нет комментариев

Уйма людей интересовалось установкой HHVM на Nginx для применения с Laravel. Давайте приступим.

HHVM (либо HipHop Virtual Machine) — транслятор начального кода, сделанный компанией Facebook. HipHop программно трансформирует начальный код, написанный на языке PHP, в высоко оптимизированный код на C , а после этого использует компилятор g для его компиляции.

Введение

Как и в большинстве моих статей, я буду применять Ubuntu 12.04 LTS как сервер для установки нашего добродушна. Впрочем, мы абсолютно можем установить это все на Mac с поддержкой Brew (nginx и hhvm). Информация об установке HHVM на другие платформы (включая новые версии Ubuntu) может быть обнаружена тут.

Ну что же, поехали!

Установка основы

Вначале, установим базовые вещи, нужные для нашей цели:

$ sudo apt-get update
$ sudo apt-get install -y unzip vim git-core curl wget build-essential python-software-properties
Установка Nginx

Дальше, установим Nginx. Отчего он идет первым? Так как при установке пакета hhvm-fastcgi, он [пакет] изменит некоторые конфигурации Nginx, если найдет его.

$ sudo apt-get install -y nginx
Установка HHVM FastCGI

Судя по блогу HHVM мы можем установить HHVM с FastCGI. Дальнейший код установит HHVM и настроит для работы с FastCGI.

$ echo deb http://dl.hhvm.com/ubuntu precise main | sudo tee /etc/apt/sources.list.d/hhvm.list
$ sudo apt-get update
$ sudo apt-get install -y --force-yes hhvm-fastcgi

Примечание: я добавил флаг –force-yes для устранения некоторых задач зависимостей.

Настройка HHVM

HHVM это по сути собственная версия PHP, следственно нам не необходимо устанавливать PHP отдельно. Позже установки вы можете применять HHVM как обыкновенный PHP. Для примера, вы можете исполнять php-файлы:

$ hhvm some_file.php

Так как у нас, видимо, есть Composer и PHPUnit, которые полагают доступность из командной строки, мы можем сделать симлинк php на hhvm:

$ sudo ln -s `which hhvm` /usr/local/bin/php

Сейчас мы можем применять PHP как традиционно!

$ php -v
HipHop VM v2.3.2 (rel)
Compiler: tags/HHVM-2.3.2-0-gf951cb8d8812c59344d5322454853b584b668636
Repo schema: 5b5a4fc9cde5a5d014d1dfdb491bf74e4e700131
HHVM Fast-CGI

Я использую Vagrant, и я хочу, Дабы моим корневым каталогом была директория /vagrant. Для метаморфозы корня, нам необходимо настроить как HHVM, так и Nginx.

Давайте начнем с HHVM. Файл для редактирования: /etc/hhvm/server.hdf Вот однострочная команда для выполнения:

# Change doc root from /var/www/ to /vagrant/
$ sudo sed -i 's/SourceRoot = \/var\/www\//SourceRoot = \/vagrant\//' /etc/hhvm/server.hdf 

После этого перезапускаем HHVM для использования изменений:

$ sudo service hhvm-fastcgi restart
Настраиваем Nginx

Сейчас настроим Nginx. Я сотворю новейший конфигурационный файл под наименованием vagrant:

# Create and edit our new configuration file
$ sudo vim /etc/nginx/sites-available/vagrant

Тут вы можете увидеть финальное содержимое этого файла:

//  File /etc/nginx/sites-available/vagrant
server {
    root /vagrant;
    index index.html index.htm index.php;

    server_name localhost; # 192.168.33.10.xip.io if you are using Vaprobash

    include hhvm.conf;  # Include HHVM's configuration file for Nginx

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ /\.ht {
        deny all;
    }
}
Два значимых примечания

Во-первых, мы не определяем блок location. Установка Nginx до HHVM представляет вероятность HHVM увидеть Nginx и сделать файл /etc/nginx/hhvm.conf для вас. Файл hhvm.conf, тот, что мы подключаем, теснее имеет блок location, необходимый PHP.
Во-вторых, файл hhvm.conf полагает корневой каталог /var/www. Это перезаписывает настройкуroot/vagrant. Нам необходимо изменить это, Дабы наш vagrant-файл определял корневой каталог путем удаления директивы root в файле hhvm.conf:

$ sudo vim /etc/nginx/hhvm.conf
# Then comment out the line 'root /var/www' and save

Сам файл /etc/nginx/hhvm.conf:

location ~ \.php$ {
    # root /var/www
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;
    include        fastcgi_params;
}

Сейчас включим воображаемый хост, тот, что мы только что сотворили:

$ sudo ln -s /etc/nginx/sites-available/vagrant /etc/nginx/sites-enabled/vagrant

Сейчас предстоит перезапустить HHVM-FastCGI и Nginx для введения в силу изменений. Но вначале, сделаем тестовый php-файл.

Немножко PHP

Сделаем примитивный тестовый файл:

$ vim /vagrant/index.php

Что-то примитивное как бы этого:

<?php
echo phpinfo(); // Expected output: HipHop

Дело за малым. Легко перезапускаем hhvm-fastcgi и nginx. Позже этого, вы сумеете увидеть index.php при подключении к IP-адресу сервера (либо к 192.168.33.10.xip.io, если вы юзаете Vaprobash) в браузере.

$ sudo service hhvm-fastcgi restart
$ sudo service nginx reload

Вы обязаны увидеть «HipHop» в браузере.

Laravel

В нашем случае установка Ларавела ничем не отличается от обыкновенной установки оного. С тех пор, как мы симлинкнули PHP, все должно трудиться как часы. Давайте испробуем.

Установка Composer

Это будет обычная глобальная инсталляция:

$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
Установка Laravel

Сейчас нам предоставляется вероятность сделать новейший laravel-план. Я назову его hhlaravel:

# Move to /vagrant so we install Laravel
# into /vagrant/hhlaravel
$ cd /vagrant
$ composer create-project laravel/laravel hhlaravel

Можете попить чая либо кофе, пока установятся все зависимости :)

Конечный шаг: настройка Laravel

Давайте сделаем небольшой твик и установим корневой каталог в /public:

# Fast CGI document root
$ sudo sed -i 's/SourceRoot = \/vagrant\//SourceRoot = \/vagrant\/hhlaravel\/public\//' /etc/hhvm/server.hdf

# Nginx document root
sudo sed -i 's/root \/vagrant;/root \/vagrant\/hhlaravel\/public;/' /etc/nginx/sites-available/vagrant

# Reload configuration
$ sudo service hhvm-fastcgi restart
$ sudo service nginx reload

Все готово! Можете проверить работоспособность с поддержкой браузера.

Предостережения и примечания

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

# Show last 50 lines written out to laravel log
$ tail -n 50 -f /vagrant/hhlaravel/app/logs/laravel.log

Проверьте лог HHVM:

$tail -n 50 -f /var/log/hhvm/error.log

Вы также можете получать stack trace в ваши логи путем метаморфозы конфигурации сервера.

Отредактируйте /etc/hhvm/server.hdf и добавьте директивы InjectedStackTrace и NativeStackTrace.

Log {
  Level = Warning
  AlwaysLogUnhandledExceptions = true
  RuntimeErrorReportingLevel = 8191
  UseLogFile = true
  UseSyslog = false
  File = /var/log/hhvm/error.log
  InjectedStackTrace = true
  NativeStackTrace = true
  Access {
    * {
      File = /var/log/hhvm/access.log
      Format = %h %l %u % t \"%r\" %>s %b
    }
  }
}

И наконец, вы можете добавить немножко итога в окно браузера путем добавления настроек Debug’а в /etc/hhvm/server.hdf:

Debug {
 FullBacktrace = true
 ServerStackTrace = true
 ServerErrorMessage = true
 TranslateSource = true
}

Впрочем помните, что журналы ошибок будут иметь больше подробную информацию об ошибке. Тут есть статья об применении remote debugger’а для HHVM (на себе не испытывал).

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB