I use Caddy for this. I’ll leave links to the documentation as well as a few examples.
Here’s the documentation for wildcard certs.
caddyserver.com/docs/automatic-https#wildcard-cer…
Here’s how you add DNS providers to Caddy without Docker.
caddy.community/t/…/8148
Here’s how you do it with Docker.
github.com/docker-library/docs/tree/master/caddy#…
Look for the DNS provider in this repository first.
github.com/caddy-dns
Here’s documentation about using environment variables.
caddyserver.com/docs/caddyfile/concepts#environme…
Docker
A few examples of Dockerfiles. These will build Caddy with DNS support.
DuckDNS
FROM caddy:2-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/duckdns
FROM caddy:2
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
Cloudflare
FROM caddy:2-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/cloudflare
FROM caddy:2
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
Porkbun
FROM caddy:2-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/porkbun
FROM caddy:2
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
Configure DNS provider
This is what to add the the Caddyfile, I’ve used these in the examples that follow this section.
You can look at the repository for the DNS provider to see how to configure it for example.
DuckDNS
github.com/caddy-dns/cloudflare?tab=readme-ov-fil…
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
CloudFlare
github.com/caddy-dns/cloudflare?tab=readme-ov-fil…
Dual-key
tls {
dns cloudflare {
zone_token {env.CF_ZONE_TOKEN}
api_token {env.CF_API_TOKEN}
}
}
Single-key
tls {
dns cloudflare {env.CF_API_TOKEN}
}
PorkBun
github.com/caddy-dns/porkbun?tab=readme-ov-file#c…
Global
{
acme_dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_API_SECRET_KEY}
}
}
or per site
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_API_SECRET_KEY}
}
}
Caddyfile
And finally the Caddyfile examples.
DuckDNS
Here’s how you do it with DuckDNS.
*.example.org {
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
@hass host home-assistant.example.org
handle @hass {
reverse_proxy home-assistant:8123
}
}
Also you can use environment variables like this.
*.{$DOMAIN} {
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
@hass host home-assistant.{$DOMAIN}
handle @hass {
reverse_proxy home-assistant:8123
}
}
CloudFlare.
*.{$DOMAIN} {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
@hass host home-assistant.{$DOMAIN}
handle @hass {
reverse_proxy home-assistant:8123
}
}
Porkbun
*.{$DOMAIN} {
tls {
dns porkbun {
api_key {env.PORKBUN_API_KEY}
api_secret_key {env.PORKBUN_API_SECRET_KEY}
}
}
@hass host home-assistant.{$DOMAIN}
handle @hass {
reverse_proxy home-assistant:8123
}
}
eneff@discuss.tchncs.de 1 week ago
thank you for providing such a thorough reply, good shit