Kembali ke Panduan Deploy

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.

Kapan pilih ini dibanding bot Telegram? Keduanya auto-deploy. Pakai GitHub Actions bila alurmu berpusat di Git dan ingin jejak/log rapi. Pakai bot Telegram bila ingin memicu deploy dari HP dengan satu perintah chat.
1
Pahami dulu

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.

2
Gambaran besar

Cara kerjanya (alur)

git pushke branch main
GitHub ActionsSSH ke server
deploy.shpull · build · reload
3
Kunci akses

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_deploy
Kunci privat bersifat sangat rahasia. Jangan pernah commit ke repo. Ia hanya boleh disimpan di GitHub Secrets (langkah berikut), bukan di dalam kode.
4
Rahasia aman

Simpan secret di GitHub

Buka repo di GitHub → Settings → Secrets and variables → Actions → New repository secret. Tambahkan tiga secret berikut:

Nama secretIsi
SSH_PRIVATE_KEYSeluruh isi ~/.ssh/gh_deploy(termasuk baris BEGIN & END).
SSH_HOSTIP atau domain server, mis. 203.0.113.10.
SSH_USERUsername deploy, mis. deploy.
5
Di server

Buat skrip deploy di server

Agar workflow ringkas, semua langkah build kita taruh di satu skrip di server, bernama ~/deploy.sh:

GNU nano 7.2~/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"
^O Write Out^X Exit^W Where Is^K Cut

Beri izin eksekusi dengan chmod +x ~/deploy.sh. Pakai pm2 reload (bukan restart) agar pergantian versi tanpa downtime.

6
Otak otomatisasi

Tulis file workflow

Di repo (laptop), buat file .github/workflows/deploy.yml. Inilah instruksi untuk robot GitHub:

GNU nano 7.2.github/workflows/deploy.yml
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'
^O Write Out^X Exit^W Where Is^K Cut
Action webfactory/ssh-agent memuat kunci privat dari secret ke dalam sesi sementara, jadi kunci tidak pernah tersimpan di disk runner. Aman dan ringkas.
7
Saatnya coba

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 main
GitHub Actions — log deploy
actions: Pasang SSH key→ Menarik kode terbaru→ Build→ Restart aplikasi (zero-downtime)✓ Deploy selesai# buka tab "Actions" di repo untuk melihat log ini ✅
Buka tab Actions di repo GitHub-mu untuk melihat status tiap deploy (centang hijau = sukses). Kalau merah, klik untuk membaca log dan menemukan baris yang gagal.
8
Anti-stuck

Masalah umum & cara mengatasinya

Bila workflow gagal (centang merah), cek tabel ini:

GejalaSebabSolusi
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 failedLangkah ssh-keyscan terlewat.Pastikan step "Tambah server ke known_hosts" ada sebelum SSH.
pnpm: command not found saat deployPATH non-interaktif tidak memuat pnpm.Pakai path absolut atau "source ~/.bashrc" di awal deploy.sh.
Workflow tidak jalan sama sekaliFile 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.