Plugin Populer #
Ekosistem plugin Caddy terus berkembang. Ada ratusan plugin tersedia di GitHub, mulai dari integrasi dengan DNS provider untuk wildcard certificate, sampai autentikasi penuh dengan OAuth dan LDAP. Berikut adalah plugin-plugin yang paling populer dan sering digunakan di production.
Daftar Plugin yang Dibahas #
Plugin Fungsi
────────────────────────────────────────────────────────────────────────
caddy-security Autentikasi lengkap: OAuth, JWT, LDAP, MFA
caddy-ratelimit Rate limiting per IP, user, endpoint
cache-handler HTTP caching layer di Caddy
crowdsec-bouncer-traefik-plugin CrowdSec integration untuk threat intelligence
caddy-git Auto-deploy dari Git repository
caddy-transform-encoder Transform log fields
caddy-yaml Konfigurasi Caddy dalam format YAML
caddy-l4 Layer 4 (TCP/UDP) proxy
caddy-security — Autentikasi Lengkap #
Plugin paling powerful untuk kebutuhan autentikasi dan otorisasi:
xcaddy build \
--with github.com/greenpau/caddy-security
{
security {
# Konfigurasi OAuth2 dengan GitHub
oauth identity provider github {
realm github
driver github
client_id {env.GITHUB_CLIENT_ID}
client_secret {env.GITHUB_CLIENT_SECRET}
scopes user
}
# Portal autentikasi
authentication portal myportal {
crypto default token lifetime 3600
cookie domain example.com
ui {
links {
"My Dashboard" /dashboard
"Logout" /auth/logout
}
}
transform user {
match realm github
action add role authp/user
}
}
# Policy otorisasi
authorization policy admin_policy {
set auth url /auth
allow roles authp/admin authp/user
}
}
}
auth.example.com {
route {
authenticate with myportal
}
}
app.example.com {
route {
authorize with admin_policy
reverse_proxy backend:3000
}
}
caddy-ratelimit — Rate Limiting #
xcaddy build \
--with github.com/mholt/caddy-ratelimit
api.example.com {
rate_limit {
zone api_zone {
key {remote_host}
window 1m
events 100
}
}
rate_limit {
zone login_zone {
key {remote_host}
window 15m
events 5
}
}
handle /auth/login {
rate_limit {
zone login_zone
}
reverse_proxy auth-service:8080
}
reverse_proxy backend:3000
}
cache-handler — HTTP Caching #
xcaddy build \
--with github.com/caddyserver/cache-handler
example.com {
cache {
# Simpan cache di memori
allowed_http_verbs GET HEAD
# Cache selama 5 menit untuk response 200
ttl 5m
# Hanya cache response dengan status tertentu
default_cache_control "public, max-age=300"
# Stale-while-revalidate
stale 1m
}
reverse_proxy backend:3000
}
caddy-git — Auto-Deploy dari Git #
Plugin ini memantau repository Git dan otomatis pull perubahan saat ada commit baru:
xcaddy build \
--with github.com/WingLim/caddy-git
example.com {
git {
# Repository yang dipantau
repo https://github.com/username/my-website
branch main
# Direktori lokal tujuan clone
path /var/www/html
# Interval polling (atau gunakan webhook)
interval 5m
# Command yang dijalankan setelah pull berhasil
then "npm run build"
then_env "NODE_ENV=production"
}
file_server { root /var/www/html/dist }
}
caddy-l4 — Layer 4 Proxy (TCP/UDP) #
Untuk proxy TCP/UDP tanpa HTTP — berguna untuk database, game server, atau protokol kustom:
xcaddy build \
--with github.com/mholt/caddy-l4
{
layer4 {
# Proxy MySQL ke backend
0.0.0.0:3306 {
route {
proxy {
upstream mysql-backend:3306
}
}
}
# Proxy PostgreSQL
0.0.0.0:5432 {
route {
proxy {
upstream postgres-backend:5432
}
}
}
# TLS termination untuk TCP
0.0.0.0:9443 {
route {
tls
proxy {
upstream internal-service:9000
}
}
}
}
}
caddy-yaml — Konfigurasi dalam YAML #
Jika tim kamu lebih familiar dengan YAML:
xcaddy build \
--with github.com/abiosoft/caddy-yaml
# /etc/caddy/caddy.yaml
apps:
http:
servers:
srv0:
listen:
- ":443"
- ":80"
routes:
- match:
- host:
- example.com
handle:
- handler: subroute
routes:
- handle:
- handler: reverse_proxy
upstreams:
- dial: "backend:3000"
# Jalankan dengan config YAML
caddy run --config /etc/caddy/caddy.yaml --adapter yaml
crowdsec-caddy-bouncer — Threat Intelligence #
Integrasi dengan CrowdSec untuk memblokir IP bermasalah berdasarkan komunitas threat intelligence:
xcaddy build \
--with github.com/hslatman/caddy-crowdsec-bouncer/http
{
crowdsec {
api_url http://localhost:8080
api_key {env.CROWDSEC_API_KEY}
# Ticker untuk update daftar IP yang diblokir
ticker_interval 10s
}
}
example.com {
crowdsec
reverse_proxy backend:3000
}
Menemukan Plugin Lain #
# Cari plugin di GitHub
# https://github.com/search?q=caddy+plugin&type=repositories
# Caddy community forum
# https://caddy.community/
# Awesome Caddy list
# https://github.com/ebsarr/awesome-caddy
# Cek apakah plugin aktif dipelihara sebelum menggunakannya:
# - Kapan commit terakhir? (> 1 tahun: waspadai)
# - Apakah ada open issues yang tidak ditangani?
# - Berapa bintang/fork? (indikator popularitas)
# - Apakah mendukung versi Caddy yang kamu gunakan?
Memilih dan Mengevaluasi Plugin #
Checklist sebelum menggunakan plugin:
Keamanan:
□ Plugin dari sumber yang terpercaya?
□ Ada security disclosure history?
□ Apakah code bisa diaudit?
□ Apakah ada known vulnerabilities?
Kualitas:
□ Aktif dipelihara (commit terbaru < 6 bulan)?
□ Ada tests yang cukup?
□ Dokumentasi yang baik?
□ Kompatibel dengan versi Caddy yang digunakan?
Operasional:
□ Sudah ditest di staging sebelum production?
□ Apakah ada fallback jika plugin gagal?
□ Dampak terhadap performa sudah diukur?
□ Ada monitoring untuk memastikan plugin berjalan?
Ringkasan #
caddy-securityadalah plugin paling komprehensif untuk autentikasi — mendukung OAuth2 (Google, GitHub, Azure), JWT, LDAP, dan MFA dalam satu plugin.caddy-ratelimitadalah kebutuhan hampir semua API publik — instal dan konfigurasi sebelum deploy ke production.caddy-gitsangat berguna untuk static site deployment yang simple tanpa perlu pipeline CI/CD yang kompleks.caddy-l4membuka kemungkinan menggunakan Caddy sebagai proxy untuk protokol non-HTTP seperti MySQL, PostgreSQL, atau protokol kustom.- Selalu evaluasi plugin sebelum digunakan di production — cek tanggal commit terakhir, jumlah issues, dan apakah plugin aktif dipelihara.
- Pertimbangkan dependency risk — semakin banyak plugin, semakin kompleks binary dan semakin banyak kemungkinan konflik atau vulnerability yang perlu dipantau.
← Sebelumnya: xcaddy Berikutnya: Caddy DNS →
caddy-transform-encoder — Log Transformation #
Untuk mengubah format log agar kompatibel dengan sistem yang sudah ada:
xcaddy build \
--with github.com/caddyserver/transform-encoder
example.com {
log {
output file /var/log/caddy/access.log
# Transform log ke format yang kompatibel dengan parser lain
format transform `{request.remote_ip} - - [{ts}] "{request.method} {request.uri} {request.proto}" {status} {size} "{request.headers.Referer>" "{request.headers.User-Agent}"` {
time_format "02/Jan/2006:15:04:05 -0700"
}
}
file_server
}
Plugin untuk Otentikasi JWT #
xcaddy build \
--with github.com/ggicci/caddy-jwt
api.example.com {
jwtauth {
# Public key untuk verifikasi JWT
sign_key {env.JWT_PUBLIC_KEY}
sign_algorithm RS256
# Claim yang harus ada di token
from_header Authorization
header_prefix "Bearer "
# User info diekstrak dan dijadikan variable
user_claims sub
meta_claims email
}
# Setelah autentikasi, {http.auth.user.id} tersedia
reverse_proxy backend:3000 {
header_up X-User-ID {http.auth.user.id}
}
}