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.
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.
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
/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!
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.
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…
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
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!
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.
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!
… Success!
Normally, root should only be allowed to connect from ’localhost’. This
ensures that someone cannot guess at the root password from the network.
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] # Tekan tombol ENTER
… Success!
… 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.
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!
- 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.
will take effect immediately.
Reload privilege tables now? [Y/n] # Tekan tombol ENTER
… Success!
… Success!
Cleaning up…
All done! If you’ve completed all of the above steps, your MySQL
installation should now be secure.
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
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;
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”‘;
‘$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_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
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.
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;
}
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;
}
#
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;
#}
#
#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;
}
#
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;
}
}
# 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