Episode ini membedah arsitektur Caddy: HTTP server core, sistem modul, admin API, dan storage layer. Kalian juga belajar alur request, struktur Caddyfile, konsep site address, directive, matcher, dan handler, serta empat metode konfigurasi.

Sekarang kalian sudah tahu mengapa Caddy ada. Episode 2 membawa kalian satu tingkat lebih dalam: memahami arsitektur dan core concepts yang menjadi dasar semua konfigurasi. Kalau kalian paham bahwa directive adalah aksi dan matcher adalah kriteria, maka membaca Caddyfile orang lain akan terasa seperti membaca bahasa yang sudah dikenal.
Caddy dibangun sebagai kumpulan modul yang berjalan di atas sebuah inti kecil. Arsitektur ini membuat Caddy mudah diperluas — hampir semua fitur, dari TLS sampai reverse proxy, adalah modul yang bisa diganti atau ditambah. Pemahaman ini juga yang membuat kalian bisa memakai fitur caddy list-modules dengan percaya diri.
Episode 2 mencakup komponen arsitektur, struktur Caddyfile, alur request, dan keempat metode konfigurasi yang tersedia. Tidak perlu menghafal semua istilah — yang penting kalian paham pola pikirnya.
Arsitektur Caddy terdiri dari beberapa lapisan:
Setiap modul memiliki tipe dan nama. Ketika kalian menjalankan caddy list-modules, daftar panjang itu adalah semua modul yang ter-compile di binary kalian.
Caddy menyimpan sertifikat dan kunci di dalam storage, secara default di $XDG_DATA_HOME/caddy pada Linux. Konsep storage ini penting karena:
Kita akan membahas storage mendalam di episode 7 dan 10.
Caddyfile tersusun dari global options di bagian atas dan site blocks di bawahnya. Sebuah site block dibuka dengan alamat situs dan di dalamnya berisi directive:
example.com {
root * /var/www
encode gzip
file_server
}example.com menentukan domain yang dilayani.root, encode, file_server adalah aksi yang dieksekusi berurutan.email dan admin ditulis di luar site block.Directive bisa dibatasi dengan matcher — kriteria yang menentukan request mana yang diproses. Ada dua bentuk:
@api { path /api/* } atau header Content-Type application/json.@, lalu dipakai ulang di beberapa directive.Snippet adalah blok bernama yang bisa disisipkan ke banyak situs — analog dengan macro atau include:
(common) {
encode gzip zstd
header {
X-Frame-Options DENY
}
}
site-a.example.com {
import common
root * /var/www/a
file_server
}Snippet ditandai dengan tanda kurung di nama, dan dipanggil memakai directive import. Ini membuat konfigurasi yang berulang tetap DRY.
Saat sebuah request tiba, Caddy menjalankan alur yang terstruktur:
Urutan directive penting: misalnya redir harus ditulis sebelum file_server agar redirect menangkap request lebih dulu. Kita akan membahas urutan dan penempatan di episode 4 dan 13.
localhost:8080.Satu directive bisa memetakan ke satu atau lebih handler, dan satu handler bisa dipakai banyak directive.
Caddy menerima konfigurasi lewat empat jalur:
:2019 untuk memuat dan mengubah konfigurasi saat runtime.Perintah caddy adapt menunjukkan JSON hasil konversi Caddyfile:
caddy adapt --config CaddyfileDan JSON bisa dimuat langsung lewat admin API:
curl -X POST -H 'Content-Type: application/json' \
-d @config.json http://localhost:2019/loadcurl -X POST ... -d @config.json adalah cara memuat konfigurasi dinamis. Admin API ini akan kita bedah menyeluruh di episode 23.
Episode 2 memperkenalkan fondasi konseptual Caddy: arsitektur modular dengan HTTP core, TLS management, reverse proxy engine, admin API, dan storage layer; struktur Caddyfile dengan site block, directive, matcher, named matcher, dan snippet; alur request dari listener sampai respons; serta empat metode konfigurasi.
Inti yang harus dibawa pulang:
Di episode 3 selanjutnya kita akan menginstall Caddy secara lengkap — dari package manager resmi, binary download, Docker, hingga build dari source — dan menjalankan first run untuk memastikan semuanya bekerja sebelum masuk ke materi Caddyfile.