Deploy Laravel Project dengan Github Actions

Github sudah merilis produk Github Actions dengan tujuan untuk memudahkan software developer melakukan Continuous Integration (CI) dan Continuous Delivery (CD). Sederhananya, kita bisa men-deploy program kita ke server tanpa harus menggunakan FTP. 😝

Cukup menggunakan perintah git push ke Github maka proses deployment ke server akan diproses oleh Github mulai dari menginstal dan meng-compile aset seperti paket NPM, kemudian hasil dari compile aset tersebut tinggal dikirim ke server. Jadi, server kita tidak perlu menginstal NodeJS karena proses menginstal dan meng-compile aset. Lumayan menghemat beban kerjaan server kan? 😁

Tulisan kali ini, saya akan menjelaskan CI/CD project Laravel menggunakan Github Actions. Pastikan Anda sudah memiliki VPS. Pada tulisan ini saya menggunakan VPS dari Digital Ocean.

  1. Buatlah SSH key di VPS dengan user yang bukan root dan tidak memiliki perintah sudo misalnya:deployer, silahkan ikuti panduan dari Github tentang cara membuat SSH key.
  2. Setelah berhasil membuat SSH key, selanjutnya lakukan duplikat konten public key SSH ke authorized keys.
# Sebagai user `deployer` di server
#
# Salin isi dari public key ke authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. Duplikat isi private key dan kita akan taruh di project Github di menu Settings => Secrets dan beri nama SSH_PRIVATE_KEY.
# Masih sebagai user `deployer` di server
# Salin blok teks private key
cat ~/.ssh/id_rsa
# Blok isi dari private key tadi, copy dan tempel di Github project kita seperti gambar di bawah.
Memasang ssh private key di Github project
  1. Untuk mencegah tidak ada MITM (Man in the middle) attack, kita harus mendapatkan SSH fingerprint VPS kita dengan perintah ssh-keyscan.
# Masih sebagai user `deployer` di server
# Jalankan perintah ini di dalam server kita
ssh-keyscan -t rsa ip_server_kita
# Contoh: ssh-keyscan -t rsa 123.456.781.901

Setelah itu, salin hasil dari ssh-keyscan ke project Github di menu Settings => Secrets dan beri nama SSH_KNOWN_HOSTS seperti gambar di bawah.

Memasang ssh known hosts di Github project
  1. Di dalam server sebagai user deployer kita buat direktori env/nama-laravel-project/ di direktori utama user deployer (home/deployer). Direktor ini berfungsi untuk menyimpan file .env production dan akan digunakan untuk proses deployment.
# Masih sebagai user `deployer` di server
cd /home/deployer
mkdir -p env/nama-laravel-project
  1. Berikutnya, kita menuju ke direktori env/nama-laravel-project dan buat file .env.
# Masih sebagai user `deployer` di server
cd env/nama-laravel-project
touch .env
  1. Di project Laravel yang ada di komputer lokal, kita salin isi dari .env file dan tempel ke file .env yang berada di server. Pastikan file .env yang ada komputer lokal sudah di jalankan perintah php artisan key:generate. Kemudian sesuaikan nilai-nilai variable yang diperlukan file .env di dalam server.

  2. Menginstal Deployer di project Laravel yang ada di komputer lokal, alat untuk men-deploy project ke server dengan perintah di bawah ini.

composer require deployer/deployer deployer/recipes
  1. Buat file deploy.php dengan perintah ./vendor/bin/dep init dan ikuti petunjuk yang diberikan, pilih Laravel sebagai framework yang dipakai.

  2. Buka file deploy.php dan salin Gist di bawah ini ke file deploy.php.

  1. Buat folder .github/workflows di root project Laravel dan file deploy.yml di dalam folder workflows.
mkdir -p .github/workflows
cd .github/workflows
touch deploy.yml
  1. Buka file deploy.yml dan salin Gist di bawah ini ke file deploy.yml.

runs-on: ubuntu-latest ini menggunakan distro Ubuntu Linux milik server Github bukan server tempat kita menaruh proyek Laravel.

Selesai dan selamat mencoba. Silakan contek di project Laravel Github Action milik saya dan jika ada kendala silakan buat isu di project itu.

Jika konten ini bermanfaat, silakan: