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.

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.

17 Comments

    1. 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.

      1. Jadi, dipakai berbarengan bisa gak mas? atau harus salah satu? Kalau salah satu, baiknya yang mana? hehe thnks

      2. Bisa mas, lain kok fungsinya. Kalau salah satu sih lebih baik Memcached dulu. Varnish ini… walau kelihatannya gampang tapi bisa repot di detailnya.

  1. 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.

    1. Loh mbak Shafira akhirnya muncul juga. πŸ™‚

      Nah… saya malah baru tahu kalau firewallnya ganti. Ternyata dari iptables ke firewalld? 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 format sysvinit. Misal ya mbak, anda menjalankan proses MySQL dengan format CentOS 6:

      service mysql start

      Maka dalam CentOS 7 akan muncul pesan berikut:

      Redirecting to /bin/systemctl start mysqld.service

      Oh ya mbak, pernah coba Varnish? Saya sedang coba – coba sekarang.

      1. 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?

      2. 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:

        chkconfig httpd on

        Juga akan dialihkan otomatis:

        Note: Forwarding request to 'systemctl enable httpd.service'.
        Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
  2. 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 πŸ™‚

    1. 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.

      1. 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 πŸ™‚

      2. 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. πŸ™‚

  3. 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?

  4. 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 , berjalan

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections 1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }

    Saya cek Port iptablesnya juga udah public.

    Saya bingung. Mohon bantuannya mas Chandra. Terima kasih sebelumnya.

    1. Mas coba cek log error Nginxnya apa ada isinya. Juga PHP-FPM. Seharusnya secara default ya muncul halaman Nginx.

  5. Siang mas chandra,
    bagaimana kabarnya? semoga sehat2 selalu.
    berhubung centos 8 sudah rilis, mohon dibuatkan tutorial LEMP untuk Centos 8, mas.

    Terima Kasih.

Tinggalkan Balasan ke Chandra Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *