Saya sedang mempersiapkan stack LEMP (Linux, Nginx, MariaDB, PHP-FPM) di CentOS untuk percobaan Varnish dari request salah satu pengunjung. Karena kalau saya tuliskan langsung ke Varnishnya nanti takutnya malah ada yang bingung pada setting stacknya jadi saya awali dulu dengan tutorial instalasi Nginx dan kawan – kawannya. πŸ™‚

Patut dicatat yang saya tuliskan disini adalah serba standar untuk setiap software yang diinstall untuk stack LEMPnya. Tidak ada yang eksotis seperti PHP 7.0, Memcached, Redis, PageSpeed Module dan sebagainya. Dan distro Linux yang saya gunakan adalah CentOS 7.

Persiapan awal

Langkah pertama sederhana, tambahkan repository EPEL:

yum install epel-release

Setelah itu silahkan update dulu sistem operasinya:

yum update

Instalasi Nginx

Tidak ada yang sulit, ketikkan perintah berikut untuk install Nginx:

yum install nginx

Setelah itu jalankan proses service Nginx:

systemctl start nginx

Saat saya tuliskan panduan ini yang diinstall adalah Nginx 1.6.3:

nginx version: nginx/1.6.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

Silahkan anda cek alamat IP server anda, buka di browser dan kalau benar prosesnya maka akan muncul halaman selamat datang Nginx.
Test Page for the Nginx HTTP Server on Fedora

Yang saya heran kok tertulis Fedora bukannya CentOS. Haha. πŸ˜€ Memang masih satu keluarga distronya. Mungkin karena didapatkan dari EPEL.

Akhirnya jangan lupa tambahkan proses Nginx setiap kali booting CentOS:

systemctl enable nginx

Instalasi MariaDB

Untuk database server memang sengaja saya gunakan fork dari MySQL yakni MariaDB. Proses instalasinya juga sama mudahnya:

yum install mariadb-server mariadb

Aktifkan proses MariaDB:

systemctl start mariadb

Yang diinstall adalah MariaDB 5.5.44:

mysql  Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1

Pastikan anda mengamankan MariaDB dengan menambahkan password root:

mysql_secure_installation

Sama dengan Nginx, tambahkan service MariaDB saat startup:

systemctl enable mariadb

Instalasi PHP-FPM

Komponen terakhir adalah PHP-FPM, tinggal eksekusi saja perintah berikut:

yum install php php-mysql php-fpm php-opcache

Ada satu sistem cache yang bisa dimanfaatkan yaitu PHP OPcache.

Seperti biasa, panggil prosesnya:

systemctl start php-fpm

Dan yang diinstall adalah PHP 5.4.16:

PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

Juga tambahkan pada proses booting Linux:

systemctl enable php-fpm

Bisa anda perhatikan pada proses instalasi Nginx, MariaDB dan PHP-FPM tidak ada yang sulit. Memang seperti itu kok. πŸ™‚

Konfigurasi PHP -FPM

Nah… baru kita masuk ke bagian yang agak sulit yaitu setting PHP-FPM. Pertama edit konfigurasi PHPnya:

nano /etc/php.ini

Kemudian cari cgi.fix_pathinfo, hilangkah simbol komentar diawalnya (;), dan ubah seperti dibawah:

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

Baru kita modifikasi konfigurasi PHP-FPM:

nano /etc/php-fpm.d/www.conf

Kita ganti agar PHP-FPM mendengarkan memanfaatkan socket bukannya port, karena performanya lebih baik. Jadi dari ini:

listen = 127.0.0.1:9000

Menjadi ini:

listen = /var/run/php-fpm/php-fpm.sock

Dibawahnya hilangkan komentar pada listen.owner dan listen.group:

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0666
listen.owner = nobody
listen.group = nobody
;listen.mode = 0666

Dan terakhir ganti agar user dan group yang digunakan adalah untuk Nginx, defaultnya untuk Apache:

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;	will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx 
; RPM: Keep a group allowed to write in log dir.
group = nginx

Simpan perubahan konfigurasinya dan keluar.

Jangan lupa ambil alih kepemilikan direktori session PHP:

chown -R nginx:nginx /var/lib/php/session/

Setelah itu restart PHP-FPM:

systemctl restart php-fpm

Menghubungkan Nginx dengan PHP-FPM

Secara default Nginx tidak mengenali bagaimana cara proses file php jadi perlu kita tambahkan dan hubungkan. Ini dimulai dengan edit konfigurasi defaultnya:

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

Semestinya sudah ada isinya dan kalau belum pun ubahlah menjadi seperti berikut:

server {
    listen       80;
    server_name  192.168.3.222; #Gantikan ini dengan alamat IP server anda.
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Bila sudah maka restart Nginx:

systemctl restart nginx

Ujicoba proses PHP

Akhirnya kita ingin tahu hasilnya sukses tidak kan? Mudah kok, kita buat file untuk cek informasi PHP lokasinya nanti di /usr/share/nginx/html/:

nano /usr/share/nginx/html/info.php

Dan isikan kode berikut didalamnya:

<?php phpinfo(); ?>

Setelah itu akses VPS anda dan semestinya akan muncul halaman PHP Info seperti berikut.
CentOS 7 LEMP phpinfo

Ya selesai sudah instalasi LEMP pada CentOS 7

Setting Virtual Host Nginx

Untuk menambahkan website baru kedalamnya maka anda perlu membuat virtual host baru, nanti lokasinya sangat disarankan /usr/share/nginx/ dan buat direktori baru dengan nama domain anda disana. Misal:

mkdir /usr/share/nginx/servernesia.com

Upload file – file website anda kesana.

Kemudian silahkan buat konfigurasi virtual host baru, lokasinya ada di /etc/nginx/conf.d/ dan beri nama filenya sama dengan domainnya biar mudah. Contohnya:

nano /etc/nginx/conf.d/servernesia.conf

Dan isinya tinggal copy-paste saja dari default.conf, tinggal gantikan isi servername dengan nama domainnya. Jangan lupa restart Nginx setelahnya.

Penutup

Semua konfigurasinya masih default dan mungkin ada di beberapa bagian bisa dioptimalkan lagi. Tergantung spesifikasi VPS anda nantinya.

Semoga tidak ada yang ketinggalan, pas saya coba lancar jaya sih. Haha. πŸ˜€ Dari sini akan saya lanjutkan ke instalasi Varnish di CentOS 7.