Cara Install LEMP di CentOS 6, Step-by-step

Nginx webserver, Setelah saya pikir-pikir, ternyata menginstall dan konfigurasi Nginx di linux CentOS 6 tak begitu rumit jika dibanding Apache. Jika agan pengen membangun website dengan nginx webserver kira-kira step-by-step cara install LEMP (Linux, Nginx, MySQL, PHP) seperti daftar konten berikut ini:

1. Add Repository EPEL

Pertama tambahkan repo dari epel. Berikut cara untuk menambahkan epel repository, disesuaikan dengan versi Linux CentOS yang digunakan:

RHEL/CentOS 6 32-Bit

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Untuk RHEL/CentOS 6 64-Bit

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

2. Remove HTTPD

Stop dan Remove dulu htppd bawaan OS, biar nggak konflik. caranya dengan command berikut:

service httpd stop
yum remove httpd

3. Install Nginx

yum install nginx -y

Start Nginx service

service nginx start

Buka browser coba buka IP VPS, hasilnya kira-kira seperti ini:

cara install nginx di centos

Otomatis start nginx ketika sistem direboot dengan command berikut.

chkconfig --levels 235 nginx on

4. Install MySQL

Install MySQL dengan kode berikut:

yum -y install mysql mysql-server

Buat agar MySQL Service otomatis berjalan ketika system reboot:

chkconfig --levels 235 mysqld on

Start MySQL dengan command line berikut

/etc/init.d/mysqld start

Setup security MySQL, ketik kode berikut dan ikuti langkah demi langkah.

mysql_secure_installation

Ketika diminta untuk memasukkan password pertama kali abaikan saja, langsung tekan Enter.

Kemudian Jika ada pertanyaan membuat password pilih Y kemudian enter dan ketik password yang anda inginkan. Pertanyaan selanjutnya jawab dengan Y kemudian Enter sampai instalasi selesai / berhasil:

5. Install PHP

Kode berikut akan otomatis menginstall php-fpm dan php-mysql

yum -y install php-fpm php-mysql

Kemudian PHP Module, Module berikut ini yang biasa saya install karena kadang-kadang saya butuh ngegrab website menggunakan CURL, seperti layanan API Flickr photo, Youtube API dan ngegrab website lain yang mengharuskan menggunakan module PHP SOAP. Module-module PHP ini termasuk module yang sering diinstall oleh banyak web developer. Namun jika anda tidak membutuhkannya bisa melewati langkah ini:

yum -y install php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel

Install APC untuk chacing dan mengoptimalkan kinerja script php. Lebih jauh tentang PHP PECL APC Baca di situs resmi.

yum -y install php-pecl-apc

Load PHP-FPM saat sistem reboot.

chkconfig php-fpm --levels 235 on

Edit konfig php.ini

vi /etc/php.ini

Cari line berikut, hilangkan tanda komen # dan ubah valuenya seperti berikut:

cgi.fix_pathinfo = 0
date.timezone = Asia/Jakarta
expose_php = Off

6. Konfigurasi

Untuk artikel ini fokus pada cara setup nginx untuk satu website saja, jika sudah menguasai ini maka untuk setting Server Block atau Virtual Host di Nginx akan mudah. Nah file-file untuk konfigurasi Nginx adalah sebagai berikut:

1. /etc/nginx/nginx.conf
2. /etc/nginx/conf.d/default.conf
3. /etc/php-fpm.d/www.conf

Konfigurasi Pertama, Backup nginx.conf taruh di folder root, dengan menjalankan command line berikut maka konfig nginx akan pindah difolder root dengan nama: nginx.conf.bak.

mv /etc/nginx/nginx.conf /root/nginx.conf.bak

Kemudian buat config nginx yang baru

vi /etc/nginx/nginx.conf

Copy-paste kode berikut:

# 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  4;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    #keepalive_timeout  0;
    keepalive_timeout  30;

    # Untuk perfoma nginx terbaik
    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}

Konfigurasi Kedua, hapus saja semua text yang ada didalam file konfig default nginx /etc/nginx/conf.d/default.conf, ini tidak lagi penting karena kita akan membuat konfigurasi sendiri. Berikut cara menghapus text didalam file konfig default.nginx

echo > /etc/nginx/conf.d/default.conf

Setelah bersih buka dan edit file default.conf:

vi /etc/nginx/conf.d/default.conf

Paste kode berikut: *) konfig ini bagi yang ingin membangun website dengan aplikasi WordPress, pokoknya ini konfig JOS, dan siap pakai gan. Ingat ganti domain coklat.org dengan domain punya agan.

server {
        listen 80;
        server_name www.coklat.org;
        rewrite ^(.*) http://coklat.org$1 permanent;
}

server {
        listen 80;
        server_name coklat.org;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/coklat.org-access;
        error_log /var/log/nginx/coklat.org-error error;
        
        ### Ini direktori letak file-file webiste nantinya
        root /var/www/html/coklat/;
        index  index.html index.php;

        ### root directory ###
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        location ~* wp-admin/includes { deny all; }
        location ~* wp-includes/theme-compat/ { deny all; }
        location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
        location /wp-includes/ { internal; }
        location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php)$ {
                types { }
                default_type text/plain;
        }

        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9001;
                fastcgi_pass unix:/var/run/php-webku.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                #Prevent version info leakage
                fastcgi_hide_header X-Powered-By;
        }
}

Nah kalau tidak memakai WordPress dan memutuskan untuk membuat srcript sendiri berikut konfignya lengkap beserta contoh mod_rewrite atau jika di Apache dikenal dengan .htaccess untuk membuat link yang SEF – Search Engine Friendly.

server {
        listen 80;
        server_name www.coklat.org;
        rewrite ^(.*) http://coklat.org$1 permanent;
}

server {
        listen 80;
        server_name coklat.org;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/coklat.org-access;
        error_log /var/log/nginx/coklat.org-error error;

        root /var/www/html/coklat/;
        index  index.html index.php;

        ### root directory ###
        location / {
                try_files $uri $uri/ /index.php?$args;
                
                # ini hanya contoh sesuaikan dengan link agan.
                # Home
                rewrite ^/page-([0-9]+)/?$ /index.php?page=$1 last;
                ## artikel
                rewrite ^/artikel/([^/]*)/?$ /artikel.php?q=$1 last;
                rewrite ^/artikel/([^/]*)/page-([0-9]+)/$ /artikel.php?q=$1&page=$2 last;
        }

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        
        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9001;
                fastcgi_pass unix:/var/run/php-webku.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                #Prevent version info leakage
                fastcgi_hide_header X-Powered-By;
        }
}

Konfigurasi ketiga, www.conf. Clear text yang ada di file /etc/php-fpm.d/www.conf.

echo > /etc/php-fpm.d/www.conf

Kemudian buka dan edit file /etc/php-fpm.d/www.conf

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

Paste Kode berikut:

[webku]
listen = /var/run/php-webku.socket
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/webku.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_admin_value[error_log] = /var/log/php-fpm/webku-error.log
php_admin_flag[log_errors] = on

Simpan dan keluar dari VIM editor Ctrl+C > :wq > Enter

7. Test

Seperti biasa gan, restart dulu service Nginx, MySQL dan PHP-FPM biar ketahuan kalau ada yang nggak beres jika mesin reboot.

service nginx restart
service mysqld restart
service php-fpm restart

Jika resultnya udah OK selanjutnya check website sekalian php dan modulnya dengan kode berikut: *) pada kasus ini letak root direktori di: /var/www/html/coklat/, sesuaikan dengan punya agan.

vi /var/www/html/coklat/info.php

Isi dengan kode berikut:

<?php phpinfo();

Simpan dan keluar dari Vim editor Ctrl+C kemudian ketik :wq selanjutnya Enter.

Buka browser kesayangan agan point ke IP VPS punya agan. http://ip.vps.agan/info.php

8. Tips

Jika agan kembali ingin mengedit file konfigurasi dan tidak ingin mematikan service nginx dan php-fpm yang sedang berjalan, cukup menggunakan command reload, ini bagus karena web kita tidak akan down sesaat jika dibanding menggunakan command restart. Contoh penggunaan:

service nginx reload
service php-fpm reload

Catatan

Setelah berhasil menginstall Nginx dan setup konfigurasi Nginx sebagai webserver untuk menjalankan blog atau website, langkah selanjutnya adalah bagaimana cara tuning webserver Nginx, agar performa website semakin kencang dan stabil. Tutorial mengoptimalkan konfigurasi Nginx mungkin akan saya ketik lain waktu. Terimakasih telah berkunjung, jangan lupa share ya.

Referensi: RoseHosting – WordPress+W3TotalCache With LEMP.

One thought on “Cara Install LEMP di CentOS 6, Step-by-step

Leave a Reply

Your email address will not be published. Required fields are marked *