Yuk install LEMP stack paling mutakhir!
Orang kalau mendengarkan sebuah VPS disetting memakai stack LEMP/LNMP (Linux, Nginx, MySQL, PHP) biasanya masih menggunakan yang standar versinya dan mencari tutorialnya sendiri sangatlah mudah di internet. Tapi kemarin ada request dari mbak Shafira bagaimana cara install semua software diatas yang versi terbarunya di CentOS:
- Nginx 1.9.9
- MariaDB 10.1 – Ini fork dari MySQL, jadi masih kompatibel.
- PHP 7.0 – Ini versi terbaru PHP dan masih belum standar.
- Memcached
- phpMyAdmin
Benar – benar bleeding edge versi yang digunakan, karena saya sendiri sampai rasanya berdarah – darah menguji coba dan menuliskan tutorialnya. Haha. 😀
Sedikit penjelasan dulu, kalau anda mengikuti panduan instalasi Nginx, PHP dan MariaDB berikut ini maka akan mendapatkan versi paling mutakhirnya baik sudah stabil atau belum. Bisa jadi yang anda install nanti malah lebih baru versinya daripada yang saya coba sekarang. Tidak standar soalnya. Tapi aman kok, karena semuanya melalui repository jadi masih bisa diupdate ke versi barunya. Tidak compile dari source atau metode – metode aneh lainnya yang akan merepotkan kedepannya.
Semua langkah – langkah dibawah dengan asumsi menggunakan CentOS 6.7 32-bit, untuk versi lainnya bisa anda cari sendiri perintah alternatifnya atau tanyakan di komentar.
Daftar Isi
Langkah 1: Install Nginx Mainline
Sebelumnya mari kita update dulu seluruh paket aplikasi yang terdapat dalam CentOS, ini wajib buat saya:
yum update
Kemudian kita tambahkan repository CentOS untuk Nginx versi 1.9.9 – termasuk edisi mainline
versi ini, kalau anda cuma install menggunakan repository EPEL atau REMI hanya akan muncul yang stable
dan saat ini masih di 1.8.0.
Ketikkan perintah ini:
nano /etc/yum.repos.d/nginx.repo
Didalamnya tambahkan kode berikut
[nginx]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Sudah, lanjutkan dengan instalasi Nginx:
yum install nginx
Setelahnya cek saja versi Nginx apa yang telah terpasang:
nginx -V
Informasinya akan mirip seperti ini:
nginx version: nginx/1.9.9
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_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_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables'
Yuk kita jalankan proses Nginx:
service nginx start
Dan kalau malah muncul pesan error:
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[FAILED]
Berarti sudah ada web server lain yang aktif di port 80, semestinya httpd
(Apache) dan solusinya antara anda matikan:
service httpd stop
Atau dihapus:
yum remove httpd
Terserah anda pilih yang mana. Saran saya nonaktifkan saja, nanti anda tahu alasan saya pas install PHP 7.
Saya beri catatan dimana direktori default Nginx supaya tidak bingung mencarinya:
/usr/share/nginx/
– root directory, bisa anda tambahkan virtual host disini./etc/nginx/conf.d/default.conf
– konfigurasi default dari virtual host./etc/nginx/conf.d
– yang diatas copy-paste dan masukkan disini sesuai nama domainnya./etc/nginx/nginx.conf
– konfigurasi default dari web server nginx.
Akhirnya selesai untuk Nginx. 😀
Langkah 2: Install MariaDB 10.1
Instalasi MariaDB versi 10.1 malah yang paling mudah menurut saya, pertama kita tambahkan repositorynya:
nano /etc/yum.repos.d/MariaDB.repo
Isikan kode berikut didalamnya:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Ingat ini untuk CentOS 6 32-bit ya.
Selanjutnya tinggal install saja:
yum install MariaDB-server
Dan jalankan prosesnya:
service mysql start
Benar – benar gampang dan cepat kan? Tidak ada password rootnya lho jadi ketik perintah mysql
akan langsung masuk ke databasenya, perlu anda amankan dulu saran saya.
Langkah 3: Install PHP 7
Install PHP versi 7 ini yang membuat saya kurang tidur. Awalnya sudah sulit sekali menemukan mana ini repository yang tepat. Walaupun banyak di internet menuliskan repository Remi atau Webtatic tapi masih menggunakan nama paket aplikasi lama: php70
. Ternyata sudah berubah karena PHP 7 sudah masuk status release, jadi ikut penamaan standar PHP yang biasanya. F***! Agak emosi jadinya gagal terus. Haha. 😀
Seperti biasa kita tambahkan repository syaratnya, yakni EPEL dan Remi:
yum install epel-release
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6*.rpm
Baru kita install PHP 7, bisa anda perhatikan ada repository Remi khusus untuk PHP 7.0:
yum --enablerepo=remi-php70 install php php-fpm php-opcache php-bcmath php-cli php-gd php-mbstring php-mcrypt php-mysql php-mysqlnd php-odbc php-pdo php-pdo_dblib php-pear php-pecl-xdebug php-process php-pspell php-recode php-xml php-xmlrpc
Momen WTF saya pas lihat httpd kok ikut diinstall lagi sebagai dependensinya. Haha. Padahal niatnya murni Nginx. Nah ini alasan saya agar dimatikan saja, ganti portnya atau mungkin Nginx yang dijadikan reverse proxy, kalau dihapus nanti lenyap juga instalasi PHPnya. Oh ya, mungkin modul – modul PHP yang saya ikut sertakan diatas terlalu banyak.
Segera saja dicek apakah benar sudah terinstall:
php -v
Hasilnya akan muncul pesan seperti berikut:
PHP 7.0.2 (cli) (built: Jan 6 2016 14:53:11) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans
Yes! 😀
Mari kita jalankan proses PHP FastCGI Process Manager atau biasanya disebut PHP-FPM
:
service php-fpm start
Akan aktif di localhost dengan port 9000
.
Langkah 4: Menyambungkan Nginx 1.9.9 dengan PHP 7.0.2 lewat FastCGI
Ini adalah bos terakhir dalam petualangan kita, dan paling sulit ternyata. Mungkin karena ngantuk atau sudah lupa beberapa mantra untuk menjamin kelanggengan om Nginx dan tante PHP. 🙂
Pertama edit dulu setting PHP:
nano /etc/php.ini
Cari kode dibawah, hilangkah komentarnya dan ganti nilainya dari 1 menjadi 0:
; 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
Selanjutnya mari kita instruksikan Nginx lewat setting virtual host default bahwa script PHP bisa dieksekusi:
nano /etc/nginx/conf.d/default.conf
Didalamnya anda akan menemukan kode serupa:
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
Tambahkan index.php
diawalnya sesuai potongan kode diatas.
Ini belum selesai editnya dan geser kebawah sampai menemukan bagian location mirip dibawah, sekarang kita akan menyambungkan Nginx dengan PHP-FPM:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Saya terbentur beberapa lama di kode diatas karena walaupun ada file php dan saya coba akses kok malah error. Akhirnya ketemu yang tepat.
Akhirnya kita setting agar PHP-FPM menggunakan Nginx:
nano /etc/php-fpm.d/www.conf
Ubah dari sebelumnya apache menjadi nginx untuk user dan groupnya:
; 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
Kemudian mari kita restart Nginx dan PHP-FPM setelah semua settingnya dimodifikasi:
service nginx restart
service php-fpm restart
Selesai!
Langkah 5: Uji coba PHP bisa dijalankan oleh Nginx
Ini langkah mudah sebenarnya, pertama kita buat dulu file PHPnya:
nano /usr/share/nginx/html/phpinfo.php
Ingat, saya masih menggunakan default dari direktori Nginx. Silahkan anda sesuaikan sendiri kalau sudah menggunakan virtual host/nama domain.
Kemudian isikan kode berikut:
<?php
// Tampilkan informasi instalasi PHP pada server
phpinfo();
?>
Setelah itu buka file php diatas lewat browser, bisa lewat alamat IP server atau nama domainnya. Kalau semuanya berjalan lancar akan muncul seperti ini halamannya:
Selamat! Anda sudah berhasil menginstall LEMP stack yang benar – benar terbaru. Untuk proses menambahkan website dan sebagainya sama seperti biasanya.
Sekarang tinggal menambahkan agar layanan (daemon) nginx dan php-fpm ini selalu dijalankan saat server hidup/reboot:
chkconfig nginx on
chkconfig php-fpm on
chkconfig mysql on
Selesai sudah petualangan kita. 😀
Penutup
Ternyata tidak semudah yang saya kira kalau mau install dari awal. Haha. 😀 Sebelumnya saya cuma coba upgrade PHP 5.6 ke PHP 7.0 jadi semua settingnya masih memanfaatkan yang lama, tidak seperti yang saya bahas karena benar – benar dari nol.
Untuk Memcached sendiri saya masih belum mencoba karena memang belum kompatibel, jadi nanti akan menyusul. Tapi PHP OPcache sudah siap dan telah saya ikutkan dalam modul PHP yang diinstall diatas. Sedangkan phpMyAdmin saya coba tidak ada bedanya dengan cara yang biasa, tinggal diletakkan pada direktori root atau virtual hosting Nginx dan akses seperti biasanya saja.
Semoga bermanfaat. 🙂
*Ini tidak penting sih, saya kesulitan mencari judul yang tepat karena ini bukan menginstall LEMP stack yang biasanya. Semoga cocok yang saya pilih. Hehe. 🙂
terima kasih banyak mas chandra dan maaf sudah menggangu jam istirahatnya 😀
jadinya nggak perlu aktifkan dulu repo remi dan phpnya di file
/etc/yum.repos.d/remi.repo
ya langsung eksekusi langsung perintah instal phpnya.saya coba dulu mas 🙂
Haha, ga masalah kok mbak. Agak menantang soalnya. Pikir saya sekalian belajar lagi. Enak (atau ga enaknya?) belajar server ini sekali berhasil jarang sekali masalah, jadi hal – hal baru seperti PHP 7.0 ini kalau tidak ada kasus atau kebutuhan ya kapan – kapan saja nyobanya. 🙂
Saya terlalu meremehkan juga sih, dipikir sama kaya biasanya. Hasil di Google sendiri kurang pas, rata – rata cuma install PHP 7.0 saja dan masih memanfaatkan repository lama atau sudah tidak valid lagi. #curhat
sudah coba dan berhasil trims mas chandra 🙂
mungkin tambahan bisa ditambahkan perintah :
biar otomatis berjalan saat vps direstart
saya coba juga dengan cara lain mungkin sama saja sebenarnya untuk instal php7 (maunya agar remi repo selalu aktif):
untuk menyambung nginx dengan php saya gunakan perintah ini :
dan uji coba phpnya bisa menggunakan perintah ini:
dan….saya coba instal memcached dan ekstesinya seperti tutor mas chandra sebelumnya berhasil! jalan dengan baik 🙂 tapi nanti lihat2 lagi gimana perkembangannya 😀 performanya memang mantap pakai php7.
oh ya tambahan cara diatas dengan centos 6.7 versi minimalis di xvmlabs jadi selama proses untuk apache nggak ikut ke install 🙂
Loh iya mbak, kelupaan chkconfignya. Haha. 😀 Gini ini kalau sudah kebiasaan jadi tidak dicatat, langsung reflek saja edit – editnya. 😛 Terimakasih sudah saya koreksi, sekalian nambahin kalau PHP-FPM pakai user dan grup nginx untuk daemonnya. Lupa juga ternyata.
Kalau ga dikomentari proses instalasinya ternyata cuma beberapa baris ya. Hehe. 😀 Iya mbak, kurang lebih sama saja maksudnya. Enaknya di Linux banyak jalan menuju Roma. 🙂 Bisa banyak variasinya, tingga pilih mana yang menurut kita paling mudah dipahami.
Soal memcached memang bisa diinstall mbak, tapi yang saya maksudnya itu belum kompatibelnya modul
php-memcached
jadi PHPnya sendiri yang belum bisa memanfaatkan. Bisa dicek di GitHubnya bagian Issues: https://github.com/php-memcached-dev/php-memcached/issues ada beberapa yang masih membahas PHP 7.0 dan belum fix.Tapi ini di CentOS saja tampaknya, dan ternyata di Debian sudah ada yang membuatkannya lengkap: https://github.com/kasparsd/php-7-debian . Ilmu saya belum sesakti ini. 🙁
Sempat nyoba pake PHP 7.0 di Centos6 dan performanya sekilas memang responsif mas tapi pas benchmark php dengan konfigurasi yang sama diatas kok hasilnya jelek ya. Agak bingung juga dengan hasil benchmark tapi blog WP rasanya lebih responsif.
-------------------------------------- | PHP BENCHMARK SCRIPT | -------------------------------------- Start : 2016-02-23 06:19:48 Server : 128.x.x.x PHP version : 7.0.3 Platform : Linux -------------------------------------- test_ifelse : 4.766 sec. test_loops : 6.872 sec. test_stringmanipulation : 3.239 sec. test_math : 2.890 sec. -------------------------------------- Total time: : 17.767 sec.
Request install HHVM+nginx+MariaDB on Centos6 donk mas Chandra 😀 Rasa-rasanya liat benchmark HHVM di blog luar bagus juga.
Benchmark PHPnya jangan dijadikan patokan juga sih mas, soalnya itu berdasarkan PHP 5 bukan PHP 7. Saya yakin tidak memanfaatkan fitur – fitur terbaru dari PHP 7 soalnya. Nanti saya coba cari tahu apa yang paling akurat untuk benchmark PHP.
Oke mas, tapi HHVM resminya cuma ada di Ubuntu dan Debian mas. Jadi saya nanti rencananya menggunakan Debian 8 untuk testingnya.
Ohh begitu, iya juga si saya juga sedikit bingung dengan hasil benchmark tadi soalnya blog WP benar-benar terasa lebih responsif dari sebelumnya. Siap mas, ditunggu 😀
Makasih mas Chandra, saya tunggu info selanjutnya. Semoga HHVM sama php 7.0 performanya bisa diadu. hehe
apa ada tanda2 sudah mulai di support?
http://rpms.remirepo.net/enterprise/7/php70/x86_64/repoview/php-pecl-memcached.html
Nah… menurut catatannya sih:
This extension uses libmemcached library to provide API for communicating with memcached servers. memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. It also provides a session handler (memcached). Package built for PHP 7.0.
Mestinya iya? Tapi saya belum tes mbak.
Lanjut cek ke Github secara resmi belum ada rilisnya, masih ada masalah: https://github.com/php-memcached-dev/php-memcached/issues/213
saya sudah tes dan sejauh ini jalan dengan baik belum ada masalah 🙂
Sep mbak. 🙂 Makasih followupnya.
mas chandra, sudah coba update php 5.6.24 ke versi 5.6.25?
saya coba kok notifikasinya update not available ya, padahal versi barunya sudah rilis, apa belum masuk di repo remi ya?
http://php.net/downloads.php#v5.6.25
Saya malah belum update sama sekali mbak. Haha. 😀
Repo Remi masih di 5.6.24:
http://rpms.famillecollet.com/enterprise/6/php56/i386/repoview/
http://rpms.famillecollet.com/enterprise/6/php56/x86_64/repoview/
Wajar kalau updatenya belum bisa. 😀
empunya lagi liburan 😀
http://blog.remirepo.net/post/2016/08/13/Closed-for-the-holidays
Oalah… saya baru tahu. 😀 Mungkin capek ngurusin update reposnya. Dan tampaknya sudah tahu banyak yang nunggu PHP versi terbaru ditambahkan. 🙂
Selamat sore mas, saya barusan install php7.1 dan cara setting PHP-FPM nya bagaimana ya?
Terimakasih
Mau setting gimananya mas? Beda dengan yang saya tuliskan di tutorialnya?
Sudah berhasil mas tadi saya instal ulang menggunakan repo ius, nanti kalau ada kesulitan saya kesini lagi, terimakasih.
Siap mas. 😀 Kompatibel CMSNya dengan PHP 7? Pakai yang 7.0 atau 7.1 mas?
wahh enak yang 7.1 apa 7.0 nih mas chandra? kalo bisa yang compatible dan stable buat wordpress hehe
Loh WordPress setahu saya sudah kompatibel PHP 7.0 mas, yang 7.1 mungkin juga. Masalahnya bukan WordPressnya, tapi plugin dan theme yang belum tentu support.
nah itu mas hehe, berarti mainnya yang 7.0 aja yah? daripada 7.1 bisa berbahaya buat situs kita hehe.
thanks mas chandra 😀
Mungkin suatu saat saya coba migrasi dari PHP 5.6 ke 7.0 dulu mas. Kebetulan blog ini minim pluginnya. 😀 Tampaknya lebih aman.
Bakal lebih asyik lagi kalau install sebelahan antara 5.6 dan 7.0/7.1, tinggal ganti mau pakai mesin PHP-FPM yang mana saja. Mestinya bisa sih.
lha di EE udah ada dual PHP mas yang jalan, yaitu PHP v5.6 dan juga PHP 7 tergantung kita memilih saat instalasinya seperti tutorial sampean itu lhoo :D.
jadi bener2 2 PHP FPM berjalan bersandingan :).
http://prnt.sc/dsvcs4
maka dari itu saya doyan ama EE selain ringan juga gak ribet instalasi dll. lebih mudah daripada install LEMP manual 🙂 #CMIIW
Haha, saya cuma pakai satu VPS yang ada EEnya mas. Maksud saya yang instalasi manual stack LEMPnya.
Tapi kalau buat test drive tukar 5.6 ke 7.0 kayanya lebih mudah dan cepat pakai EE ini ya.
bisa dipake buat di centos 7 nggak ini yah gan, maklum newbie…?
Saya belum coba mas. Hehe. 😀
Nanti saya cek biar jelas bisa tidaknya.
versi stabil 🙂
http://rpms.remirepo.net/enterprise/7/php71/x86_64/repoview/php-pecl-memcached.html
Wah pengamat memcached nih. 😀 Sudah dicoba mbak?