Sebagai seorang programmer, terkadang tidak hanya dibebankan untuk membuat sebuah aplikasi agar dapat berfungsi sebagaimana mestinya. Akan tetapi, kerapkali dihadapkan dengan sebuah kondisi, dimana harus ikut andil dalam proses instalasi agar dapat digunakan oleh end user. Misalnya saja, dengan case membuat aplikasi berbasis website, khususnya menggunakan framework Laravel, kita diminta untuk melakukan konfigurasi ke dalam server agar dapat digunakan oleh client.
Maka pada kesempatan kali ini, pembahasan yang akan diangkat adalah bagaimana men-deploy Laravel menggunakan VPS, dalam hal ini yang akan digunakan adalah sistem operasi Ubuntu 16.04. Adapun point of content yang akan dibahas, diantaranya:
-
Konfigurasi Web Server
-
Konfigurasi DNS Server
-
Membuat Vhost
-
Install dan Konfigurasi SSL
Baca Juga: Serial Spring Boot: Crud Dengan Spring Data JPA
Konfigurasi Web Server
Konfigurasi web server adalah hal utama yang akan dilakukan agar Laravel dapat berjalan sesuai dengan kebutuhan yang harus dipenuhi. Adapun kebutuhan yang akan digunakan sebagai pelengkap dari web server ini, diantaranya:
-
Apache2
-
PHP 7.2
-
OpenSSL PHP Extension
-
PDO PHP Extension
-
Mbstring PHP Extension
-
Tokenizer PHP Extension
-
XML PHP Extension
-
MariaDB
-
Phpmyadmin
-
Composer & Git
Pertama, untuk meng-install Apache2, gunakan command:
# apt-get install apache2
Selanjutnya, untuk meng-install PHP, gunakan command:
# apt-get install python-software-properties
# add-apt-repository ppa:ondrej/php
# apt-get update
# apt-get install php7.2
Karena yang akan di-deploy adalah Laravel, maka sesuai requirements yang tercantum di official documentation, diwajibkan untuk meng-install module php, diantaranya: OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension.
# apt-get install php7.2-common php7.2-curl php7.2-mysql php7.2-gd php7.2-xml php7.2-xmlrpc php7.2-mbstring php7.2-cli php7.2-sqlite3 php7.2-zip
Apabila kamu ingin meng-install module lainnya, kamu dapat melihat list-nya dengan command:
# apt-cache search php7.2-
Setelah instalasi PHP selesai, langkah selanjutnya adalah meng-install mariaDB yang berfungsi untuk meng-handle database.
# apt-get install mariadb-server mariadb-client
# mysql_secure_installation
Kamu akan diminta untuk memasukkan password, jangan lupa untuk menge-set-nya sebagai password root database, selain itu pilih Y atau tekan enter saja. Apabila instalasi telah selesai, kamu dapat mengaksesnya dengan menggunakan command:
# mysql -u root -p
Kemudian install phpmyadmin untuk mempermudah dalam me-manage database karena telah disuguhkan berbentuk GUI.
# apt-get install phpmyadmin
Ikuti setiap step dalam proses instalasinya, pilih apache2 kemudian masukkan password yang akan digunakan untuk login kedalam phpmyadmin. Apabila telah selesai, kamu dapat mengaksesnya dengan url: http://ip_server/phpmyadmin
, kemudian masukkan user: phpmyadmin dan password: password yang anda masukkan saat instalasi.
Optional, kamu juga dapat membuat user baru untuk dapat mengakses phpmyadmin. Masukkan command berikut:
//login ke mysql
# mysql --user=root mysql
//create user
create user 'USERNAMEKAMU'@'localhost' IDENTIFIED BY 'PASSWORDKAMU';
grant all privileges on *.* to 'USERNAMEKAMU'@'localhost' with grant option;
flush privileges;
Alright, sampai pada tahap ini sebenarnya web server dengan requirements yang dibutuhkan Laravel sudah dapat digunakan sebagaimana mestinya. Namun, untuk mempermudah meng-handle package, perlu untuk meng-install composer dengan command:
# apt-get install composer
Dan tak ketinggalan untuk menginstall Git.
# apt-get install git
Sebagai penutup section ini, jangan lupa restart web server kamu dengan command:
service apache2 restart
Konfigurasi DNS Server
Saat ini telah banyak layanan yang dapat digunakan untuk me-manage dns. Jika kamu salah satu pengguna Digitalocean, maka telah disediakan fitur tersebut didalam panel untuk mengelola server mereka. Selain itu, Cloudflare juga menyediakan hal yang sama.
Oleh karena itu, pada section ini bisa dikategorikan sebagai section optional, sebab sifatnya tidaklah bersifat wajib. Namun bagi kamu yang ingin menambah pengetahuan bagaimana meng-install dan melakukan konfigurasi dns server sendiri, maka kamu dapat mengikuti section ini tahap demi tahap. Adapun hal-hal yang akan dilakukan diantaranya:
-
Install Bind
-
Membuat private nameserver
-
Konfigurasi Bind
Untuk meng-install bind yang akan berperan dalam meng-handle dns server, gunakan command:
# apt-get install bind9
Sebelum memasuki konfigurasi, buat private name server terlebih dahulu dari panel domain kamu. Whatever, panel domain apapun dan dari registrar manapun, cari menu child name server atau jika dari whmcs terdapat pada menu private nameserver, kemudian buat dua buah name server, dalam hal ini saya akan membuat dua buah name server yakni: ns1.anugrahsandi.com dan ns2.anugrahsandi.com. Seperti contoh berikut
Langkah selanjutnya adalah melakukan konfigurasi dns server, modifikasi file /etc/bind/named.conf.local
dengan command berikut:
nano /etc/bind/named.conf.local
Kemudian tambahkan config berikut:
zone "anugrahsandi.com" {
type master;
file "/etc/bind/zones/anugrahsandi.com.db";
};
zone "147.52.103.in-addr.arpa" {
type master;
file "/etc/bind/zones/rev.147.52.103.in-addr.arpa";
};
Catatan: Ganti anugrahsandi.com
dengan nama domain kamu. Kemudian untuk reverse dns 147.52.103.in-addr.arpa
, ganti dengan 3 deret ip server kamu yang ditulis terbalik (misal: 128.199.154.xx
, maka dapat ditulis menjadi 154.199.128.in-addr.arpa
).
Seperti yang tertera pada config diatas, dibutuhkan sebuah direktori bernama zones, yang didalamnya terdapat dua buah file anugrahsandi.com.db dan rev.147.52.103.in-addr.arpa.
# cd /etc/bind
# mkdir zones
# cd zones
# nano anugrahsandi.com.db
Kemudian masukkan config berikut kedalam file anugrahsandi.com.db
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.anugrahsandi.com. support.daengweb.id. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name server
@ IN NS ns1.anugrahsandi.com.
@ IN NS ns2.anugrahsandi.com.
@ IN A IPSERVERKAMU
;name server - A records
ns1.anugrahsandi.com. IN A IPSERVERKAMU
ns2.anugrahsandi.com. IN A IPSERVERKAMU
www IN CNAME anugrahsandi.com.
Catatan: Ganti ns1.anugrahsandi.com dan ns2.anugrahsandi.com menjadi ns1.namadomainkamu.com
dan ns2.namadomainkamu.com
. IPSERVERKAMU juga harus disesuaikan dengan IP Server yang akan kamu gunakan.
Buat file config selanjutnya yang bernama rev.147.52.103.in-addr.arpa
# nano rev.147.52.103.in-addr.arpa
Kemudian masukkan konfigurasi berikut:
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.anugrahsandi.com. support.daengweb.id. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
;name server
@ IN NS ns1.anugrahsandi.com.
@ IN NS ns2.anugrahsandi.com.
;ptr
60.156 IN PTR ns1.anugrahsandi.com.
60.156 IN PTR ns2.anugrahsandi.com.
60.156 IN PTR www.anugrahsandi.com.
Edit file /etc/resolv.conf
dengan command:
# nano /etc/resolv.conf
Lalu tambahkan baris berikut:
search anugrahsandi.com
Catatan: Ganti anugrahsandi.com
dengan nama domain kamu.
Jangan lupa untuk memperbaharui service bind9.
# service bind9 restart
Untuk mengecek apakah konfigurasi tersebut telah berjalan sesuai dengan yang di inginkan, maka dapat dilakukan dengan command:
# dig anugrahsandi.com
Cek juga name server yang telah dibuat:
# dig ns1.anugrahsandi.com
Membuat Vhost (Virtual Host)
Virtual host adalah salah satu fitur dari web server agar dapat meng-handle banyak domain didalam satu server yang hanya memiliki 1 ip publik. Untuk membuat virtual host, konfigurasinya berbeda untuk setiap web server. Pada artikel ini, kita menggunakan apache sebagai web server. So untuk membuat virtual hostnya, masuk ke direktori /etc/apache2/sites-available
:
# cd /etc/apache2/sites-available
# nano anugrahsandi.com.conf
Catatan: Ganti anugrahsandi.com dengan nama domain kamu.
Kemudian masukkan config berikut:
<VirtualHost *:80>
ServerName anugrahsandi.com
ServerAlias www.anugrahsandi.com
ServerAdmin [email protected]
DocumentRoot /var/www/anugrahsandi.com/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/anugrahsandi.com/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Penjelasan: Pada bagian DocumentRoot /var/www/anugrahsandi.com/public
dan <Directory /var/www/anugrahsandi.com/public>
, dimana anugrahsandi.com adalah root direktori untuk domain kamu, sedangkan public adalah direktori dari Laravel. Karena di Laravel , untuk dapat mengakses aplikasi yang telah dibuat wajib mengikut sertakan folder public didalam url. Jadi, agar main domain kamu langsung mengakses aplikasi tanpa embel-embel public dan juga tanpa perlu melakukan modifikasi .htaccess
, maka virtual host diarahkan langsung kedalam folder public.
Setelah itu, aktifkan virtual host yang telah dibuat dengan command:
# a2ensite anugrahsandi.com.conf
# service apache2 reload
Untuk melakukan uji coba mari kita install Laravel:
composer create-project --prefer-dist laravel/laravel anugrahsandi.com
NB: Saya menggunakan Laravel fresh install, atau jika kamu sudah punya project, kamu bisa langsung meng-upload-nya kedalam folder /var/www
dan jangan lupa rename root directory project kamu menjadi nama domain kamu.
Jangan lupa untuk mengatur permission di Laravel
# chown -R www-data:www-data /var/www/anugrahsandi.com
Install & Konfigurasi SSL
SSL (Secure Sockets Layer) merupakan protocol yang telah diwajibkan hampir disemua browser saat ini. Ada berbagai macam SSL yang ditawarkan baik yang bersifat free hingga yang berbayar sekalipun. Untuk melakukan instalasi SSL, tahap pertama generate CSR code dan KEY code terlebih dahulu dengan command:
# openssl req -newkey rsa:2048 -nodes -keyout anugrahsandi.com.key -out anugrahsandi.com.csr
Maka kamu akan disuguhkan beberapa pertanyaan, jawab seperti berikut:
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Sulawesi Selatan
Locality Name (eg, city) []:Makassar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Daengweb
Organizational Unit Name (eg, section) []:Programming
Common Name (e.g. server FQDN or YOUR name) []:anugrahsandi.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
NB: Untuk password biarkan dalam keadaan kosong. Common Name, pastikan kamu memasukkan nama domain kamu.
Pada penyedia SSL, kamu akan diminta untuk memasukkan CSR code sebagai persyaratan agar penyedia tersebut dapat memberikan CRT code yang kamu butuhkan untuk di-install di server kamu. Untuk mengambil CSR code nya dengan command:
# cat anugrahsandi.com.csr
Setelah itu masukkan CSR code nya kedalam panel SSL provider tempat kamu membeli SSL. Jika berkas SSL dari provider telah kamu dapatkan, maka tiba saatnya untuk melakukan konfigurasi SSL pada server kamu.
Upload berkas yang kamu peroleh ke root direktori server kamu, biasanya terdiri dari dua buah file, yakni:
-
namafile.crt
-
namafile.ca-bundle
Buat direktori ssl terlebih dahulu untuk menyimpan file config ssl tersebut:
# mkdir /etc/apache2/ssl
Kemudian pindahkan semua file config tersebut kedalam direktori /etc/apache2/ssl
, file tersebut terdiri dari: namafile.com.csr, namafile.com.key, namafile.crt, namafile.ca-bundle.
Buat virtual host baru yang berfungsi untuk meng-handle ssl yang diakses melalui port 443. Masuk ke direktori sites-available
# cd /etc/apache2/sites-available
# nano anugrahsandi.com-ssl.conf
Kemudian masukkan config berikut:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName anugrahsandi.com
ServerAlias www.anugrahsandi.com
DocumentRoot /var/www/anugrahsandi.com/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/anugrahsandi.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/anugrahsandi.com.key
SSLCACertificateFile /etc/apache2/ssl/anugrahsandi.com.ca-bundle
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
<Directory /var/www/anugrahsandi.com/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
Penjelasan: Penjelasan untuk konfigurasi diatas, hampir serupa dengan config sebelumnya. Namun yang perlu diperhatikan hanya pada bagian:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/anugrahsandi.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/anugrahsandi.com.key
SSLCACertificateFile /etc/apache2/ssl/anugrahsandi.com.ca-bundle
NB: Sesuaikan nama file config ssl yang kamu miliki.
Jangan lupa untuk mengaktifkan virtual host yang baru dengan command:
# a2ensite anugrahsandi.com-ssl.conf
# service apache2 reload
Modifikasi .htaccess
yang dimiliki Laravel agar secara otomatis melakukan force direct ke mode SSL, dengan memasukkan code berikut:
# cd /var/www/anugrahsandi.com/public
//Kemudian masukkan code berikut
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Sehingga code lengkap dari .htaccess
akan tampak seperti ini:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Jika tidak ingin memodifikasi .htaccess
, cara lainnya kamu dapat menambahkan code berikut pada default virtual host domain kamu yang mengakses port 80 (dalam hal ini, anugrahsandi.com.conf
):
Redirect permanent / https://anugrahsandi.com/
Baca Juga: Laravel Scout Indexing Menggunakan Algolia Driver
Kesimpulan
Dengan menggunaan VPS / Server sendiri, kita memiliki akses sepenuhnya dalam memodifikasi server sesuai dengan yang dibutuhkan. Dalam hal ini, apapun perkembangan dependecy yang dibutuhkan oleh Laravel, dapat di-install dengan sangat mudah tanpa harus melakukan request ke provider selayaknya jika menggunakan hosting.
Comments