Caddy itu Mudah

Pertempuran web server semakin sengit ketika beberapa waktu lalu core nginx developer mengumumkan kalau dia mau membuat fork . Padahal web server sendiri selain nginx masih ada banyak, ya tapi mari kita lupakan itu.
Alasan mencoba Caddy
Ingin saja, hehe.
Beberapa waktu lalu rekan di salah satu media sosial saya mengeluhkan bahwa dia lupa memperbarui sertifikat Let’s Encrypt nya, padahal menggunakan nginx. Setahu saya, nginx punya modul/plugin untuk memperbarui sertifikat ini secara otomatis.
Dari situ saya teringat ada salah satu web server yang fitur utamanya adalah ssl otomatis, yaitu Caddy.
Bagi kamu yang suka self host homelab apapun itu, pasti bingung ketika memilih web server (atau tidak dan langsung mengikuti konfigurasi orang lain dengan nginx/apache).
Saya contohnya, selalu berusaha untuk meminimalisir penggunaan memori pada raspberry pi saya yang menuntun saya pada lighttpd. Namun setelah beberapa waktu menggunakan lighttpd dan saya merasa sedikit kesusahan melakukan konfigurasi, saya memutuskan untuk mencoba web server lain.
Caddy itu Human Friendly
Saya sendiri sudah pernah menggunakan web server Apache, nginx, dan terakhir lighttpd, dan saya bisa bilang (menurut saya) Apache itu yang paling mudah dimengerti, tapi sayang modul nya banyak dan itu yang membuat saya mumet. Tidak perlu dijelaskan ya kalau yang paling pusing itu nginx.
Se Human Friendly apa sih Caddy?
- Otomatis mendaftarkan dan memperbarui sertifikat TLS yang sudah kita atur di Caddy.
- Caddyfile, sebuah konfigurasi yang ramah bahasa manusia (misal mau
reverse proxy? Tinggal 1 baris
reverse_proxy <host>:<port>
)
Saya kira 2 alasan tadi sudah bisa membuatmu berubah pikiran untuk mencoba Caddy. Memang jika dibandingkan dengan nginx, Caddy tidak memiliki banyak resource bantuan atau konfigurasi, namun dokumentasi dari website Caddy dan mudahnya bahasa Caddyfile membuat konfigurasinya tidak begitu susah.
Pemasangan Caddy
Kalian bisa menggunakan manajemen paket yang disediakan distro (yang mana hanya memiliki modul default) atau kamu bisa mengunduh binary dari website Caddy jika membutuhkan modul eksternal. Atau jika kamu mau repot, kamu juga bisa mem-build dari source.
Misalnya kamu membutuhkan modul webdav, maka kamu bisa membuka website caddy, pilih platform, kemudian cari modul yang dibutuhkan (kali ini webdav) dan tinggal pencet tombol download di kanan atas.

Sisanya terserah kalian mau menyimpan binary ini dimana dan mau dijalankan darimana, tentu website caddy sudah memberikan tutorial bagaimana cara pemasangannya.
{{< callout emoji=“💡” >}}
Cukup gunakan perintah caddy update
untuk mengunduh
versi terbaru custom build Caddy tanpa harus menuju web diatas.
{{< /callout >}}
Contoh use-case
Masih tidak percaya bahwa caddy itu mudah untuk dikonfigurasi? saya akan coba memberikan contoh use-case dari pengalaman saya menggunakan caddy dengan cloudflare tunnel (karena saya tidak memiliki public ip). Disini saya akan berpatokan dengan file asli dari Caddyfile, yang kurang lebih isinya seperti berikut:
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
isi Caddyfile bawaan
{{< callout emoji=“💡” >}}
Kamu bisa gunakan perintah caddy fmt --overwrite
setelah
mengubah file Caddyfile agar formatnya menjadi konsisten. Alias, kamu
bisa dengan seenaknya mengubah Caddyfile dan viola, rapi.
{{< /callout >}}
reverse-proxy
Contoh saya memiliki layanan vaultwarden, yang berjalan pada port 8001. Maka saya tinggal mengubah skrip diatas (akan saya perpendek) menjadi seperti berikut:
:80 {
root * /usr/share/caddy
file_server
# Vaultwarden
reverse_proxy localhost:8001
}
Sub-path
Jika menginginkan masuk ke dalam sub-path, mungkin ada yang perlu kamu perhatikan terlebih dahulu. Misalnya “apakah aplikasi web tersebut support untuk dimasukkan kedalam sub path?” karena pada dasarnya semua aplikasi web beranggapan bahwa dia akan dijalankan dari root folder. Karena vaultwarden support (tentunya kamu sudah mengubah konfigurasi pada vaultwarden), jadi kurang lebih bisa kamu ubah seperti ini:
:80 {
root * /usr/share/caddy
file_server
# Vaultwarden
redir /vault /vault/ # redirect dari "tanpa trailing slash" menjadi "trailing slash"
handle /vault/* { # handle khusus untuk sub path /vault/
reverse_proxy localhost:8001
}
}
vaultwarden pada subpath /vault/
Mengingatkan kembali bahwa aplikasi web biasanya beranggapan bahwa dirinya akan dijalankan / dipanggil dari root folder, kamu bisa membaca penjelasan lengkapnya disini:
The “subfolder problem”, OR, “why can’t I reverse proxy my app into a subfolder?”
Static File
Misalnya kamu mau serve
halaman yang dibuat dengan
menggunakan Hugo yang kamu simpan di
/var/www/myblog/public
, maka tinggal menggunakan
konfigurasi seperti berikut :
:80 {
root * /var/www/myblog/public
file_server
}
serving static page caddy
PHP-FPM
Meski Caddy mempromosikan salah satu alternatif PHP yaitu FrankenPHP, tetapi bagi kamu yang ingin vanilla PHP bisa menggunakan sintaks seperti berikut:
:80 {
# where our files are stored
root * /var/www/phpblog
# masukkan lokasi php-fpm socket, meskipun pada konfig aslinya dicontohkan menggunakan port seperti biasa
php_fastcgi /run/php/php8.2-fpm.sock
file_server
encode gzip
}
php-fpm dengan sock
Gimana? gampang bukan? manusiawi bukan?