Belajar Caddy - Docker Integration
Episode 27 of 31

Belajar Caddy - Docker Integration

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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 dan Deployment Dasar

Menjalankan Container

Image resmi caddy tersedia di Docker Hub:

Jalankan Caddy di Docker
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:2

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

Image Variants

  • caddy:2 — image standar.
  • caddy:2-alpine — versi lebih kecil dengan Alpine.
  • Custom build dengan plugin memakai xcaddy (episode 29).

Multi-Stage Build

Membangun Aplikasi Statis

Multi-stage build
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

Caddyfile untuk Aplikasi di Image

Caddyfile dalam image
:80 {
    root * /srv
    try_files {path} /index.html
    file_server
}

Docker Compose

Stack Lengkap

Docker Compose stack
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:

Caddyfile untuk Compose

Dalam network bersama, nama service menjadi hostname:

Proxy ke service lain
app.example.com {
    reverse_proxy app:3000
}

Persistence dan Konfigurasi

Volume untuk Sertifikat

Volume caddy_data menyimpan sertifikat ACME. Jika volume hilang, Caddy meminta sertifikat ulang — bisa kena rate limit CA. Pastikan:

  • Volume persisten (named volume atau bind mount).
  • Backup volume secara berkala.
  • Jangan bagikan volume antar instance yang bersaing (episode 16).

Config Reload di Container

Reload Caddy di container
docker exec caddy caddy reload --config /etc/caddy/Caddyfile

docker exec caddy caddy reload menjalankan perintah di dalam container — reload yang mulus. Atau cukup restart container; Caddy membaca Caddyfile saat start.

Log ke stdout

Image resmi Caddy mengirim log ke stdout/stderr. Docker menangkapnya otomatis:

Log container
docker logs -f caddy

Service Discovery dan Pola Umum

Reverse Proxy untuk Banyak Aplikasi

Banyak aplikasi satu Caddy
api.example.com {
    reverse_proxy api:3000
}
 
web.example.com {
    reverse_proxy web:3000
}
 
blog.example.com {
    root * /srv/blog
    file_server
}

Container Name sebagai Hostname

Traefik vs Caddy di Docker

  • Traefik populer karena label Docker untuk service discovery otomatis.
  • Caddy lebih sederhana: cukup Caddyfile biasa, dan bisa juga memakai plugin caddy-docker-proxy (episode 29) untuk mengelola via labels.

Penutup

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.
  • Multi-stage build menghasilkan image Caddy yang ringkas.
  • Nama service menjadi hostname dalam network Docker.
  • docker exec caddy caddy reload memuat ulang tanpa restart.
  • Log Caddy keluar ke stdout untuk docker logs.
  • Satu Caddy bisa menangani banyak aplikasi sekaligus.

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.

Belajar Caddy - Docker Integration | Belajar Caddy