Episode ini membahas deployment Docker: image resmi Caddy, multi- stage build, Docker Compose dengan volume dan network, persistence sertifikat, service discovery antar container, serta pola Caddy sebagai reverse proxy banyak aplikasi.

Container mengubah cara aplikasi di-deploy, dan Caddy adalah salah satu web server paling nyaman untuk Docker. Image resminya ringan, konfigurasi lewat file yang mudah di-mount, dan log langsung ke stdout untuk pengelolaan container. Episode 27 membahas integrasi Docker secara menyeluruh.
Image resmi caddy tersedia di Docker Hub:
docker run -d -p 80:80 -p 443:443 \
--name caddy \
-v $PWD/Caddyfile:/etc/caddy/Caddyfile:ro \
-v caddy_data:/data \
-v caddy_config:/config \
caddy:2Volume penting:
Caddyfile:/etc/caddy/Caddyfile — konfigurasi.caddy_data:/data — sertifikat dan storage (wajib persisten).caddy_config:/config — konfigurasi runtime.docker run -d -p 80:80 -p 443:443 caddy:2 memetakan port web standar ke container.
caddy:2 — image standar.caddy:2-alpine — versi lebih kecil dengan Alpine.xcaddy (episode 29).FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM caddy:2-alpine
COPY --from=build /app/dist /srv
COPY Caddyfile /etc/caddy/Caddyfile:80 {
root * /srv
try_files {path} /index.html
file_server
}services:
caddy:
image: caddy:2
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
networks:
- web
app:
build: .
networks:
- web
db:
image: postgres:16
networks:
- web
volumes:
caddy_data:
caddy_config:
networks:
web:Dalam network bersama, nama service menjadi hostname:
app.example.com {
reverse_proxy app:3000
}Volume caddy_data menyimpan sertifikat ACME. Jika volume hilang, Caddy meminta sertifikat ulang — bisa kena rate limit CA. Pastikan:
docker exec caddy caddy reload --config /etc/caddy/Caddyfiledocker exec caddy caddy reload menjalankan perintah di dalam container — reload yang mulus. Atau cukup restart container; Caddy membaca Caddyfile saat start.
Image resmi Caddy mengirim log ke stdout/stderr. Docker menangkapnya otomatis:
docker logs -f caddyapi.example.com {
reverse_proxy api:3000
}
web.example.com {
reverse_proxy web:3000
}
blog.example.com {
root * /srv/blog
file_server
}caddy-docker-proxy (episode 29) untuk mengelola via labels.Episode 27 membahas Docker: image resmi dengan volume persisten, multi-stage build untuk aplikasi statis, Docker Compose dengan network bersama, persistence sertifikat di caddy_data, service discovery via nama container, dan pola satu Caddy untuk banyak aplikasi.
Inti yang harus dibawa pulang:
caddy_data volume wajib persisten untuk sertifikat.docker exec caddy caddy reload memuat ulang tanpa restart.docker logs.Di episode 28 selanjutnya kita akan membahas Kubernetes deployment — Deployment, Service, ConfigMap, dan PersistentVolumeClaim, Caddy sebagai ingress, manajemen Caddyfile di ConfigMap, integrasi cert-manager, service discovery via K8s DNS, serta Helm chart.