CI/CD GitHub Actions
Auto Deploy ke VPS Linux

Push ke GitHub → deploy otomatis ke server. Tidak perlu login VPS manual lagi.

± 25 menit baca SufaNet
CI/CD GitHub Actions Auto Deploy VPS Linux

Pendahuluan

Setiap kali selesai coding, kamu harus SSH ke VPS, pull code, restart service. Berulang, membosankan, dan rawan human error.

CI/CD pipeline menyelesaikan semua itu. Setelah setup, workflow deployment menjadi: push ke GitHub → otomatis deploy ke VPS.

GitHub Actions adalah tools CI/CD gratis yang terintegrasi langsung dengan repository GitHub kamu. Perfect untuk project personal hingga production skala menengah.

Apa Itu CI/CD?

  • CI (Continuous Integration) — otomatis test dan build setiap ada perubahan code
  • CD (Continuous Deployment) — otomatis deploy ke server jika CI berhasil

Manfaat utama:

  • Tidak ada deploy manual yang lupa langkah
  • Deploy konsisten dan reproducible
  • Rollback lebih mudah jika ada masalah
  • Fokus coding, bukan deploy

Persiapan VPS

Buat user khusus untuk deploy (jangan pakai root):

sudo adduser deployer
sudo usermod -aG sudo deployer
# Opsional: beri akses tanpa password untuk perintah deploy spesifik
sudo visudo
# Tambahkan: deployer ALL=(ALL) NOPASSWD: /bin/systemctl restart myapp

Setup SSH Key untuk Deploy

Generate deploy key di komputer lokal kamu:

ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/deploy_key -N ""

Copy public key ke VPS:

ssh-copy-id -i ~/.ssh/deploy_key.pub deployer@IP_VPS_KAMU

Tampilkan private key untuk disimpan ke GitHub Secrets:

cat ~/.ssh/deploy_key

Konfigurasi GitHub Secrets

Buka repository GitHub kamu → Settings → Secrets and variables → Actions → New repository secret.

Tambahkan secret berikut:

  • VPS_HOST — IP address VPS kamu
  • VPS_USER — username deploy (misal: deployer)
  • VPS_SSH_KEY — isi private key dari langkah sebelumnya
  • VPS_PORT — port SSH (default: 22)

Buat GitHub Actions Workflow

Buat file .github/workflows/deploy.yml di repository kamu:

name: Deploy ke VPS

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          port: ${{ secrets.VPS_PORT }}
          script: |
            cd /var/www/myapp
            git pull origin main
            # tambahkan perintah deploy di sini

Contoh: Auto Deploy Aplikasi Laravel

name: Deploy Laravel

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
      - name: Install dependencies
        run: composer install --no-dev
      - name: Run tests
        run: php artisan test

  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /var/www/myapp
            git pull origin main
            composer install --no-dev --optimize-autoloader
            php artisan migrate --force
            php artisan config:cache
            php artisan route:cache
            php artisan view:cache
            sudo systemctl restart laravel-worker

Contoh: Auto Deploy Aplikasi Node.js / Next.js

name: Deploy Next.js

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /var/www/nextapp
            git pull origin main
            npm ci
            npm run build
            pm2 restart nextapp

Kenapa VPS SufaNet Cocok untuk CI/CD?

  • Performa konsisten — deploy tidak tiba-tiba lambat
  • Uptime tinggi — pipeline tidak gagal karena server down
  • SSH stabil untuk koneksi GitHub Actions
  • Cocok untuk project skala kecil hingga menengah

CI/CD mulus butuh server yang responsif

Deploy otomatis tidak ada gunanya jika VPS-nya lambat dan tidak bisa diandalkan.

🚀 Lihat VPS Singapore SufaNet

FAQ

GitHub Actions gratis untuk private repo?

Ya, gratis dengan kuota 2.000 menit/bulan untuk repo private. Untuk repo public, gratis tanpa batas.

Bagaimana cara rollback jika deploy gagal?

Tambahkan langkah git reset --hard HEAD~1 di skrip rollback, atau gunakan git tag untuk versi yang stabil.

Bisa dipakai selain GitHub? GitLab?

GitLab punya GitLab CI yang serupa. Prinsipnya sama, hanya format YAML dan konfigurasi secret yang berbeda.

Kesimpulan

CI/CD dengan GitHub Actions adalah investasi waktu yang terbayar sejak deploy pertama. Setup sekali, nikmati selamanya.

Mulai dari workflow sederhana, lalu tambahkan testing dan notifikasi slack/telegram sesuai kebutuhan.