Instalasi LEMP pada CentOS 7
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.
Daftar Isi
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.
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.
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.
varnish? asik saya nunggu nih artikel.. request deh vestacp + varnish..
oia memcache dan varnish itu sama apa tidak yah? heheh
thanks mas
Iya mas, semoga bisa secepatnya. π Tapi kalau sama VestaCP seharusnya kompatibel, semoga tidak ada perbedaan dengan stack LEMP nantinya.
Sama – sama cachenya tapi lain mas. Kalau Memcached itu yang dicache adalah database query dan objek kedalam RAM sedangkan Varnish itu HTTP Accelerator dan yang dicache itu ya halaman website.
Jadi, dipakai berbarengan bisa gak mas? atau harus salah satu? Kalau salah satu, baiknya yang mana? hehe thnks
Bisa mas, lain kok fungsinya. Kalau salah satu sih lebih baik Memcached dulu. Varnish ini… walau kelihatannya gampang tapi bisa repot di detailnya.
pingin pakai juga yg centos 7 tapi sayang cuma ada yg 64bit dan juga sedikit bingung dengan perintah barunya systemctl, apalagi bawaan firewal seperti centos 6 sudah nggak ada.
Loh mbak Shafira akhirnya muncul juga. π
Nah… saya malah baru tahu kalau firewallnya ganti. Ternyata dari
iptables
kefirewalld
? Wah… saya harus belajar lagi. Haha. π Trims infonya mbak. Asli saya anggap sama saja.Kalau
systemd
memang format perintahnya lain mbak, tapi ternyata sudah disetting kompatibilitasnya agar perintah dengan formatsysvinit
. Misal ya mbak, anda menjalankan proses MySQL dengan format CentOS 6:Maka dalam CentOS 7 akan muncul pesan berikut:
Oh ya mbak, pernah coba Varnish? Saya sedang coba – coba sekarang.
varnish belum coba mas,,masih tetap pakai memcached π
nanti kalau php7 sudah kompatibel dengan memcached kayaknya bakal sekalian migrasi ke centos 7 π nah untuk perintah chkconfig apa akan otomatis juga di redirect seperti perintah service di atas?
Dicoba mbak Varnishnya, siapa tahu cocok. π Beda yang dicache soalnya dengan Memcached, lebih optimal rasanya.
Wih… ngeri. Haha. π Saya juga aslinya masih nunggu mbak supaya sudah kompatibel ekstensi – ekstensi esensial PHP yang belum ada di PHP 7.0. Lama. π
Ini baru saya coba mbak, misal untuk Apache:
Juga akan dialihkan otomatis:
wah trims infonya mas chandra, ternyata perintah lama dari centos 6 bisa juga dieksekusi di centos 7, lihat2 komentar di beberapa forum tentang centos 7 memang banyak yg nunggu sampai betul kompatibel dengan beberapa ekstensi β ekstensi esensial PHP. sebenarnya ngebet banget pengen upgrade karna lihat review dari mas chandra khusus untuk penggunaan memory tapi karna hanya tersedia untuk 64bit ditambah hanya untuk droplet $5 π
hmm untuk varnish, lihat2 dulu apa cocok dengan xenforo, nanti coba gogling di komunitasnya π
Saya aslinya tahu ga sengaja mbak, kebiasaan CentOS 6 kebawa ke 7. Pas lihat pesannya cuma terpikir sekarang sudah beda. Haha… π
Eh mbak, ga minat coba HostUS untuk Singapore? Baru launching dan pakai Softlayer mereka datacenternya: https://hostus.us/
Kenceng dari Indonesia pas dibenchmark bandwidthnya, saya lihat hasilnya dari orang lain di LowEndTalk. Lebih murah juga dari DigitalOcean. Walaupun OpenVZ sih.
XenForo ya mbak, saya punya lisensinya tapi nganggur. Dulu ada niat bikin forum tapi gagal. Kalau yang berbayar yang bagus lainnya mungkin Woltlab Burning Board. IPB terlalu mahal dan banyak ketentuannya.
Jadi nostalgia, dulu pertama kali jadi administrator – bagian ngurus backend bukan diskusinya – adalah pas jaman kuliah pakai vBulletin 4 buat komunitas resmi kampus. Bener – bener belajar dari nol dan yang mengawali saya terjun ke dunia VPS.
belum berani coba layanan lain kalau belum ada yg coba disini atau setidaknya oleh mas chandra π
nah itu sudah ada lisensinya,,kayaknya lebih asik kalau servernesia ada forumnya juga, maaf, kadang saya agak kesulitan nyari komentar lama saya disini dengan mas chandra, sudah coba pakai fitur search tapi yg muncul bukan yg dicari, karena dari komentar sebelumnya ada tips dari mas chandra yg harus saya lihat lagi π
Waduh… saya jadi tumbalnya mbak? Ahaha. π Saldo PayPal saya sekarat kalau dibuat korban.
Wah… forum ya, jadi ingin bikin sih mbak. Biar ada tambahan diskusi/manfaatnya. Ya kalau ada partisipannya nanti saya pasang deh. π Saya saja kadang pakai Google mbak kalau ga ketemu dimana saya hutang tutorial. π
Edit:
Akhirnya saya pasang XenForonya: http://forum.servernesia.com/ Silahkan join. π
Mas Chandra, saya sudah selesai dengan installasinya, terus udah saya jalanin NGINXnya (
systemctl start nginx
) tapi ketika saya mau ngecheck dengan alamat IP gak bisa ya? This site canβt be reached. Apanya ya mas yang kurang? Harusnyakan muncul NGINX? Apa yang salah ya mas sama settingnya? Bingung?Ketika saya ingin coba untuk akses melalui IP Address, Welcome to NGINXnya tidak bisa ditampilkan. Saya bingung, saya sudah mengikuti setiap langkah yang ada.
Saya sudah check dengan
nginx -t
, berjalanSaya cek Port iptablesnya juga udah public.
Saya bingung. Mohon bantuannya mas Chandra. Terima kasih sebelumnya.
Mas coba cek log error Nginxnya apa ada isinya. Juga PHP-FPM. Seharusnya secara default ya muncul halaman Nginx.
Siang mas chandra,
bagaimana kabarnya? semoga sehat2 selalu.
berhubung centos 8 sudah rilis, mohon dibuatkan tutorial LEMP untuk Centos 8, mas.
Terima Kasih.
Wah saya telat jauh ya mbak. π
Saya usahakan nulis tutorialnya lagi.