CI/CD — push, lalu tayang sendiri
Auto-deploy ke VPS dengan GitHub Actions
Bosan SSH ke server, git pull, build, lalu restart tiap kali memperbarui blog? Dengan GitHub Actions, kamu cukup git push — sisanya berjalan otomatis: build dan deploy ke VPS. Ini cara CI/CD profesional, dan di sini dijelaskan dari nol untuk pemula.
Sekali push, tayang
Tidak perlu SSH manual. git push langsung memicu deploy.
Konsisten
Langkah build & restart sama persis tiap kali, bebas lupa.
Ada jejak
Setiap deploy tercatat di tab Actions, mudah ditelusuri.
Apa itu CI/CD & GitHub Actions?
CI/CD singkatnya: proses otomatis yang mengambil kodemu, mengujinya/mem-build, lalu mengirimnya ke server — tanpa langkah manual. GitHub Actions adalah robot gratis bawaan GitHub yang menjalankan tugas tiap kali ada kejadian, misalnya saat kamu git push.
Instruksi untuk robot ini ditulis dalam file .yml di dalam folder .github/workflows/. Itu yang akan kita buat.
Cara kerjanya (alur)
Buat SSH key khusus deploy
GitHub Actions perlu izin login ke servermu. Jangan pakai kunci pribadimu — buat kunci khusus (tanpa passphrase, supaya robot bisa pakai otomatis):
# DI LAPTOP — buat key khusus untuk GitHub Actions (tanpa passphrase)
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/gh_deploy
# Hasilnya dua file:
# ~/.ssh/gh_deploy -> kunci PRIVAT (untuk GitHub Secret)
# ~/.ssh/gh_deploy.pub -> kunci PUBLIK (untuk server)Pasang kunci publik ke server, lalu tampilkan kunci privat untuk kita salin ke GitHub:
# Salin kunci PUBLIK ke server agar Actions boleh login
ssh-copy-id -i ~/.ssh/gh_deploy.pub deploy@203.0.113.10
# Lalu tampilkan kunci PRIVAT untuk disalin ke GitHub Secret
cat ~/.ssh/gh_deploySimpan secret di GitHub
Buka repo di GitHub → Settings → Secrets and variables → Actions → New repository secret. Tambahkan tiga secret berikut:
| Nama secret | Isi |
|---|---|
| SSH_PRIVATE_KEY | Seluruh isi ~/.ssh/gh_deploy(termasuk baris BEGIN & END). |
| SSH_HOST | IP atau domain server, mis. 203.0.113.10. |
| SSH_USER | Username deploy, mis. deploy. |
Buat skrip deploy di server
Agar workflow ringkas, semua langkah build kita taruh di satu skrip di server, bernama ~/deploy.sh:
1#!/usr/bin/env bash2# ~/deploy.sh di server — dijalankan oleh GitHub Actions3set -euo pipefail4 5cd /home/deploy/myblog6 7echo "→ Menarik kode terbaru"8git pull origin main9 10echo "→ Install dependency"11pnpm install --frozen-lockfile12 13echo "→ Build"14pnpm build15 16echo "→ Restart aplikasi (zero-downtime)"17pm2 reload myblog18 19echo "✓ Deploy selesai"Beri izin eksekusi dengan chmod +x ~/deploy.sh. Pakai pm2 reload (bukan restart) agar pergantian versi tanpa downtime.
Tulis file workflow
Di repo (laptop), buat file .github/workflows/deploy.yml. Inilah instruksi untuk robot GitHub:
1name: Deploy ke VPS2 3on:4 push:5 branches: [main] # deploy tiap push ke branch main6 7jobs:8 deploy:9 runs-on: ubuntu-latest10 steps:11 - name: Pasang SSH key12 uses: webfactory/ssh-agent@v0.9.013 with:14 ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}15 16 - name: Tambah server ke known_hosts17 run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts18 19 - name: Jalankan deploy di server20 run: |21 ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'bash ~/deploy.sh'webfactory/ssh-agent memuat kunci privat dari secret ke dalam sesi sementara, jadi kunci tidak pernah tersimpan di disk runner. Aman dan ringkas.Push & lihat deploy otomatis
Commit semuanya (file workflow) dan push. Begitu sampai di GitHub, robot langsung bekerja:
# Cukup commit & push seperti biasa — sisanya otomatis
git add .
git commit -m "Tambah artikel baru"
git push origin mainactions: Pasang SSH key→ Menarik kode terbaru→ Build→ Restart aplikasi (zero-downtime)✓ Deploy selesai# buka tab "Actions" di repo untuk melihat log ini ✅Masalah umum & cara mengatasinya
Bila workflow gagal (centang merah), cek tabel ini:
| Gejala | Sebab | Solusi |
|---|---|---|
| Permission denied (publickey) | Kunci publik belum terpasang di server, atau secret salah. | Pastikan ssh-copy-id berhasil & isi SSH_PRIVATE_KEY lengkap (termasuk baris BEGIN/END). |
| Host key verification failed | Langkah ssh-keyscan terlewat. | Pastikan step "Tambah server ke known_hosts" ada sebelum SSH. |
| pnpm: command not found saat deploy | PATH non-interaktif tidak memuat pnpm. | Pakai path absolut atau "source ~/.bashrc" di awal deploy.sh. |
| Workflow tidak jalan sama sekali | File bukan di .github/workflows/ atau branch salah. | Pastikan file di .github/workflows/deploy.yml & branch sesuai (main). |
Deploy-mu kini otomatis
Sekarang memperbarui blog semudah git push. Lanjutkan dengan mengamankan kunci & server, atau percepat blog dengan optimasi.