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!