Dipublikasikan 23 Agustus 2026
Mengelola traffic ke banyak layanan di backend menjadi tantangan ketika setiap aplikasi berjalan di port berbeda. Reverse proxy hadir sebagai solusi untuk merutekan traffic berdasarkan domain atau path, menangani SSL termination, dan memberikan lapisan keamanan tambahan. Di tahun 2026, Caddy semakin populer di kalangan developer karena kemampuan HTTPS otomatis dan konfigurasi yang minimalis. Artikel ini akan membimbingmu setup reverse proxy production menggunakan Caddy dan Docker Compose.
Caddy adalah web server open source yang ditulis dalam Go. Keunggulan utamanya adalah automatic HTTPS: Caddy secara otomatis memprovisikan dan memperbarui sertifikat Let us Encrypt tanpa konfigurasi manual. Nerd Level Tech menjelaskan bahwa Caddy 2.11.2 menawarkan fitur zero-downtime reload, security headers bawaan, dan dukungan HTTP/3.
Dibandingkan dengan Nginx atau Traefik, Caddy memiliki learning curve yang lebih landai untuk kasus sederhana. Satu file Caddyfile yang readable bisa menggantikan puluhan baris konfigurasi Nginx. Untuk deployment Docker Compose, Caddy juga sangat cocok karena bisa membaca label dari container secara dinamis.
Siapkan server dengan Docker Engine 24.0 atau lebih baru. Pastikan port 80 dan 443 terbuka di firewall. Kamu juga memerlukan domain yang sudah diarahkan ke IP server melalui DNS record A. Tanpa domain, fitur automatic HTTPS tidak akan berfungsi karena Let us Encrypt memerlukan validasi domain.
Buat direktori proyek dan struktur file berikut:
mkdir -p ~/caddy-proxy/caddy
cd ~/caddy-proxy
touch compose.yaml caddy/Caddyfile .envBuat file caddy/Caddyfile dengan konten berikut:
{
auto_https off
}
api.example.com {
reverse_proxy api:80
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Referrer-Policy "strict-origin-when-cross-origin"
}
}
app.example.com {
reverse_proxy app:80
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
}
}Snippet (security-headers) bisa didefinisikan sekali dan digunakan berulang kali di berbagai site block. Ini mengurangi duplikasi dan memastikan setiap aplikasi mendapatkan headers keamanan yang sama.
Setelah semua file siap, jalankan stack:
docker compose up -dPeriksa log untuk memastikan Caddy berjalan tanpa error:
docker compose logs -f caddyJika konfigurasi valid, Caddy akan mulai mendengarkan pada port 80 dan 443. Untuk reload konfigurasi tanpa downtime, gunakan perintah:
docker compose exec caddy caddy reloadPerintah ini membaca ulang Caddyfile tanpa mematikan proses yang sedang berjalan, sehingga tidak ada request yang terputus.
Untuk production, aktifkan automatic HTTPS dengan menghapus baris auto_https off dari Caddyfile. Caddy akan secara otomatis:
Memvalidasi kepemilikan domain melalui HTTP challenge
Memprovisikan sertifikat SSL dari Let us Encrypt
Memperbarui sertifikat sebelum masa berlaku habis
Meneruskan semua traffic HTTP ke HTTPS
Jika kamu menggunakan Cloudflare, build image Caddy kustom dengan plugin Cloudflare DNS:
FROM caddy:2.11.2-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/cloudflare
FROM caddy:2.11.2-alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddyWildcard certificate memungkinkan satu sertifikat untuk semua subdomain, mengurangi overhead manajemen sertifikat.
Headers keamanan adalah lapisan pertahanan pertama melawan serangan umum seperti clickjacking dan MIME sniffing. Caddy memudahkan penambahan headers ini melalui blok header di Caddyfile. Selain headers yang sudah disebutkan, pertimbangkan untuk menambahkan Content Security Policy (CSP) yang sesuai dengan kebutuhan aplikasimu.
Untuk melindungi admin API Caddy pada port 2019, batasi akses hanya dari localhost atau network internal. Jangan expose port 2019 ke internet tanpa autentikasi. Gunakan juga rate limiting di level aplikasi untuk mencegah abuse pada endpoint publik.
Caddy menawarkan solusi reverse proxy yang elegan dengan konfigurasi minimal dan HTTPS otomatis. Integrasi dengan Docker Compose membuat deployment menjadi reproducible dan mudah dikelola. Untuk tim kecil atau individu yang menjalankan banyak layanan di satu VPS, Caddy adalah pilihan yang efisien. Dokumentasi lengkap tersedia di situs resmi Caddy dan panduan Docker Traefik jika kamu membutuhkan alternatif.
Caddy menyediakan endpoint metrics Prometheus bawaan yang bisa diaktifkan untuk monitoring. Tambahkan blok berikut di Caddyfile untuk mengaktifkan metrics:
{
metrics
}Endpoint /metrics akan tersedia dan bisa di-scrape oleh Prometheus. Untuk logging, Caddy secara default menulis access log ke stdout yang bisa dilihat melalui docker compose logs.
Jika Caddy tidak bisa memperoleh sertifikat, periksa apakah port 80 bisa diakses dari internet dan DNS record sudah benar. Let us Encrypt HTTP challenge memerlukan akses ke port 80 untuk validasi domain. Gunakan mode staging Let us Encrypt saat testing untuk menghindari rate limit.
Buka file compose.yaml dan tambahkan definisi service Caddy serta aplikasi backend:
services:
caddy:
image: caddy:2.11.2-alpine
restart: unless-stopped
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./caddy:/etc/caddy
- caddy_data:/data
- caddy_settings:/config
networks:
- edge
api:
image: traefik/whoami:latest
restart: unless-stopped
networks:
- edge
app:
image: traefik/whoami:latest
restart: unless-stopped
networks:
- edge
volumes:
caddy_data:
caddy_settings:
networks:
edge:
driver: bridgePerhatikan bahwa kita memasang direktori ./caddy ke path Caddy di container. Ini penting agar perubahan setup bisa dibaca tanpa recreate container.
Selain reverse proxy, Caddy juga bisa berfungsi sebagai file server, load balancer, dan API gateway. Kemampuan plugin yang ekstensif memungkinkan integrasi dengan berbagai authentication provider dan storage backend. Ekosistem Caddy terus berkembang pesat seiring dengan meningkatnya adopsi containerization di kalangan developer indie dan startup.
Deploy reverse proxy yang handal tidak lagi memerlukan setup yang rumit. Dengan Caddy dan Docker Compose, kamu bisa fokus pada pengembangan aplikasi daripada memikirkan infrastruktur jaringan.
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu