Install LEMP (Nginx, MariaDB and PHP-FPM) Untuk Multi Website di Ubuntu 14.04

Install LEMP (Nginx, MariaDB and PHP-FPM) Untuk Multi Website di Ubuntu 14.04

lemp_stack.jpg

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

2015-06-07_190625.jpg

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

2015-06-07_191205.jpg

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

2015-06-07_193153.jpg

Coba untuk domain kedua sitedua.com, harusnya yang tampil seperti dibawah.

2015-06-07_193312.jpg

Tampilan versi php info

2015-06-07_193855.jpg

Anda dapat menambahkan blok server untuk domain-domain yang lain tanpa ada limitasi, selama hardware dari server anda mampu untuk menghandel trafiknya.

3

4 Responses

  1. M. Opik
    04/09/2015
    • andykamto
      04/09/2015
  2. Sadam Abdullah
    22/04/2016
    • andykamto
      23/04/2016

Kirim Komentar