Deployment - Manajemen-Cerdas-Informasi/materi-oprec-2022 GitHub Wiki
Dalam Digital Ocean, setiap resource dikelompokkan didalam projek. Oleh karena itu perlu dibuat sebuah projek untuk menyimpan resource yang digunakan untuk men-deploy aplikasi laravel.
Setelah projek berhasil dibuat, akan di redirect ke halaman utama projek. Langkah berikutnya adalah membuat vps menggunakan button create di navigasi atas. Pada Digital Ocean, vps memiliki nama droplets
.
Pada halaman create droplet, terdapat beberapa opsi yang dapat dipilih, pilih opsi sebagai berikut:
Image Distributions : Ubuntu 20 LTS
Plan : Shared CPU Basic
CPU options : Regular with SSD, $5 / month
Datacenter Region : Singapore
Pada bagian authentication, pilih autentikasi menggunakan password dan masukkan password yang akan digunakan untuk mengakses vps dengan root privilege.
Hostname dapat diubah untuk memberikan nama droplets.
Setelah berhasil membuat droplets, droplets akan muncul dibawah menu Resources
dan Droplets (1)
yang menandakan droplets telah berhasil dibuat. Jika nama droplets di tekan, akan muncul informasi mengenai droplets tersebut seperti IPv4 yang digunakan untuk ssh.
Virtual Private Server (vps) didapatkan dari penyedia layanan vps seperti aws, azure, digital ocean, dan beberapa penyedia layanan khusus vps dan shared hosting seperti niagahoster, domainesia, dan lain-lain. Harga dari vps bergantung pada spesifikasi vps yang dibuat, tentunya vps dengan spec yang lebih rendah akan lebih murah dibanding dengan vps spec tinggi.
Namun secara gratis, vps dapat didapatkan dari beberapa cara, antara lain:
- Melalui Github Student Pack dengan email ITS (mendapatkan 100$ credit di DigitalOcean)
- Melalui Azure Cloud Provider student subscription dengan email ITS
Sebelum vps dapat menjalankan aplikasi laravel, vps harus memiliki stack yang dibutuhkan untuk menjalankan aplikasi laravel, yaitu LEMP stack yang terdiri dari Linux, Nginx, MySQL, dan PHP.
Komponen terpenting sebuah vps untuk mendeploy aplikasi php tentunya adalah Web Sever. Dalam stack ini akan menggunakan web server Nginx.
NGINX adalah software web server open-source yang berfungsi sebagai reverse proxy, penyeimbang beban HTTP, dan proxy email untuk IMAP, POP3, dan SMTP. - ref
sudo apt-get update
sudo apt-get install nginx
Setelah instalasi selesai, untuk memperiksa apakah Nginx telah berhasil di install, dapat dibuka http://<ip vps>
MySQL dapat di install menggunakan
sudo apt-get install mysql-server
User dan password default MySQL adalah root:root
. Untuk memasuki MySQL console dapat menggunakan
mysql -u root -proot
Karena Nginx tidak memiliki native PHP seperti web server lain (XAMPP apache), kita butuh menginstall php-fpm
. Kita juga perlu menginstall module tambahan yang memungkinkan php untuk berkomunikasi dengan database pada backend aplikasi.
sudo apt-get install php-fpm php-mysql
Jika membutuhkan PHP versi 8 maka install
php8.0-fpm
danphp8.0-mysql
Jika module untuk php versi 8 tidak ditemukan, tambahkan repository ubuntu dibawah ini terlebih dahulu
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
Untuk meningkatkan keamanan web server, kita perlu merubah sebuah configurasi pada /etc/php/7.4/fpm/php.ini
.
sudo nano /etc/php/7.4/fpm/php.ini
versi php menyesuaikan yang telah di install, jika versi adalah
8.0
maka gunakan/etc/php/8.0/fpm/php.ini
pada konfigurasi tersebut kita akan merubah cgi.fix_pathinfo=0
menjadi cgi.fix_pathinfo=1
. Konfigurasi ini untuk mencegah pengguna untuk membuat PHP request pada file yang sebenarnya tidak ada.
selanjutnya hanya perlu melakukan restart PHP menggunakan
sudo systemctl restart php7.4-fpm
versi php menyesuaikan yang telah di install, jika versi adalah
8.0
maka gunakanphp8.0-fpm
Buka default Nginx server block dengan
sudo nano /etc/nginx/sites-available/default
Tanpa komen pada file tersebut, kurang lebih block server berisi seperti
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Beberapa perubahan yang perlu dilakukan:
- Menambahkkan
index.php
sebagai value pertama pada directiveindex
. - Uncomment bagian file yang berisi lokasi PHP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
Sesuaikan versi PHP
- Uncomment bagian file yang memblokir file
.htaccess
diserve kepada pengunjung.
location ~ /\.ht {
deny all;
}
Setelah semua perubahan selesai dibuat, coba jalankan configurasi dengan
sudo nginx -t
Hasil yang diharapkan adalah
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Jika muncil error, coba kembali dan perbaiki error yang ditemukan.
Terakhir reload Nginx untuk memuat perubahan yang dibuat.
sudo systemctl reload nginx
Langkah terakhir dalam menginstall LEMP stack adalah menguji PHP yang baru saja diinstall dengan menjalankan sebuah file php.
Buat sebuah file baru bernama info.php
dengan
sudo nano /var/www/html/info.php
Dan isi file tersebut dengan
<?php
phpinfo();
Selanjutnya buka IP vps seperti langkah pertama dengan subdirectory /info.php
http://<ip vps>/info.php
Jika berhasil, halaman akan menampilkan deskripsi versi PHP yang berhasil diinstall
Untuk menjalankan aplikasi laravel, akan membutuhkan beberapa package tambahan yaitu:
- composer : PHP Depedency Manager
- php7.4-mbstring : PHP Extension to handle multi-byte string
- php7.4-xml : PHP Extension to handle XML
- unzip : handle zip files
sudo apt-get install php7.4-mbstring php7.4-xml composer unzip
Sesuaikan versi PHP PHP versi 8 butuh menginstall
php8.0-curl
Masuk ke dalam MySQL console sebagai root
mysql -u root -proot
Membuat database baru
CREATE DATABASE `laravel-sample-app-db` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Membuat user baru dan memberikan privileges
CREATE USER 'laraveluser'@'localhost' IDENTIFIED BY 'passwd';
GRANT ALL PRIVILEGES ON `laravel-sample-app-db`.* TO 'laraveluser'@'localhost';
Aplikasi demo yang akan digunakan adalah https://github.com/laravel/quickstart-basic yang merupakah sebuah aplikasi task list sederhana.
Langkah pertama adalah membuat direktori pada Nginx web root untuk menyimpan source code aplikasi, sebagai contoh folder akan dinamakan application
sudo mkdir -p /var/www/application
Pindah menuju folder yang baru saja dibuat dan clone aplikasi menggunakan git
cd /var/www/application
git clone https://github.com/laravel/quickstart-basic .
Instalasi depedency aplikasi menggunakan composer
composer install
Langkah selanjutnya adalah mengkonfigurasi database aplikasi untuk menggunakan database dan user yang telah dibuat
Buka file .env
menggunakan nano atau text editor apapun
nano /var/www/application/.env
Dan ubah konfigurasi menjadi seperti dibawah, mengikuti nama database dan nama user yang telah dibuat pada langkah sebelumnya
DB_HOST=127.0.0.1
DB_DATABASE=laravel-sample-app-db
DB_USERNAME=laraveluser
DB_PASSWORD=passwd
Lakukan migrasi untuk membuat table pada database
php artisan migrate
Langkah terakhir adalah mengkonfigurasi Nginx untuk dapat meg-serve aplikasi laravel.
Buat konfigurasi baru untuk aplikasi laravel
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/application.com
Buka file konfigurasi dengan nano
sudo nano /etc/nginx/sites-available/application.com
Beberapa perubahan pada file konfigurasi yang harus dilakukan adalah:
- Menghapus
default_server
darilisten
directive - Merubah root menjadi
/var/www/application/public
- Merubah request handling agar semua request diarahkan ke aplikasi laravel dengan merubah
=404
menjadi/index.php?$query_string
Sehingga file konfigurasi menjadi seperti ini
server {
listen 80;
listen [::]:80;
. . .
root /var/www/application/public;
index index.php index.html index.htm index.nginx-debian.html;
...
location / {
try_files $uri $uri/ /index.php?$query_string;
}
. . .
}
Agar Nginx dapat mengakses /var/www/application
, maka perlu diberikan akses
sudo chown -R www-data:www-data /var/www/application/
Selanjutnya adalah mengaktifkan konfigurasi dengan membuat symbolic link menuju direktori sites-enabled
sudo ln -s /etc/nginx/sites-available/sample.com /etc/nginx/sites-enabled
Dan terakhir reload Nginx untuk menerapkan perubahan
sudo systemctl reload nginx
Buka ip vps untuk mengakses aplikasi laravel