Установка HHVM, Nginx и Laravel на Ubuntu 14.04.2 LTS

Привет, это короткий, step-by-step практический мануал по установке и минимальной настройке HHVM, Nginx и Laravel на Ubuntu 14.04.2 LTS. Я устанавливал эту связку ради чистого любопытства, но вам как разработичку или админу это может послужить реальным руководством по настройке. Кратко из Викепедии, HHVM – HipHop for PHP (букв. HipHop для языка PHP) — транслятор исходного кода, созданный компанией Facebook.

HipHop программно превращает исходный код, написанный на языке PHP, в оптимизированный код на C++, а затем использует компилятор g++ для его компиляции. HipHop включает в себя транслятор кода, альтернативную реализацию среды выполнения PHP, а также множество наиболее распространённых расширений PHP (англ. PHP Extensions), переписанных на C с целью повышения производительности. Nginx — простой, быстрый и надёжный сервер, не перегруженный функциями.

Применение nginx целесообразно прежде всего для статических веб-сайтов и как прокси-сервера перед динамическими сайтами. Ну и наконец небезызвестный Laravel – бесплатный веб-фреймворк с открытым кодом, предназначенный для разработки с использованием архитектурной модели MVC (англ. Model View Controller — модель-представление-контроллер).

Установка и настройка HHVM, Nginx и Laravel на Ubuntu

Как вы помните работать мы будем на Ubuntu 14.04.2 LTS, так что для начала давайте обновим систему и поставим все необходимые пакеты:

sudo apt-get update
sudo apt-get install -y unzip vim git-core curl wget build-essential python-software-properties
sudo apt-get update
sudo apt-get install -y unzip vim git-core curl wget build-essential python-software-properties

Теперь можно установить официальные репозитории веб-сервера Nginx а затем и сам Nginx:

vim /etc/apt/sources.list
 
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
vim /etc/apt/sources.list

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

Установка Nginx:

apt-get update
apt-get install nginx
apt-get update
apt-get install nginx

Теперь можно установить репозитории для HHVM, а также сам пакет:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install hhvm
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install hhvm

Пацаны с фейсбука сильно подсуетились и подготовили скрипт для конфигурации hhvm:

sudo /usr/share/hhvm/install_fastcgi.sh
sudo /usr/share/hhvm/install_fastcgi.sh

Подробнее об официальном репозитории вы можете прочитать на этой страничке.
Теперь, когда пакеты HHVM и Nginx установлены. Можем выполнить перезагрузку демонов:

/etc/init.d/nginx restart
/etc/init.d/hhvm restart
/etc/init.d/nginx restart
/etc/init.d/hhvm restart

Теперь, когда базовая установка выполнена, необходимо проверить, что все работает как надо. Стоит напомнить, что по умолчанию Nginx “слушает” директорию /usr/share/nginx/html/ или в некоторых установках /var/www/html/ вы можете проверить это в файле /etc/nginx/sites-available/default если установка стандартна.

HHVM умеет обрабатывать два вида файлов, это .hh or .php, файлы вида .hh относятся к языку hack созданному в недрах Facebook. Создайте новый файл:

vim /usr/share/nginx/html/test.php
 
< ?php
echo "Hello world!\n";
vim /usr/share/nginx/html/test.php

< ?php
echo "Hello world!\n";

И запустите его, например так:

[email protected]:~# hhvm /usr/share/nginx/html/test.php
Hello world!
[email protected]:~# hhvm /usr/share/nginx/html/test.php
Hello world!

Или откройте ссылку в браузере:
hhvm_test

Все отлично работает!

Базовая установка Laravel

Перед тем как устанавливать Laravel, нам необходимо подготовить несколько вещей, а именно создать директорию для него, создать виртуальный хост и директорию с логами, давайте по порядку:

mkdir -p /var/www/laravel
mkdir -p /var/log/nginx/
touch /var/log/nginx/localhost.laravel-access.log
touch /var/log/nginx/locahost.laravel-error.log
mkdir -p /var/www/laravel
mkdir -p /var/log/nginx/
touch /var/log/nginx/localhost.laravel-access.log
touch /var/log/nginx/locahost.laravel-error.log

Откройте файл:

vim /etc/nginx/sites-available/laravel
vim /etc/nginx/sites-available/laravel

Содержимое файла:

server {
    listen 80 default_server;
 
    root /var/www/laravel;
    index index.php;
 
    server_name localhost;
 
    access_log /var/log/nginx/localhost.laravel-access.log;
    error_log  /var/log/nginx/locahost.laravel-error.log error;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }
 
    error_page 404 /index.php;
 
    include hhvm.conf;  # The HHVM Magic Here
 
    # Deny .htaccess file access
    location ~ /\.ht {
        deny all;
    }
}
server {
    listen 80 default_server;

    root /var/www/laravel;
    index index.php;

    server_name localhost;

    access_log /var/log/nginx/localhost.laravel-access.log;
    error_log  /var/log/nginx/locahost.laravel-error.log error;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    error_page 404 /index.php;

    include hhvm.conf;  # The HHVM Magic Here

    # Deny .htaccess file access
    location ~ /\.ht {
        deny all;
    }
}

Вы помните, что в Убунту есть системa софт линков для “включения\выключения” сайта (т.е. нет необходимости удалять файл виртуального конфига, можно просто удалить ссылку на него в директории sites-enabled), создадим ссылку на Laravel:

sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/laravel
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/laravel

И удалим дефолтную ссылку:

cd /etc/nginx/sites-enabled/
ls -l
lrwxrwxrwx 1 root root 34 Jun 11 17:45 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 34 Jul 12 14:06 laravel -> /etc/nginx/sites-available/laravel
cd /etc/nginx/sites-enabled/
ls -l
lrwxrwxrwx 1 root root 34 Jun 11 17:45 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 34 Jul 12 14:06 laravel -> /etc/nginx/sites-available/laravel

Удалите ссылку на дефолный сайт:

rm -rf default
service nginx reload
rm -rf default
service nginx reload

Сначала установим Composer:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Теперь давайте установим Laravel:

cd /var/www/laravel
composer create-project laravel/laravel laravel
cd /var/www/laravel
composer create-project laravel/laravel laravel

Далее вы можете убедится в том, что фреймворк работает:
LARAVELLL