Belajar Caddy - Caddy Plugins & Modules
Episode 29 of 31

Belajar Caddy - Caddy Plugins & Modules

Episode ini membahas ekstensibilitas Caddy: sistem modul, plugin populer seperti caddy-dns dan caddy-rate-limit, build kustom dengan xcaddy, serta dasar pengembangan plugin dalam Go.

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

Pendahuluan

Episode 2 memperkenalkan arsitektur modular Caddy. Episode 29 memanfaatkannya secara penuh: plugins. Hampir semua fitur Caddy adalah modul yang bisa diganti atau ditambah, dan komunitas telah membangun ratusan plugin untuk DNS, rate limiting, autentikasi, dan lainnya.

Kalian akan belajar sistem modul Caddy, plugin populer yang wajib dikenal, cara membangun binary kustom dengan xcaddy, serta gambaran dasar pengembangan plugin dalam Go bagi yang tertarik berkontribusi.

Ini episode yang membuat Caddy bisa disesuaikan tanpa batas — dari reverse proxy sederhana hingga edge proxy yang sangat terspesialisasi.

Sistem Modul Caddy

Core, Standard, dan Third-Party

Modul Caddy terbagi dalam kategori:

  • Core: bagian inti yang tidak bisa dihilangkan.
  • Standard: modul bawaan pada build default.
  • Third-party: modul komunitas yang perlu ditambahkan lewat build kustom.

caddy list-modules menampilkan semua modul yang tersedia di binary:

Daftar modul
caddy list-modules

Setiap modul punya tipe dan nama, misalnya http.handlers.reverse_proxy. Ini membantu memahami struktur saat menulis konfigurasi JSON.

Arsitektur Plugin

Plugin mengimplementasikan interface tertentu:

  • Handler: memproses request (http.handlers.*).
  • Matcher: mencocokkan request (http.matchers.*).
  • DNS provider: menyelesaikan DNS challenge (dns.providers.*).
  • Storage: backend penyimpanan sertifikat.

Plugin ter-registrasi saat compile. Menambahkan plugin berarti membangun ulang binary Caddy — di sinilah xcaddy berperan.

Plugin Populer

caddy-dns dan Rate Limiting

Beberapa plugin yang paling sering dipakai:

  • caddy-dns/cloudflare: DNS challenge untuk Cloudflare (episode 9).
  • caddy-rate-limit: rate limiting per IP atau endpoint (episode 19).
  • caddy-security: suite autentikasi, GeoIP, dan CORS.
  • caddy-git: auto-deploy dari repository Git.
  • caddy-docker-proxy: kelola Caddy dari label Docker.
  • caddy-cloudflare: integrasi penuh dengan Cloudflare.

Contoh plugin rate limit sudah kita lihat di episode 19. Tema bersama: menambah kemampuan yang tidak ada di build default.

Memilih Plugin

Sebelum menambah plugin:

  • Cek apakah fitur sudah ada di modul standar.
  • Pastikan plugin dipelihara aktif dan kompatibel dengan versi Caddy.
  • Perhatikan lisensi dan reputasi pengembang.

Plugin adalah kode yang berjalan di edge — pilih dengan hati-hati.

Build Kustom dengan xcaddy

Menginstall xcaddy

xcaddy adalah tool resmi untuk membangun Caddy dengan plugin:

Install xcaddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

xcaddy membutuhkan Go terinstall. go install ...@latest menempatkan binary xcaddy di $GOBIN.

Membangun dengan Plugin

Perintah dasarnya:

Build dengan satu plugin
xcaddy build v2.8.0 \
  --with github.com/caddy-dns/cloudflare

xcaddy build v2.8.0 membangun Caddy versi spesifik dengan plugin yang ditentukan. Jika versi tidak ditulis, versi terbaru dipakai.

Banyak Plugin dan Versi Spesifik

Gabungkan beberapa plugin dan kunci versinya:

Build dengan banyak plugin
xcaddy build \
  --with github.com/caddy-dns/cloudflare \
  --with github.com/mholt/caddy-l4 \
  --with github.com/caddyserver/caddy/v2@v2.8.0

--with module@version memungkinkan penentuan versi modul. Simpan perintah build ini di dokumentasi atau script — build harus bisa direproduksi.

Memverifikasi Build

Setelah build selesai, binary bernama caddy berada di direktori kerja. Verifikasi:

Verifikasi modul ter-compile
./caddy list-modules | grep dns.providers

./caddy list-modules | grep dns.providers memastikan modul DNS ter-compile. Ganti binary sistem dengan hasil build ini, dan jalankan seperti biasa.

Plugin Development

Dasar Plugin dalam Go

Untuk menulis plugin sendiri, kalian membuat module Go yang mengimplementasikan interface Caddy:

Struktur dasar plugin
package main
 
import "github.com/caddyserver/caddy/v2"
 
type myHandler struct{}
 
func (m *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) error {
    // logika handler
    return nil
}
 
func init() {
    caddy.RegisterModule(myHandler{})
}
 
func main() {
    caddycmd.Main()
}

Plugin diregistrasi lewat init() dengan caddy.RegisterModule. Struktur lengkap mencakup interface CaddyModule, Provision, dan Validate.

HTTP Handler dan Caddyfile Unmarshal

Plugin handler yang baik juga mendukung Caddyfile:

Unmarshal Caddyfile
func (m *myHandler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
    for d.Next() {
        if !d.NextArg() {
            return d.ArgErr()
        }
        m.option = d.Val()
    }
    return nil
}

UnmarshalCaddyfile membaca argumen dari Caddyfile. Dengan metode ini, plugin kalian bisa dipakai lewat Caddyfile biasa, bukan hanya JSON.

Registrasi dan Pembangunan

  1. Buat modul Go dengan plugin.
  2. Build bersama Caddy menggunakan xcaddy dengan --with menunjuk ke repositori kalian.
  3. Uji plugin dengan caddy run dan caddy list-modules.

Penutup

Episode 29 membuka ekstensibilitas Caddy: sistem modul dengan kategori core, standard, dan third-party, plugin populer seperti caddy-dns dan caddy-rate-limit, build kustom dengan xcaddy, serta dasar pengembangan plugin Go dengan registrasi dan unmarshal Caddyfile.

Inti yang harus dibawa pulang:

  • Semua fitur Caddy adalah modul; plugin menambah kemampuan.
  • caddy list-modules menampilkan modul yang ter-compile.
  • xcaddy build --with module membuat binary kustom.
  • Plugin harus kompatibel dengan versi Caddy.
  • Plugin ditulis dalam Go dan diregistrasi via RegisterModule.
  • Verifikasi build dengan list-modules | grep setelah selesai.

Di episode 30 selanjutnya — episode terakhir series — kita akan membahas production deployment & best practices — pre-production checklist, praktik terbaik Caddyfile, security hardening, performance tuning, operasional dengan graceful reload, high availability, common pitfalls, troubleshooting, dan migration dari NGINX.

Belajar Caddy - Caddy Plugins & Modules | Belajar Caddy