Plugin Populer

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-security adalah plugin paling komprehensif untuk autentikasi — mendukung OAuth2 (Google, GitHub, Azure), JWT, LDAP, dan MFA dalam satu plugin.
  • caddy-ratelimit adalah kebutuhan hampir semua API publik — instal dan konfigurasi sebelum deploy ke production.
  • caddy-git sangat berguna untuk static site deployment yang simple tanpa perlu pipeline CI/CD yang kompleks.
  • caddy-l4 membuka 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}
    }
}
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact