Kembali ke Panduan Docker

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.

Panduan ini lanjutan. Kamu sebaiknya sudah bisa men-deploy blog secara manual lewat panduan Docker (server sudah ada docker compose upyang jalan). Di sini kita hanya menambahkan "robot" yang menekan tombol deploy itu untukmu.
1
Pahami dulu

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.

cara lama — capek, diulang tiap update
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 😮‍💨
2
Konsep

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.

Analogi: bayangkan kamu menaruh surat (kode) ke kotak pos (GitHub). Begitu surat masuk, seorang kurir otomatis (GitHub Actions) langsung mengantarnya ke rumah (server) dan menatanya rapi. Kamu cukup menulis suratnya.
3
Checklist

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.
4
Keamanan

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_keys
Pakai kunci khusus deploy, jangan kunci pribadimu. Kalau suatu saat bocor, kamu cukup mencabut satu kunci ini tanpa mengganggu akses lain. Kunci rahasianya hanya akan disimpan di GitHub Secrets (langkah berikutnya), bukan di kode.
5
Sekali atur

Simpan 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 → SettingsSecrets and variables Actions → tombol New repository secret, lalu tambahkan tiga ini:

Nama SecretIsinyaContoh
SERVER_HOSTAlamat IP VPS kamu203.0.113.10
SERVER_USERNama user di serverdeploy
SSH_PRIVATE_KEYIsi LENGKAP file deploy_key-----BEGIN OPENSSH...
Untuk SSH_PRIVATE_KEY, tempel seluruh isi file deploy_key (yang tanpa .pub) — termasuk baris -----BEGIN----- sampai -----END-----.
6
Sekali tulis

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:

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

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
deploy@server:~/blog$ chmod +x deploy.sh# sekarang deploy.sh siap dipanggil robot
7
Otak si robot

Tulis 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.

GNU nano 7.2~/blog/.github/workflows/deploy.yml
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.sh
^O Write Out^X Exit^W Where Is^K Cut

Teks 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.sh
Baca pelan-pelan: on: 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.
8
Saat yang ditunggu

Push, lalu lihat keajaibannya

Sekarang commit dan push semuanya (script, workflow) ke GitHub. Ini juga jadi push pertama yang memicu robot:

kamu@laptop: ~/blog
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 -> main

Buka repo di GitHub, klik tab Actions. Kamu akan melihat robotmu sedang bekerja — centang hijau berarti deploy berhasil:

GitHub Actions — Deploy ke VPS
✓ Set up job✓ Masuk ke server & jalankan deploy    ==> Ambil kode terbaru    ==> Build & jalankan ulang    Deploy selesai!✓ Complete job Deploy ke VPS — berhasil dalam 48 detik

Buka blog kamu di browser. Versi terbaru sudah tayang, tanpa kamu menyentuh server sama sekali:

https://domainkamu.com
Koneksi aman — HTTPS aktif

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…

Deployment berhasil
Mulai sekarang alurmu cukup: tulis → git push → selesai. Robot mengurus sisanya tiap kali, otomatis.
9
Tips pro

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 — cek container hidup
deploy@server:~/blog$ docker compose psNAME   STATUS         PORTSblog   Up 12 seconds  0.0.0.0:3000->3000/tcp
10
Troubleshooting

Masalah umum & solusinya

Kalau robot gagal, tab Actions akan memberi tahu persis di mana. Ini yang paling sering ditemui pemula:

GejalaPenyebab & 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 sekaliCek lokasi & nama file: harus .github/workflows/deploy.yml dan push-nya ke branch main.
bash: deploy.sh: No such fileScript belum ada di ~/blog di server, atau belum di-git pull. Pastikan langkah 6 selesai.
docker: command not foundDocker belum terpasang di server. Selesaikan panduan Docker dulu sebelum otomatisasi.
Permission denied: ./deploy.shLupa 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.