CI/CD Sederhana dengan Docker untuk Tim Kecil
Banyak tim kecil menunda CI/CD karena membayangkan Kubernetes, service mesh, dan biaya bulanan yang menggunung. Kenyataannya: untuk tim 1–5 orang dengan satu sampai beberapa aplikasi, pipeline sederhana dengan GitHub Actions dan Docker Compose sudah menutup 90% kebutuhan — deploy konsisten, rollback cepat, dan tidak ada "tapi di laptop saya jalan".
Anatomi pipeline minimal
Tiga tahap, tidak lebih:
- Test — jalankan unit test dan lint di setiap push
- Build — bangun image Docker, tag dengan commit SHA
- Deploy — push image ke registry, lalu tarik dan jalankan di server
Kenapa Docker Compose, bukan Kubernetes
Compose menjawab pertanyaan yang sebenarnya ditanyakan tim kecil: "bagaimana menjalankan aplikasi + database + reverse proxy dengan konfigurasi yang sama di staging dan produksi?" Kubernetes menjawab pertanyaan yang belum Anda punya: scaling ratusan node, self-healing cluster, multi-tenant.
Biaya kognitif Kubernetes nyata. Compose bisa dipahami penuh dalam satu sore; Kubernetes butuh komitmen belajar berbulan-bulan.
Contoh workflow GitHub Actions
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Test
run: docker compose -f docker-compose.test.yml up --exit-code-from app
- name: Build & push
run: |
docker build -t registry.example.com/app:${{ github.sha }} .
docker push registry.example.com/app:${{ github.sha }}
- name: Deploy
run: ssh deployer@server 'cd ~/app && ./deploy.sh ${{ github.sha }}'
Script deploy.sh di server tinggal: tarik image baru, docker compose up -d, dan bersihkan image lama.
Tiga detail yang sering dilupakan
- Health check — pastikan container benar-benar siap sebelum trafik dialihkan, bukan sekadar "running"
- Migrasi database — jalankan sebagai step terpisah yang idempotent, bukan sisipan acak di entrypoint
- Secrets — simpan di GitHub Secrets dan
.envserver, jangan pernah di dalam image
Rollback adalah fitur, bukan opsi
Karena image di-tag dengan commit SHA, rollback semurup menjalankan ulang compose dengan tag sebelumnya. Latih ini sejak hari pertama — saat insiden terjadi pukul 2 pagi, Anda tidak ingin membaca dokumentasi.
Pola yang sama saya pakai di studi kasus infrastruktur cloud e-commerce — push ke main, live tanpa sentuhan manual.
Butuh pipeline pertama Anda dibangun dengan benar sejak awal? Layanan server & cloud saya mencakup setup CI/CD, atau mulai dari percakapan.



