Kali ini saya ingin mencoba mencontohkan install Caddy sebagai reverse proxy dan memberikan Trusted SSL HTTPS menggunakan DNS Challenge Cloudflare secara otomatis untuk docker container menggunakan label.
Prerequisites
- Docker & Docker Compose
- Domain TLD Aktif.
- Akun dan API DNS Token Cloudflare.
Install Caddy Dengan Docker Compose
Contoh simple docker-compose untuk deploy Caddy
version: "3.3"
services:
caddy:
container_name: caddy
image: homeall/caddy-reverse-proxy-cloudflare:latest
restart: unless-stopped
environment:
- TZ=Asia/Jakarta
- CADDY_INGRESS_NETWORKS=caddy
- CF_API_TOKEN=TOKEN_API_CLOUDFLARE_ANDA
networks:
- caddy
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./caddy-data:/data"
ports:
- "80:80"
- "443:443"
labels:
caddy.email: [email protected]
caddy.acme_dns: "cloudflare {env.CF_API_TOKEN}"
networks:
caddy:
external: true
Docker image yang digunakan adalah Build yang sudah ter install plugin Caddy :
— github.com/lucaslorentz/caddy-docker-proxy/v2 plugin ini yang dapat menjadikan reverse proxy untuk docker container via label.
— github.com/caddy-dns/cloudflare plugin ini dibutuhkan untuk DNS-Challenge jika menggunakan Cloudflare.
Docker Image Github : https://github.com/homeall/caddy-reverse-proxy-cloudflare.
Deploy Contoh Container Whoami
version: '3.7'
services:
whoami:
image: traefik/whoami
networks:
- caddy
labels:
caddy: whoami.example.modalsemangat.com
caddy.reverse_proxy: "{{upstreams 80}}"
# caddy.tls.ca: "https://acme.zerossl.com/v2/DV90" # Jika lebih prefer ke ZeroSSL. Default nya Let's Encrypt.
caddy.tls.ca: "https://acme-staging-v02.api.letsencrypt.org/directory" # Diperlukan untuk testing, hapus jika sudah selesai.
networks:
caddy:
external: true
Dengan menggunakan label tersebut plugin github.com/lucaslorentz/caddy-docker-proxy/v2 akan scan metadata docker di docker network “caddy” mencari label yang mengindikasikan services container tersebut akan di kelola oleh Caddy. Kemudian, akan generate Caddyfile dengan site entries dan mengarahkan ke masing-masing services docker dengan nama DNS atau IP containernya. Setiap parameter container docker berubah, plugin ini update Caddyfile dan trigger Caddy untuk reload tanpa downtime.
Untuk format Labels untuk parameter lain bisa lihat di Labels-To-CaddyFile-Conversion.
Dan plugin github.com/caddy-dns/cloudflare akan melakukan generate TLS Certificate menggunakan defaultnya Let’s Encrypt dengan metode DNS-Challenge. Jadi dengan plugin caddy ini Anda tidak perlu expose port services Caddy ke cloud internet. Anda bisa gunakan untuk generate otomatis Trusted HTTPS untuk akses server-server Web local Anda.