Versi cepat & profesional — deploy otomatis, ada gambar tiap langkah
Deploy otomatis: cukup git push, sisanya server yang kerja
Capek mengetik perintah deploy yang sama berulang-ulang setiap update? Di panduan ini kamu akan menyetel robot deploy sekali saja. Setelah itu, tiap kali kamu menyimpan tulisan dan git push, server membangun dan menjalankan ulang blog dengan sendirinya — persis seperti cara kerja perusahaan profesional. Tetap dijelaskan dari nol, pelan-pelan, sampai berhasil.
Sekali setel
Atur satu kali, lalu lupakan. Deploy jadi otomatis selamanya.
Tanpa ngulang
Tak perlu lagi mengetik perintah build & restart tiap update.
Profesional
Pakai GitHub Actions — alur yang dipakai tim software sungguhan.
docker compose upyang jalan). Di sini kita hanya menambahkan "robot" yang menekan tombol deploy itu untukmu.Kenapa deploy manual melelahkan?
Tiap kali kamu mengubah tulisan blog, deploy manual berarti mengulang ritual yang sama: masuk ke server lewat SSH, git pull, docker compose up -d --build, tunggu, lalu keluar. Tiga sampai lima perintah, setiap kali, selamanya.
Itu membosankan dan rawan keliru — salah ketik satu perintah, blog bisa mati. Solusinya: otomatiskan. Biar mesin yang mengulang, kamu cukup fokus menulis.
kamu@laptop:~$ ssh deploy@203.0.113.10kamu@laptop:~$ cd ~/blogkamu@laptop:~$ git pull origin mainkamu@laptop:~$ docker compose up -d --buildkamu@laptop:~$ exit# ...dan ulang semua ini lagi besok 😮💨Apa itu CI/CD (dan robot deploy)?
CI/CDhanyalah istilah keren untuk "otomatis membangun dan menerbitkan aplikasi". Yang akan kita pakai bernama GitHub Actions: sebuah robot gratis milik GitHub yang bisa kamu suruh melakukan sesuatu setiap kali kamu push kode.
Rencananya sederhana: begitu kamu git push, robot bangun, masuk ke server-mu lewat pintu rahasia (SSH), menjalankan satu script deploy, lalu pamit. Blog tayang dengan versi terbaru — tanpa kamu menyentuh terminal sama sekali.
Yang perlu kamu siapkan
Tidak banyak. Kalau panduan Docker sudah kamu ikuti, kamu hanya butuh:
- VPS yang sudah menjalankan blog lewat Docker Compose.
- Repo blog kamu ada di GitHub (lihat panduan VPS bila belum).
- Bisa masuk ke server lewat SSH dari laptop.
Buat kunci SSH khusus untuk robot
Robot butuh "kunci rumah" sendiri agar bisa masuk ke server. Kita tidak memakai password atau kunci pribadimu — kita buat sepasang kunci baru khusus deploy. Jalankan ini di laptop:
# DI LAPTOP — buat sepasang kunci khusus untuk robot deploy
ssh-keygen -t ed25519 -C "github-actions-deploy" -f deploy_key
# hasilnya 2 file:
# deploy_key -> kunci RAHASIA (untuk GitHub)
# deploy_key.pub -> kunci publik (untuk server)Akan lahir dua file. Yang berakhiran .pub adalah kunci publik (boleh dibagikan), satunya kunci rahasia (jangan sampai bocor). Pasang kunci publik di server agar pintu mau terbuka untuknya:
# DI SERVER — izinkan kunci publik tadi boleh masuk
echo "isi-file-deploy_key.pub" >> ~/.ssh/authorized_keysSimpan rahasia di GitHub Secrets
Robot perlu tahu alamat server, nama user, dan kunci rahasianya — tapi ini semua tidak boleh ditulis di kode. GitHub punya brankas aman bernama Secrets. Buka repo kamu di GitHub → Settings → Secrets and variables → Actions → tombol New repository secret, lalu tambahkan tiga ini:
| Nama Secret | Isinya | Contoh |
|---|---|---|
| SERVER_HOST | Alamat IP VPS kamu | 203.0.113.10 |
| SERVER_USER | Nama user di server | deploy |
| SSH_PRIVATE_KEY | Isi LENGKAP file deploy_key | -----BEGIN OPENSSH... |
SSH_PRIVATE_KEY, tempel seluruh isi file deploy_key (yang tanpa .pub) — termasuk baris -----BEGIN----- sampai -----END-----.Taruh script deploy di server
Daripada robot menghafal banyak perintah, kita bungkus semuanya jadi satu file deploy.sh di server. Robot tinggal memanggil satu baris ini saja. Buat file ~/blog/deploy.sh:
1#!/usr/bin/env bash2set -e3 4cd ~/blog5echo "==> Ambil kode terbaru"6git pull origin main7echo "==> Build & jalankan ulang"8docker compose up -d --build9docker image prune -f10echo "Deploy selesai!"Salin teks lengkapnya dari sini:
#!/usr/bin/env bash
# ~/blog/deploy.sh — dijalankan otomatis oleh robot
set -e
cd ~/blog
echo "==> 1/3 Ambil kode terbaru dari GitHub"
git pull origin main
echo "==> 2/3 Build ulang & jalankan container"
docker compose up -d --build
echo "==> 3/3 Bersihkan image lama biar disk tidak penuh"
docker image prune -f
echo "Deploy selesai — versi terbaru sudah tayang!"Jangan lupa beri izin agar file ini boleh dijalankan:
deploy@server:~/blog$ chmod +x deploy.sh# sekarang deploy.sh siap dipanggil robotTulis file workflow GitHub Actions
Inilah bagian intinya. Di proyek blog kamu (di laptop), buat file di lokasi persis ini: .github/workflows/deploy.yml. Folder .github/workflows harus dibuat kalau belum ada — namanya tidak boleh keliru.
1name: Deploy ke VPS2 3on:4 push:5 branches: [main]6 7jobs:8 deploy:9 runs-on: ubuntu-latest10 steps:11 - name: Masuk ke server & jalankan deploy12 uses: appleboy/ssh-action@v1.0.313 with:14 host: ${{ secrets.SERVER_HOST }}15 username: ${{ secrets.SERVER_USER }}16 key: ${{ secrets.SSH_PRIVATE_KEY }}17 script: |18 cd ~/blog19 bash deploy.shTeks lengkap yang bisa kamu salin:
# .github/workflows/deploy.yml
name: Deploy ke VPS
# Berjalan otomatis setiap ada push ke branch main
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Masuk ke server & jalankan deploy
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ~/blog
bash deploy.shon: push: branches: [main]artinya "jalankan tiap ada push ke branch main". Bagian ${{ secrets.NAMA }} mengambil nilai dari brankas yang kamu isi di langkah 5 — jadi rahasianya tidak pernah terlihat di kode.Push, lalu lihat keajaibannya
Sekarang commit dan push semuanya (script, workflow) ke GitHub. Ini juga jadi push pertama yang memicu robot:
kamu@laptop:~/blog$ git add .kamu@laptop:~/blog$ git commit -m "Tambah deploy otomatis"kamu@laptop:~/blog$ git push origin mainEnumerating objects: 8, done.To github.com:username/blog-saya.git a1b2c3d..e4f5g6h main -> mainBuka repo di GitHub, klik tab Actions. Kamu akan melihat robotmu sedang bekerja — centang hijau berarti deploy berhasil:
✓ Set up job✓ Masuk ke server & jalankan deploy ==> Ambil kode terbaru ==> Build & jalankan ulang Deploy selesai!✓ Complete job Deploy ke VPS — berhasil dalam 48 detikBuka blog kamu di browser. Versi terbaru sudah tayang, tanpa kamu menyentuh server sama sekali:
Blog berbasis markdown
Tulis di Markdown. Push ke GitHub. Deploy di VPS milikmu sendiri.
Menyiapkan VPS pertama kamu
Sebuah catatan singkat tentang menjalankan blog kamu sendiri…
Menulis dengan Markdown
Sebuah catatan singkat tentang menjalankan blog kamu sendiri…
git push → selesai. Robot mengurus sisanya tiap kali, otomatis.Biar makin aman: cek sebelum percaya
Dua kebiasaan kecil yang membuat deploy otomatismu setenang tim profesional:
- Selalu intip tab Actions setelah push — kalau merah, klik untuk baca log persis di baris mana yang gagal.
- Tambahkan baris pengecekan di deploy.sh, misalnya memastikan container benar-benar "Up" setelah restart.
- Karena kode ada di GitHub, "rollback" semudah git revert lalu push lagi — robot akan men-deploy versi lama.
deploy@server:~/blog$ docker compose psNAME STATUS PORTSblog Up 12 seconds 0.0.0.0:3000->3000/tcpMasalah umum & solusinya
Kalau robot gagal, tab Actions akan memberi tahu persis di mana. Ini yang paling sering ditemui pemula:
| Gejala | Penyebab & solusi |
|---|---|
| Permission denied (publickey) | Kunci publik belum dipasang di server, atau isi SSH_PRIVATE_KEY tidak lengkap. Ulangi langkah 4 & 5. |
| Workflow tidak jalan sama sekali | Cek lokasi & nama file: harus .github/workflows/deploy.yml dan push-nya ke branch main. |
| bash: deploy.sh: No such file | Script belum ada di ~/blog di server, atau belum di-git pull. Pastikan langkah 6 selesai. |
| docker: command not found | Docker belum terpasang di server. Selesaikan panduan Docker dulu sebelum otomatisasi. |
| Permission denied: ./deploy.sh | Lupa chmod +x deploy.sh. Beri izin eksekusi (akhir langkah 6). |
Perintah penyelamat di server: docker compose logs -f blog (lihat error blog), docker compose ps (cek container hidup), dan cat deploy.sh (pastikan script-nya benar).
Selamat, deploy kini otomatis!
Kamu sudah menyetel alur deploy ala profesional. Tulis, push, dan biarkan robot bekerja — tidak ada lagi perintah yang diketik berulang.