Belajar Caddy - Production Deployment & Best Practices
Episode 30 of 31

Belajar Caddy - Production Deployment & Best Practices

Episode terakhir ini merangkum kesiapan produksi: pre-production checklist, praktik terbaik Caddyfile, security hardening, performance tuning, operasional dengan graceful reload, high availability, common pitfalls, troubleshooting, dan migration dari NGINX.

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

Pendahuluan

Selamat — kalian sampai di episode terakhir! Selama 30 episode kalian telah belajar konsep, instalasi, Caddyfile, HTTPS otomatis, reverse proxy, load balancing, keamanan, Docker, Kubernetes, hingga plugin. Episode 30 menyatukan semuanya menjadi satu: cara men-deploy Caddy ke produksi dengan benar.

Pre-Production Checklist

Sebelum Go-Live

  • HTTPS aktif dan teruji untuk semua domain.
  • Renewal otomatis berjalan — cek storage sertifikat.
  • Log terkonfigurasi dan terkirim ke sistem agregasi.
  • Monitoring terpasang — health endpoint dan metrics.
  • Health checks aktif untuk semua backend.
  • Security headers diterapkan.
  • Backup sertifikat dan konfigurasi tersedia.
  • Disaster recovery plan teruji.
Validasi sebelum deploy
caddy version
caddy validate --config Caddyfile

caddy validate --config Caddyfile memeriksa konfigurasi sebelum dipakai. Jalankan di setiap perubahan — mencegah kesalahan yang menurunkan produksi.

Praktik Terbaik Caddyfile

Snippet, Env Vars, dan Version Control

  • Gunakan snippet untuk konfigurasi berulang (episode 2).
  • Simpan secret di environment variables, bukan di file (episode 4).
  • Atur global options dengan benar di bagian atas.
  • Beri nama yang jelas pada matcher dan snippet.
  • Komentari logika yang rumit.
  • Simpan Caddyfile di Git.
  • Selalu validate sebelum deploy.
Caddyfile produksi
{
    email admin@example.com
    admin 127.0.0.1:2019
}
 
(common) {
    encode zstd gzip
    header {
        X-Content-Type-Options nosniff
        X-Frame-Options DENY
        -Server
    }
}
 
example.com {
    import common
    root * /var/www
    try_files {path} /index.html
    file_server
}
 
api.example.com {
    import common
    reverse_proxy {
        to api-1:3000 api-2:3000
        lb_policy round_robin
        health_uri /healthz
        health_interval 10s
    }
}

Security Hardening

Memperkuat Sistem

  • Jalankan Caddy sebagai non-root user — package installer sudah melakukannya.
  • Batasi file permissions pada Caddyfile dan kunci privat.
  • Jaga admin API tetap di localhost.
  • Setel firewall hanya membuka port yang dibutuhkan.
  • Update Caddy secara rutin.
  • Pasang security headers di semua situs.
  • TLS 1.3 sebagai default.
  • Matikan fitur yang tidak dipakai.
  • Gunakan secret management untuk kredensial.
Cek header keamanan
curl -I https://example.com

Performance Tuning

Optimasi untuk Beban

  • Aktifkan encode zstd gzip.
  • Atur Cache-Control untuk aset statis.
  • Biarkan HTTP/2 dan HTTP/3 aktif.
  • Sesuaikan timeouts koneksi.
  • Tuning load balancer dengan health check.
  • Batasi resource via systemd atau Docker.
systemd resource limit
[Service]
MemoryMax=512M
CPUWeight=100
Restart=on-failure

Operasional Sehari-hari

Graceful Reload dan Deployment

Reload konfigurasi
caddy reload --config Caddyfile

Rotasi Log dan Alerting

  • Rotasi log di server lokal (episode 22).
  • Alert ketika health check gagal atau sertifikat mendekati kedaluwarsa.

High Availability

Menghindari Single Point of Failure

  • Jalankan beberapa instance Caddy.
  • Letakkan load balancer eksternal di depan.
  • Gunakan DNS-based failover atau VRRP.
  • Bagikan storage sertifikat antar instance.
  • Sinkronkan konfigurasi semua instance.

Common Pitfalls

Kesalahan yang Sering Terjadi

  • Port 80/443 tidak terbuka — HTTPS gagal.
  • DNS belum menunjuk ke server — issuance ACME gagal.
  • Permission storage salah — sertifikat tidak bisa ditulis.
  • Localhost di produksi — tidak ada HTTPS otomatis.
  • Matcher salah — routing tidak sesuai harapan.

Troubleshooting dan Migrasi

Alur Diagnostik

  1. Baca log error dan access.
  2. Jalankan caddy validate pada Caddyfile.
  3. Coba caddy run di foreground dengan --debug.
  4. Cek status sertifikat via admin API.
  5. Verifikasi DNS dengan dig atau nslookup.
  6. Uji dengan curl dan openssl s_client.
  7. Cek port terbuka dengan ss -tlnp.
  8. Periksa file permissions.

Migrasi dari NGINX dan Apache

  • HTTPS manual → hapus blok sertifikat, biarkan Caddy otomatis.
  • server blocks / virtual host → ubah menjadi site blocks.
  • location blocks → ganti dengan handle + matcher.
  • try_files → sintaks Caddy serupa, tanpa $.
  • upstream → tulis backend langsung di reverse_proxy.

Penutup

Episode 30 menutup series dengan kesiapan produksi: pre-production checklist, praktik terbaik Caddyfile dengan snippet dan env vars, security hardening, performance tuning, operasional dengan caddy reload, high availability, common pitfalls, alur troubleshooting, dan panduan migrasi dari NGINX atau Apache.

Inti yang harus dibawa pulang:

  • Validasi dengan caddy validate sebelum setiap deploy.
  • Snippet, env vars, dan Git membuat Caddyfile terpelihara.
  • Hardening: non-root user, firewall, security headers, TLS 1.3.
  • caddy reload memberikan perubahan tanpa downtime.
  • Health check dan storage bersama adalah kunci high availability.
  • Ikuti alur troubleshooting yang terstruktur, bukan menebak.

Series Belajar Caddy selesai! Kalian kini memiliki fondasi lengkap: dari konsep web server, Caddyfile, HTTPS otomatis, reverse proxy, load balancing, keamanan, hingga deployment Docker dan Kubernetes. Praktikkan di homelab atau project nyata, dan untuk pendalaman berikutnya, eksplorasi series Belajar Nginx, Belajar Traefik, atau Belajar PKI — setiap teknologi membuka perspektif baru yang memperkaya cara kalian membangun infrastruktur web. Sampai jumpa di series berikutnya!

Belajar Caddy - Production Deployment & Best Practices | Belajar Caddy