Cara Setup Wildcard Subdomain dengan Caddy dan DigitalOcean

5 menit baca.

Kalau kamu mau satu server menangani subdomain tanpa batas, setup wildcard subdomain dengan Caddy dan DigitalOcean adalah cara paling rapi.

Detail pentingnya: wildcard certificate (*.example.com) wajib pakai DNS challenge, jadi Caddy harus di-build dengan DNS provider module untuk DigitalOcean.

Kenapa wildcard HTTPS harus pakai DNS challenge

HTTP challenge cocok untuk domain biasa, tapi wildcard cert beda. Certificate authority hanya mengeluarkan wildcard cert lewat validasi DNS (ACME DNS-01 challenge).

Artinya Caddy butuh izin untuk membuat record TXT sementara di DNS zone kamu. Di DigitalOcean DNS, ini dilakukan lewat API token.

Prasyarat

  • Domain kamu dikelola di DigitalOcean DNS
  • Droplet (atau server lain) dengan IP publik
  • A record untuk * yang mengarah ke IP server
  • Caddy 2 berjalan di server
  • Personal access token DigitalOcean dengan akses write ke DNS

Kalau kamu juga mau domain apex (example.com) aktif, tambahkan A record untuk @.

1. Buat DNS record di DigitalOcean

Di pengaturan DNS domain kamu, tambahkan:

Type: A
Host: *
Value: <ip-server-kamu>
TTL: 3600

Opsional untuk domain apex:

Type: A
Host: @
Value: <ip-server-kamu>
TTL: 3600

Wildcard record ini yang bikin app.example.com, api.example.com, dan subdomain lain resolve ke server yang sama.

2. Build Caddy dengan DigitalOcean DNS module

Binary Caddy bawaan tidak selalu menyertakan semua DNS provider module. Kamu perlu module DNS DigitalOcean.

Install xcaddy lalu build Caddy:

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

xcaddy build \
  --with github.com/caddy-dns/digitalocean

Perintah ini menghasilkan binary caddy lokal yang sudah punya dukungan DNS DigitalOcean.

Pindahkan binary ke lokasi final (contoh Linux):

sudo mv ./caddy /usr/local/bin/caddy
sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy

3. Konfigurasi Caddyfile untuk wildcard subdomain

Set token kamu sebagai environment variable:

export DO_AUTH_TOKEN="dop_v1_xxxxxxxxxxxxxxxxx"

Lalu buat Caddyfile seperti ini:

*.example.com {
  tls {
    dns digitalocean {env.DO_AUTH_TOKEN}
  }

  @api host api.example.com
  handle @api {
    reverse_proxy 127.0.0.1:4000
  }

  handle {
    reverse_proxy 127.0.0.1:3000
  }
}

Yang terjadi di sini:

  • Caddy request wildcard cert lewat DNS challenge ke DigitalOcean
  • HTTPS di-handle otomatis
  • api.example.com diarahkan ke upstream tertentu, subdomain lain ke upstream berbeda

Kalau apex domain juga perlu aktif, tambahkan site block terpisah:

example.com {
  tls {
    dns digitalocean {env.DO_AUTH_TOKEN}
  }

  reverse_proxy 127.0.0.1:3000
}

Wildcard tidak otomatis mencakup apex domain.

4. Validasi dan jalankan Caddy

Validasi config:

caddy validate --config /etc/caddy/Caddyfile

Jalankan atau reload:

sudo systemctl reload caddy
# atau kalau tidak pakai systemd:
caddy run --config /etc/caddy/Caddyfile

Tes DNS dan HTTPS:

dig app.example.com +short
curl -I https://app.example.com

dig harus mengembalikan IP server kamu, dan curl harus dapat response HTTPS.

Kesalahan yang sering terjadi

Caddy belum punya DNS module

Kalau log Caddy menampilkan error DNS provider/module tidak dikenal, berarti binary kamu belum di-build dengan github.com/caddy-dns/digitalocean.

Token tidak tersedia saat service jalan

Kalau DO_AUTH_TOKEN hanya di-export di shell aktif, service systemd tidak akan melihatnya. Simpan token di environment file service.

Wildcard DNS record belum ada

Kalau tidak ada record *, subdomain tidak resolve. Akibatnya sertifikat gagal dibuat dan request gagal sebelum aplikasi kamu disentuh.

Mengira wildcard mencakup apex

*.example.com mencakup foo.example.com, bukan example.com.

Kesimpulan

Untuk setup wildcard subdomain dengan Caddy dan DigitalOcean, arahkan DNS * ke server kamu, pakai Caddy build yang menyertakan module DNS DigitalOcean, lalu set TLS dengan dns digitalocean. Setelah itu Caddy bisa issue dan renew wildcard HTTPS certificate otomatis.

Latest Posts