LEMP merupakan kepanjangan dari Linux, NginX (dibaca enginx), MariaDB, PHP-FPM. Projek web server Nginx memang dibangun dengan tujuan untuk dapat menghandel kinerja load server yang tinggi tapi dengan penggunaan memori yang rendah, jadi Nginx ini merupakan alternatif terbaik untuk menggantikan Apache apabila anda ingin membangun sebuah web server di host yang yang hanya memiliki alokasi memori yang kecil. Sedangkan MariaDB merupakan RDBMS alternatif sebagai pengganti dari MySQL, MariaDB sekarang mulai populer karena telah didukung dan di support penuh oleh komunitas. Jadi untuk saat ini jika anda butuh sebuah web server yang stabil dan cepat anda dapat mengimplementasikan LEMP Stack ini.
Berikut ini adalah instalasi dan konfigurasi LEMP Stack untuk multi website yang sudah saya terapkan di Ubuntu 14.04 x64.
Install Nginx
Jika sudah memiliki Apache sebelumnya, anda dapat menghapusnya dahulu untuk menghindari koflik, jalankan perintah berikut
sudo apt-get purge apache2*
sudo apt-get autoremove -y
Untuk menginstall Nginx anda dapat langsung menginstallnya via repository ubuntu, tapi saya biasanya menambahkan PPA update versi stablenya langsung
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx
Nginx akan start otomatis setelah proses install selesai, untuk memastikannya anda bisa buka IP vps anda, dan pastikan melihat halaman “Welcome to nginx on Debian”
Kemudian edit konfigurasi Nginx, sebelumnya cek worker_processes pada CPU VPS anda, jalankan perintah lscpu atau bisa jalankan perintah berikut
grep –count processor /proc/cpuinfo
pada cpu saya disitu terlihat 1 cpu, kemudian edit config Nginx
sudo nano /etc/nginx/nginx.conf
cari pada baris worker_processes, ganti menjadi
worker_processes 1;
save dan keluar dari editor, test konfigurasi dan restart Nginx
sudo nginx -t
sudo service nginx restart
Install MariaDB
Jika sebelumnya sudah ada MySQL, anda dapat menghapusnya dengan perintah berikut
sudo apt-get remove mysql*
sudo apt-get autoremove -y
Install versi stable dari MariaDB, jalankan peritah berikut
sudo apt-get install software-properties-common
sudo apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository ‘deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main’
sudo apt-get update
sudo apt-get install mariadb-server
Pada saat proses install berlangsung, kita akan disuruh memasukkan root password untuk database.
Setelah selesai proses instalasi, anda dapat mengetestnya, connect ke database MariaDB, jalankan perintah berikut cek version dan konek ke db
sudo mysql -v -u root -p
ketik exit untuk keluar dari konsol database.
Untuk mengamankan default install dari MariaDB, kita dapat menjalankan perintah berikut
sudo mysql_secure_installation
Nanti akan muncul beberapa pertanyaan, anda bisa jawab semua dengan “y”,
Sebagia tambahan anda juga bisa men tweak sedikit Database MariaDB dengan menginstall MySQLTuner, jalankan perintah berikut
sudo apt-get install mysqltuner
sebagai informasi konfigurasi file MariaDB ada pada direktori file /etc/mysql/my.cnf , idealnya anda dapat menjalankan perintah dibawah ini setelah minimal database MariaDB berjalan kurang lebih 24 jam,
sudo mysqltuner
Lalu anda akan mendapat beberapa rekomendasi output, dimana beberapa variabel dapat anda edit dan sesuaikan pada pengaturan config di /etc/mysql/my.cnf , jangan lupa restart MariaDB setelah anda mengedit berkas confignya.
sudo service mysql restart
Install PHP-FPM
Untuk menginstall php-fpm jalankan perintah berikut
sudo apt-get install php5-fpm
Install juga beberapa modul php pendukung
sudo apt-get install php5-cli php5-mysqlnd php5-mcrypt php5-gd
sudo php5enmod mcrypt
Setelah proses selesai, anda dapat mengecek versi php
sudo php -v
Konfigurasi file utama php-fpm ada pada direktori /etc/php5/fpm/php-fpm.conf , sedangkan konfigurasi file php.ini ada pada direktori /etc/php5/fpm/ , kita akan melakukan beberapa perubahan pada konfigurasinya, jalankan perintah berikut ini
Backup terlebih dahulu file php.ini
sudo cp /etc/php5/fpm/php.ini{,.backup}
Pada php.ini uncomment dan rubah nilai cgi.fix_pathinfo dari 1 ke 0, rubah max upload file dari 2MB ke 64MB, dan set PHP date.timezone sesuai denga timezone kita, anda dapat jalankan perintah dibawah
sudo sed -i “s/^;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/” /etc/php5/fpm/php.ini
sudo sed -i “s/^upload_max_filesize = .*/upload_max_filesize = 64M/” /etc/php5/fpm/php.ini
sudo sed -i “s/^;date.timezone.*/date.timezone = Asia\/Jakarta/” /etc/php5/fpm/php.ini
sudo service php5-fpm restart
Konfigurasi berikutnya edit pool konfigurasi www.conf yang berada pada direktori /etc/php5/fpm/pool.d/ ,
Backup dulu file config nya
sudo cp /etc/php5/fpm/pool.d/www.conf{,.backup}
Edit file config
sudo nano /etc/php5/fpm/pool.d/www.conf
sesuaikan pengaturan seperti konfigurasi dibawah
[www] user = www-data group = www-data listen = /var/run/php5-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 10s; pm.max_requests = 200 chdir = /
Save dan keluar dari editor, kemudian restart php-fpm
sudo service php5-fpm restart
Buat Document Root Direktori Website
Secara default konfigurasi bawaan root direktori Nginx adalah di /usr/share/nginx/html , kita dapat merubahnya dengan membuat file kofigurasi baru nantinya, pada contoh ini saya akan tempatkan root direktori pada direktori home pada masing-masing user yang terdaftar, asumsikan anda sudah membuat user di linux sebelumnya, jika belum silahkan gunakan perintah adduser untuk buat user baru, sebagai contoh saya akan buat 2 direktori untuk 2 website, yaitu sitesatu.com dan sitedua.com,
sudo mkdir -p /home/user1/sitesatu.com/public_html
sudo mkdir -p /home/user2/sitedua.com/public_html
Set user ownership untuk masing-masing direktori
sudo chown -R $USER:$USER /home/user1/sitesatu.com/public_html
sudo chown -R $USER:$USER /home/user2/sitedua.com/public_html
Anda bisa mengganti variabel $USER dengan nama user yang bersangkutan,
Rubah hak akses permission direktori, jalankan perintah berikut
sudo chmod -R 755 /home/user1/sitesatu.com
sudo chmod -R 755 /home/user2/sitedua.com
Selanjutnya kita buat halaman test index.html untuk masing-masing direktori, untuk domain pertama
sudo nano /home/user1/sitesatu.com/public_html/index.html
Isikan file simpel html berikut
<html> <head> <title>Selamat Datang di Sitesatu.com!</title> </head> <body> <h1>Suksess! sitesatu.com server block telah running!</h1> </body> </html>
Untuk domain kedua lakukan langkah yang sama
sudo nano /home/user2/sitedua.com/public_html/index.html
isikan html sebagai berikut
<html> <head> <title>Selamat Datang di Sitedua.com!</title> </head> <body> <h1>Suksess! sitedua.com server block telah running!</h1> </body> </html>
Save dan keluar dari editor.
Buat Server Block File Untuk Setiap Website
Tambahkan server block baru di Nginx untuk setiap domain yang kita buat
Buat server block file untuk domain pertama sitesatu.com
sudo nano /etc/nginx/sites-available/sitesatu.com.conf
Masukkan parameter konfigurasi persis seperti dibawah ini
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /home/user1/sitesatu.com/public_html; index index.html index.htm index.php; server_name sitesatu.com www.sitesatu.com; charset utf-8; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } }
Simpan (Ctrl+X) dan keluar dari editor, kemudian untuk domain kedua, lakukan langkah yang sama
sudo nano /etc/nginx/sites-available/sitedua.com.conf
Masukkan parameter konfigurasi persis seperti dibawah ini, pastikan hilangkan default server pada listen,
server { listen 80; listen [::]:80; root /home/user2/sitedua.com/public_html; index index.html index.htm index.php; server_name sitedua.com www.sitedua.com; charset utf-8; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } }
Simpan (Ctrl+X) dan keluar dari editor.
Kemudian aktifkan server blok file nginx, dengan membuat symbolik link, jalankan perintah berikut
sudo ln -s /etc/nginx/sites-available/sitesatu.com.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/sitedua.com.conf /etc/nginx/sites-enabled/
Kita harus menonaktifkan/disable server blok default Nginx dengan perintah berikut
sudo rm /etc/nginx/sites-enabled/default
Sesuaikan sedikit pengaturan pada file konfigurasi Nginx, jalankan perintah dibawah
sudo nano /etc/nginx/nginx.conf
Cari pada baris #server_names_hash_bucket_size 64; , hilangkan tanda pagar pada bagian itu, save dan keluar dari editor.
Terakhir test konfigurasi yang telah anda rubah tersebut dengan
sudo nginx -t
Pastikan tidak ada error, kemudian restart service Nginx,
sudo service nginx restart
Test Hasilnya
Diasumsikan anda sebelumnya sudah pointing nama domain anda ke name server ataupun juga bisa pointing domain anda ke IP VPS dengan membuat A record di CP domain anda.
Buka alamat domain pertama di sitesatu.com di browser, anda harusnya melihat seperti dibawah
Coba untuk domain kedua sitedua.com, harusnya yang tampil seperti dibawah.
Tampilan versi php info
Anda dapat menambahkan blok server untuk domain-domain yang lain tanpa ada limitasi, selama hardware dari server anda mampu untuk menghandel trafiknya.
M. Opik
04/09/2015Mas tanya dong kalau buat ngurangi cpu proccess php-fpm gimana yah soalnya suka tinggi mulu
andykamto
04/09/2015Halo mas Opik, yang bikin high cpu di proses apa mas, coba diutak-atik bagian config pool.d, terutama bagian pm.max_children, trus kalo pake wp coba cek plugin2nya, sama gunakan w3totalcache supaya agak ringan,
Sadam Abdullah
22/04/2016mas untuk instal wordpressnya gimana caranya. multi wordpres/lbih dri 1 wordpress site.??
andykamto
23/04/2016hampir sama mas, yang penting tiap buat site baru wajib buat root direktori website dan buat conf serverblok nginx dan symbolik link, (ini untuk wordpress biasa ya, bukan wordpress mutisite network yang butuh wildcard domain)