Deploy aplikasi Laravel secara manual seringkali merepotkan: copy file, jalankan composer, clear cache, migrasi database, dan seterusnya. Dengan CI/CD (Continuous Integration / Continuous Deployment), semua proses ini bisa berjalan otomatis setiap kali kita push kode ke GitHub.
Kali ini kita akan bahas bagaimana cara setup CI/CD Laravel di aaPanel menggunakan GitHub Actions, sekaligus menambahkan notifikasi Telegram supaya kita tahu apakah deployment sukses atau gagal. ๐
1. Persiapan Awal
Sebelum mulai, pastikan:
- Punya server/VPS dengan aaPanel terinstall.
- Laravel project sudah ada di repository GitHub.
- Domain/subdomain sudah diarahkan ke server.
- Akses SSH aktif di server.
- Composer dan PHP CLI sudah terinstall di server.
- Bot Telegram untuk notifikasi (akan kita buat di bawah).
2. Membuat Bot Telegram & Mendapatkan Chat ID
Agar workflow bisa mengirim notifikasi, kita butuh Bot Token dan Chat ID.
Membuat Bot Telegram
- Buka Telegram, cari BotFather.
- Ketik
/start
, lalu pilih/newbot
. - Berikan nama bot (misalnya
Laravel Deploy Bot
). - Berikan username unik berakhiran
bot
(misalnyalaravel_deploy_bot
). - BotFather akan memberi API Token, contohnya:
1234567890:ABCdefGhIJKlmNoPQRstuVWxyz
Simpan ini sebagaiTELEGRAM_BOT_TOKEN
.
Mendapatkan Chat ID
Ada dua cara:
- Cara cepat (user pribadi): Chat dengan bot @userinfobot โ start โ bot akan menampilkan Chat ID.
- Cara group:
- Buat group, tambahkan bot ke group.
- Kirim pesan sembarang.
- Buka:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getUpdates
- Cari
"chat":{"id":...}
โ itulah Chat ID group.
Simpan ID tersebut sebagai TELEGRAM_CHAT_ID
.
Uji Coba
Buka browser:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Halo+Laravel+Deploy
Jika pesan muncul di Telegram โ bot siap digunakan โ
3. Menambahkan Secrets di GitHub
Masuk ke GitHub repo โ Settings โ Secrets โ Actions โ New repository secret.
Tambahkan:
DEPLOY_USER
โ user SSH (misalnyaroot
atauwww
).DEPLOY_HOST
โ IP/domain server.DEPLOY_PATH
โ folder Laravel (misalnya/www/wwwroot/namadomain.com
).DEPLOY_KEY
โ private SSH key.TELEGRAM_BOT_TOKEN
โ dari BotFather.TELEGRAM_CHAT_ID
โ dari langkah sebelumnya.
4. Membuat Workflow GitHub Actions
Di repo Laravel, buat folder/file:
.github/workflows/deploy.yml
Isi dengan:
name: Deploy Laravel to aaPanel & Notify Telegram
on:
push:
branches:
- main # Ganti dengan branch utama Anda
pull_request:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: rsync deployments
uses: contention/rsync-deployments@v2.0.0
with:
flags: -avzr
user: ${{ secrets.DEPLOY_USER }}
host: ${{ secrets.DEPLOY_HOST }}
localpath: ./
remotepath: ${{ secrets.DEPLOY_PATH }}
deploy_key: ${{ secrets.DEPLOY_KEY }}
- name: Run post-deployment commands on server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_KEY }}
script: |
cd ${{ secrets.DEPLOY_PATH }}
PHP_CLI_PATH="/www/server/php/83/bin/php" # Sesuaikan versi PHP di aaPanel
echo "Running Composer install..."
$PHP_CLI_PATH /usr/bin/composer install --no-dev --optimize-autoloader
echo "Running database migrations..."
$PHP_CLI_PATH artisan migrate --force
echo "Clearing Laravel caches..."
$PHP_CLI_PATH artisan config:clear
$PHP_CLI_PATH artisan route:clear
$PHP_CLI_PATH artisan view:clear
$PHP_CLI_PATH artisan cache:clear
echo "Optimizing Laravel..."
$PHP_CLI_PATH artisan optimize
# $PHP_CLI_PATH artisan storage:link # Jalankan jika butuh symlink storage
- name: Send Telegram Notification (Success)
if: success()
uses: appleboy/telegram-action@master
with:
to: ${{ env.TELEGRAM_CHAT_ID }}
token: ${{ env.TELEGRAM_BOT_TOKEN }}
message: |
โ
Deployment Berhasil! โ
Repositori: `${{ github.repository }}`
Branch: `${{ github.ref_name }}`
Commit: `${{ github.sha }}`
Pesan Commit: `${{ github.event.head_commit.message }}`
Oleh: `${{ github.actor }}`
Lihat log: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
disable_web_page_preview: true
- name: Send Telegram Notification (Failure)
if: failure()
uses: appleboy/telegram-action@master
with:
to: ${{ env.TELEGRAM_CHAT_ID }}
token: ${{ env.TELEGRAM_BOT_TOKEN }}
message: |
โ Deployment Gagal! โ
Repositori: `${{ github.repository }}`
Branch: `${{ github.ref_name }}`
Commit: `${{ github.sha }}`
Pesan Commit: `${{ github.event.head_commit.message }}`
Oleh: `${{ github.actor }}`
Lihat log: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
disable_web_page_preview: true
parse_mode: markdown
5. Penjelasan Workflow
- Checkout code โ Ambil kode dari repo.
- Rsync deployments โ Sinkronisasi file Laravel ke server aaPanel.
- SSH Action โ Jalankan perintah pasca deploy (composer, migrate, cache clear, optimize).
- Telegram Notification โ Kirim pesan ke Telegram jika sukses/gagal.
6. Uji Coba
- Push perubahan ke branch
main
. - Buka tab Actions di GitHub repo.
- Jika workflow sukses, bot Telegram akan mengirim pesan:
โ
Deployment Berhasil!
atau
โ Deployment Gagal!
Penutup
Dengan kombinasi aaPanel + GitHub Actions + Telegram, proses deployment Laravel jadi otomatis, cepat, dan terpantau.
Tidak ada lagi ribet upload manual atau lupa clear cache. Cukup git push, dan server akan update sendiri.
๐ Cocok banget buat kamu yang ingin workflow rapi tanpa harus pakai tools CI/CD berbayar.