Home ยป Cara Setup CI/CD Laravel di aaPanel dengan GitHub Actions + Notifikasi Telegram
Posted in

Cara Setup CI/CD Laravel di aaPanel dengan GitHub Actions + Notifikasi Telegram

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:

  1. Punya server/VPS dengan aaPanel terinstall.
  2. Laravel project sudah ada di repository GitHub.
  3. Domain/subdomain sudah diarahkan ke server.
  4. Akses SSH aktif di server.
  5. Composer dan PHP CLI sudah terinstall di server.
  6. 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

  1. Buka Telegram, cari BotFather.
  2. Ketik /start, lalu pilih /newbot.
  3. Berikan nama bot (misalnya Laravel Deploy Bot).
  4. Berikan username unik berakhiran bot (misalnya laravel_deploy_bot).
  5. BotFather akan memberi API Token, contohnya: 1234567890:ABCdefGhIJKlmNoPQRstuVWxyz Simpan ini sebagai TELEGRAM_BOT_TOKEN.

Mendapatkan Chat ID

Ada dua cara:

  • Cara cepat (user pribadi): Chat dengan bot @userinfobot โ†’ start โ†’ bot akan menampilkan Chat ID.
  • Cara group:
    1. Buat group, tambahkan bot ke group.
    2. Kirim pesan sembarang.
    3. Buka: https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getUpdates
    4. 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 (misalnya root atau www).
  • 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

  1. Push perubahan ke branch main.
  2. Buka tab Actions di GitHub repo.
  3. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *