Membangun Server Linux, Nginx, MySQL, PHP (LEMP)

Pada kesempatan ini saya akan membagikan pengalaman serta cara membangun server website menggunakan Linux, Nginx, MySQL, PHP (LEMP) Untuk aplikasi webservernya kita akan menggunakan Nginx ( dibaca engine x ), bukan apache. Nginx sendiri adalah sebuah aplikasi untuk web server yang open source, serta memiliki kehandalan dan beberapa kelebihan dibandingkan aplikasi web server lain seperti apache. Salah satu yang paling saya suka dari nginx adalah performanya yang tinggi serta hemat resource. Oleh sebab itu, banyak website besar dengan trafik tinggi memilih nginx sebagai mesinnya, salah satu contohnya adalah wordpress. Nginx sendiri dapat dipadukan dengan apache sebagai reverse proxy ataupun loadbalancer, oleh karena itu penyedia CDN rata – rata menggunakan nginx sebagai webserver mereka.
Untuk saat ini, seiring dengan kemajuan teknologi dan perkembangan zaman, teknologi bukanlah sebuah barang mewah lagi. Contohnya untuk server, dengan biaya hanya 1 jutaan sebulan, kita sudah bisa menggunakan server pribadi hanya untuk kita sendiri. Jika kebutuhan sobat hanya untuk sekedar hobi atau pribadi saja, tentu fasilitas server pribadi mubadzir, oleh karena itu sobat dapat menggunakan website hosting yang banyak disewakan oleh host provider, atau shared hosting. Sobat tidak akan merasakan dampak yang berarti jika trafik sobat rendah, tetapi jika website atau blog sobat memiliki trafik harian yang padat, siap -siap saja untuk merasakan dongkol karena kecepatan akses yang lelet apalagi jika hosting provider melakukan overselling tanpa memperhitungkan kapasitas server, siap – siap saja untuk merasakan rutinitas request time out dan downtime rutin :)
Solusi terbaik yang dapat sobat ambil adalah menyewa sebuah VPS ( virtual private server ) atau VDS ( virtual dedicated server ) unmanaged atau server virtual kosong. Harga VPS jenis ini jauh lebih murah, karena yang mengatur serta menjadi adminnya adalah sobat sendiri, penyedia hanya mengurus masalah hardware dan jaringan. Untuk saya sendiri, saya menyukai server jenis ini, yang pertama jelas karena harganya yang bersahabat, serta kita dapat belajar darisana. Biasanya jika menyewa sebuah VPS/VDS, sobat akan diberikan sebuah akun dengan akses root atau admin beserta OS yang telah terinstall. Server ini belum bisa digunakan sebagai webserver, karena aplikasi untuk website server belum terinstall di dalamnya. Untuk membangun sebuah webserver, aplikasi standar yang sobat butuhkan antara lain adalah Apache dan Nginx sebagai webserver, MySQL untuk mengurus database, serta PHP untuk menghandle halaman serta script website sobat. Dengan menginstal aplikasi tersebut, server sobat sudah bisa digunakan untuk membuka halaman website.
Sesuai dengan apa yang telah saya sampaikan sebelumnya, kali ini saya akan membagikan pengalaman serta cara membangun ataupun install webserver pada Linux menggunakan aplikasi Nginx, MySQL, dan PHP atau istilahnya LEMP ( Linux Enginex MySQL PHP ). Pada tutorial ini saya tidak menggunakan aplikasi server apache, karena saya ingin membangun webserver hemat resource dengan performa tinggi. Sebelum memulai proses penginstallan, sebaiknya aplikasi apache terlebih dahulu di remove atau di nonaktifkan agar tidak bentrok dengan aplikasi Nginx. Karena, biasanya aplikasi Apache webserver telah terinstall pada OS VPS. Pada tutorial ini saya menggunakan VPS dengan OS Centos, jika sobat menggunakan OS yang berbeda, sobat dapat menyesuaikannya.

Cara Menginstall Nginx Webserver.

Pertama – tama, login ke VPS sobat dan gunakan akses root. Sobat dapat menggunakan aplikasi Putty atau Bitvise untuk login ke dalam akun vps sobat. Jika VPS sobat masih baru dinstall, alangkah baiknya sobat melakukan update OS. Bagi pengguna VPS dengan OS Centos, sobat tinggal mengetikkan perintah yum update -y dan VPS sobat akan terupdate. Untuk menginstall aplikasi Nginx ini cukup mudah, ada 2 cara yang dapat digunakan:
Cara pertama, install Nginx melalui repo Epel :
Pada terminal, dengan akses root ketikkan perintah dibawah ini :
rpm –import http://fedoraproject.org/static/0608B895.txt
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  ( jika sobat menggunakan OS Centos Versi 6 keatas )
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm   ( jika sobat menggunakan OS Centos Versi 5 )
Perintah diatas hanya berlaku untuk VPS dengan OS Centos, pilih .rpm yang sesuai dengan versi OS sobat, gunakan salah satu saja. Setelah itu sobat dapat juga menginstall repo Remi dengan perintah dibawah ini.
rpm –import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm   ( jika sobat menggunakan OS Centos Versi 6 keatas )
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm  ( jika sobat menggunakan OS Centos Versi 5 )
Sesuaikan repo yang diinstall dengan versi OS sobat, pilih dan gunakan salah satunya.
Setelah repo terinstall, sobat tinggal menginstall nginx dengan perintah yum install nginx -y, sobat dapat melihat aplikasi yang terinstall pada terminal linux sobat. Tunggu hingga semua proses Complete atau selesai.
Cara kedua, install Nginx melalui repo nginx :
Pada cara ini, sobat menginstall nginx melalui official repo nginx. Sobat dapat memilih versi nginx yang akan diinstall pada halaman nginx.org/packages. Terdapat dua versi aplikasi nginx, yaitu mainline dan stable. Mainline version adalah versi terakhir dan terbaru nginx, sedangkan stable version adalah versi nginx yang telah teruji kestabilannya. Untuk menginstall repo nginx ini, sobat dapat mengikuti langkah – langkah dibawah ini.
Pada terminal ketikkan perintah vi /etc/yum.repos.d/nginx.repo
Lalu akan terbuka aplikasi vi, edit file baru tersebut dengan menggunakan tombol C, lalu pilih salah satu baris perintah dibawah ini, sobat dapat mengetikkannya atau copy paste dari halaman ini.
Untuk menginstall nginx mainline version pada os centos versi 5.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/5/$basearch/
gpgcheck=0
enabled=1
Untuk menginstall nginx mainline version pada os centos versi 6.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
gpgcheck=0
enabled=1
Untuk menginstall nginx sable version pada os centos versi 5.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/5/$basearch/
gpgcheck=0
enabled=1
Untuk menginstall nginx sable version pada os centos versi 6.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
Sobat dapat memilih salah satunya, sesuaikan versi yang sobat install dengan versi OS sobat. Saya sarankan menggunakan Nginx Stable version, karena telah teruji kestabilannya. Setelah selesai, sobat tinggal menyimpan repo sobat tersebut, pencet tombol esc, lalu ketikkan :wq.
Setelah itu sobat dapat langsung menginstall aplikasi Nginx dengan command yum install nginx atau yum install nginx -y, lalu tunggu hingga proses instalasi selesai.
Install Nginx
Sekarang VPS sobat telah dilengkapi dengan aplikasi webserver Nginx. Aplikasi ini sudah terinstall, tapi belum berjalan pada system sobat. Untuk menjalankannya, sobat dapat mengetikkan baris perintah ini pada terminal :
chkconfig –level 345 nginx on #Untuk menjalankan aplikasi secara otomatis pada saat boot.
Lalu ketikkan,
service nginx start  #Untuk menjalankan aplikasi Nginx
Jika tidak ada kesalahan, aplikasi nginx akan langsung berjalan pada sistem VPS sobat. Untuk mengeceknya, sobat dapat mengetikkan alamat ip vps sobat pada browser. Sobat akan melihat halaman “selamat datang” pada alamat ip sobat tersebut jika semuanya telah berjalan dengan benar.
Tampilan default Nginx

Cara menginstall aplikasi PHP ( php-fpm ) :

Sebelumnya sobat telah menginstall aplikasi nginx sebagai webserver pada VPS sobat. Jika sobat hanya menggunakan webserver tersebut untuk membuka halaman website berekstensi .html sebenarnya tidak akan ada masalah. Hanya saja, server tersebut tidak akan dapat digunakan untuk halaman website dengan pemrograman PHP, karena belum ada aplikasi untuk menghandle format PHP. Solusinya dapat dengan menginstall aplikasi php-fpm, yang berfungsi sebagai handler untuk program PHP. Aplikasi php-fpm ini tidak tersedia pada repo standar centos. Untuk menginstallnya, sobat terlebih dahulu harus menggunakan repo Remi. Repo Remi ini berkaitan atau membutuhkan repo Epel, jadi sobat harus menginstall kedua repo ini agar dapat menginstall php-fpm. Jika sebelumnya sobat menginstall nginx melalui repo Epel, sobat dapat langsung memulai proses instalasi aplikasi php-fpm ini. Tetapi, jika sobat sebelumnya menggunakan repo nginx, maka sobat dapat menginstall kedua repo ini. Caranya dapat sobat lihat pada langkah instalasi Nginx diatas.
Jika repo yang dibutuhkan telah terinstall, sobat dapat langsung memulai proses instalasi dengan perintah :
yum install php-fpm -y
Untuk menginstall php-fpm berikut aplikasi pendukung php lainnya :
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-pecl-apc
Lalu jalankan dengan perintah,
chkconfig –level 345 php-fpm on
/etc/init.d/php-fpm start
Jika tidak ada kesalahan, maka aplikasi akan berjalan pada system VPS sobat. Dan, sekarang vps sobat telah dilengkapi dengan php-fpm untuk menghandle aplikasi PHP.

Cara menginstall aplikasi mysql :

Setelah sebelumnya VPS sobat telah terinstall aplikasi webserver nginx dan php-fpm, sobat juga membutuhkan aplikasi untuk menangani database website sobat. Sobat dapat langsung menginstall aplikasi mysql dengan perintah :
yum install mysql mysql-server
Lalu jalankan server mysql sobat dengan perintah :
chkconfig –level 345 mysqld on
service mysqld start
Dan aplikasi mysql sobat telah terinstall dan berjalan pada system sobat. Server mysql sobat ini belumlah sempurna dan rentan akan masalah keamanan, karena siapa saja dapat mengaksesnya. Sebelum digunakan, set password root dan setting keamanan untuk server mysql sobat ini dengan perintah :
mysql_secure_installation
Setelah perintah tersebut diketikkan, tekan tombol ENTER, pada saat diminta membuat password root mysql, isikan dengan password yang akan sobat gunakan. Gunakan password root mysql yang berbeda dengan password root login VPS sobat. Untuk langkah lengkapnya dapat sobat lihat dibawah ini :
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we’ll need the current
password for the root user.  If you’ve just installed MySQL, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):    # Tekan tombol ENTER
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] # Tekan tombol ENTER
New password: # Isikan password yang akan digunakan untuk root mysql sobat
Re-enter new password: # Isikan password yang akan digunakan untuk root mysql sobat
Password updated successfully!
Reloading privilege tables..
 … Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] # Tekan tombol ENTER
 … Success!
Normally, root should only be allowed to connect from ’localhost’.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] # Tekan tombol ENTER
 … Success!
By default, MySQL comes with a database named ’test’ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] # Tekan tombol ENTER
 - Dropping test database…
 … Success!
 - Removing privileges on test database…
 … Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] # Tekan tombol ENTER
 … Success!
Cleaning up…
All done!  If you’ve completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
Sekarang server mysql sobat sudah dapat digunakan.

Setup config Nginx agar berjalan menggunakan php-fpm

Aplikasi Nginx dan php-fpm telah terinstall, namun belum berjalan “berdampingan”. Untuk membuat kedua aplikasi ini berjalan sebagaimana mestinya, sobat tinggal melakukan sedikit perubahan pada konfigurasi aplikasi nginx sobat. Pertama, sobat dapat melihat file conf nginx sobat yang terletak di folder /etc/nginx/nginx.conf, atau buka menggunakan aplikasi vi dengan perintah vi /etc/nginx/nginx.conf, maka akan terlihat konfigurasi standar nginx sobat.
user nginx;
worker_processes 4;  # Sesuaikan nomor dengan jumlah core cpu vps sobat
error_log /var/log/nginx/error.log warn;
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 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Pada file konfigurasi diatas terlihat baris include /etc/nginx/conf.d/*.conf; dimana semua file dengan ekstensi .conf pada folder conf.d akan turut dibaca oleh aplikasi nginx. Pada folder conf.d ini sobat juga dapat menambah, mengurangi, atau melakukan perubahan domain atau vhost sobat. Saat ini pada folder tersebut baru tersedia 2 file konfigurasi dengan nama default.conf dan example_ssl.conf. Konfigurasi standar untuk alamat ip sobat berada pada file defaut.conf. Untuk menambahkan domain atau vhost baru, sobat tinggal membuat file konfigurasi baru, misalnya dengan nama domainsobat.conf, lalu isikan dengan baris – baris berikut ini :
server {
listen 80; #Port yang digunakan aplikasi nginx
server_name domainsobat.asia www.domainsobat.asia; # Isikan dengan nama domain sobat
#charset koi8-r;
access_log /home/user/domainsobat/domainsobat.access.log main;  # File log access domain sobat, sobat dapat memodifikasinya.
location / {
root /home/user/domainsobat/;  # Folder tempat file website sobat, sobat dapat memodifikasinya.
index index.html index.php index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; # Halaman error, sobat dapat memodifikasinya.
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {  # Semua file .php pada folder /home/user/domainsobat/ akan melewati aplikasi php-fpm yang berjalan pada port 9000
 root /home/user/domainsobat/;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
 include fastcgi_params;
}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {  # Jika sebelumnya pada folder website sobat terdapat file .htaccess, maka setingan .htaccess akan digantikan oleh setingan nginx
 deny all;
}
}
Setelah file domainsobat.conf selesai di edit, sobat tinggal menyimpannya. Setting DNS pada domain kontrol panel sobat agar domain sobat mengarah ke IP vps sobat, misalnya dengan mengisikan alamat A domain dengan IP VPS sobat. Lalu restart service nginx dengan perintah service nginx restart. Jika tidak ada kesalahan pada konfigurasi sobat maka akan terlihat tulisan [OK]. Tunggu hingga DNS pada domain sobat benar – benar telah mengarah ke alamat IP VPS sobat. Jika domain sobat telah menyatu dengan VPS sobat, sobat dapat membuat file dengan ekstensi .php pada folder website domain sobat, misalnya gado2.php, lalu isikan file gado2.php dengan <? phpinfo( ); ?>
Simpan file tersebut,lalu buka domainsobat.asia/gado2.php pada broser, jika semuanya telah berjalan dengan benar, maka sobat akan melihat detail webserver sobat. Untuk menambah domain, sobat tinggal membuat file konfigurasi .conf pada folder conf.d. Setelah melakukan perubahan pada file konfigurasi, jangan lupa restart aplikasi nginx sobat.
Sekarang sobat telah memiliki server website LEMP sendiri, sobat dapat merasakan perbedaan kecepatan aksesnya dan kebebasan dalam menggunaka resource.
Jika ada kendala yang bersangkutan dengan apa yang saya sampaikan pada halaman ini, sobat dapat mengungkapkannya pada form komentar dibawah, karena saya menyadari bahwa apa yang saya sampaikan belum sepenuhnya sempurna karena saya juga masih dalam proses belajar. Oleh karena itu kritik, saran maupun share tambahan dari sobat semua sangat saya harapkan.

No comments:

Post a Comment