Bagi yang sudah pernah berurusan dengan situs yang berat, Anda pasti juga jengah dengan kelakuan PHP-FPM. Ada beberapa solusi yang saat ini tersedia:

Beberapa waktu yang lalu saya sudah membahas tentang uWSGI. Sekarang, saya mau mencoba teknologi HHVM. Doakan saja supaya saya tidak malas dan juga mau mencoba HippyVM dan PHP7-FPM sehingga saya bisa menuliskan untuk Anda.

Pasang HHVM

Cara pasang HHVM di berbagai sistem operasi ada di sini. Saya asumsikan hendak dipasang di sistem operasi Debian Jessie.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
echo deb http://dl.hhvm.com/debian jessie main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm

Perintah-perintah ini pada intinya memasang kunci paket repo HHVM dan menambahkan repo tersebut ke daftar repositori sistem. Kemudian, perbaharui daftar paket yang tersedia dan pasang HHVM.

Selanjutnya, ubah konfigurasi HHVM di /etc/hhvm/server.ini menjadi

; php options

pid = /var/run/hhvm/pid

; hhvm specific 
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

; Generate JIT codes sooner!
hhvm.eval.jit_warmup_requests = 1

; Disable Perf debugging
hhvm.keep_perf_pid_map = 0
hhvm.perf_pid_map = 0
hhvm.perf_data_map = 0

Ada beberapa perbedaan dengan konfigurasi biasa. Berikut yang penting:

  • Saya memilih untuk menggunakan socket dari pada port TCP karena lebih aman dalam menentukan hak akses.
  • Saya menyuruh HHVM untuk segera mengaktifkan optimasi dari sejak awal. Hal ini mengakibatkan peladen agak lama di awal.
  • Saya mematikan fungsi profiling. Fungsi ini berguna kalau Anda mau men-debug kode PHP Anda yang dieksekusi oleh HHVM. Kemungkinan besar, Anda terlalu malas seperti saya. Fungsi ini hanya akan memenuhi /tmp dengan berkas peta performa.

Pasang NGINX

Pertama-tama, pasang NGINX:

sudo apt-get install nginx

Set upstream NGINX ke HHVM di berkas /etc/nginx/conf.d/upstream.conf

# Upstream to abstract backend connection(s) for PHP.
upstream php-hhvm {
  server unix:/var/run/hhvm/hhvm.sock;
}

Lalu, buat sebuah blok konfigurasi /etc/nginx/php-hhvm

location ~ \.(hh|php)$ {
    try_files $uri =404;

    fastcgi_keep_conn on;
    fastcgi_pass   php-hhvm;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Ini saya ambil dan modifikasi sedikit dari hhvm.conf yang biasanya terpasang saat kita memasang HHVM.

Nah, setiap Virtual Host yang mau menggunakan, tinggal mengikutkan berkas php-hhvm di dalam berkas konfigurasinya. Misalnya, kita buat sebuah berkas /etc/nginx/sites-available/default

server {
    # Anything not directed at specific host will hit "Welcome to nginx"
    listen 80 default_server;
    server_name _;
    
    root /var/www/html;
    index index.php index.html index.htm;

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

        include php-hhvm;

}

Jangan lupa, ini cuma contoh! Untuk mesin produksi, tolong ubah berkas direktori dan tambahkan beberapa aturan untuk menghindari injeksi.

Selanjutnya, pasang seperti biasa ala Debian:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
sudo invoke-rc.d nginx reload

Beres.

Eits! Nanti dulu, Kisanak! Supaya situs tetap berjalan, mari pasang Monit untuk memonitor keberadaan HHVM. Menurut pengalaman saya, awal-awal HHVM rentan terhadap aplikasi yang harus dinyalakan ulang.

Pasang Monit

Pasang Monit.

sudo apt-get install monit

Buat konfigurasi Monit untuk HHVM di /etc/monit/conf.d/hhvm yang isinya:

check process hhvm with pidfile /var/run/hhvm/pid
  group hhvm
  start program = "/usr/sbin/service hhvm start" with timeout 60 seconds
  stop program = "/usr/sbin/service hhvm stop"
  if failed unixsocket /var/run/hhvm/hhvm.sock then restart
  if mem > 400.0 MB for 1 cycles then restart
  if 5 restarts with 5 cycles then timeout

Untuk dapat memonitor Monit, langkah opsional yang dapat diambil adalah dengan mengubah 3 baris berikut pada /etc/monit/monitrc

set httpd port 2812 and
   use address localhost  # only accept connection from localhost
   allow localhost        # allow localhost to connect to the server and

Kalau pada konfigurasi Jessie, baris-baris itu mulai dari baris ke-130.

Setelah selesai, muat ulang Monit:

invoke-rc.d restart monit

Kalau mau lihat Monit, silakan ketik:

sudo monit status

Tentunya, langkah opsional dikerjakan. Bila tidak, maka Monit tak dapat dilihat.

Selesai!