Deployment - Manajemen-Cerdas-Informasi/materi-oprec-2022 GitHub Wiki

Membuat Virtual Private Server Di Digital Ocean

Membuat projek di Digital Ocean

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.

DO TUTORIAL

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.

DO TUTORIAL

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.

DO TUTORIAL

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.

DO TUTORIAL

Deploy aplikasi laravel menggunakan virtual private server

Mendapatkan VPS

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

Mempersiapkan VPS

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.

Instalasi Nginx

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>

LEMP TUTORIAL

Instalasi MySQL

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

Instalasi PHP

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 dan php8.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 gunakan php8.0-fpm

Konfigurasi Nginx untuk menggunakan PHP

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 directive index.
  • 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

Menguji PHP

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

LEMP TUTORIAL

Install Kebutuhan Laravel

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

Membuat Database dan User MySQL untuk Aplikasi

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';

Setup Aplikasi Demo

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

Konfigurasi Environment Aplikasi

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

Konfigurasi Nginx

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 dari listen 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

Uji coba

Buka ip vps untuk mengakses aplikasi laravel

LEMP TUTORIAL

⚠️ **GitHub.com Fallback** ⚠️