{ "id": "cloudflare-ddns", "name": "Cloudflare DDNS", "description": "Keeps the homelab's public DNS records (ezequielcf.dev + wildcard subdomains) pointed at the current public IP via the Cloudflare API.", "version": "1.17.0", "category": "network", "tags": ["ddns", "cloudflare", "dns", "dynamic-dns"], "author": "favonia", "license": "Apache-2.0", "homepage": "https://github.com/favonia/cloudflare-ddns", "documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/docs/README.md", "compose": { "image": "favonia/cloudflare-ddns:1.17.0", "container_name": "cloudflare-ddns", "restart": "unless-stopped", "environment": [ "CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}", "DOMAINS=${DOMAINS}", "PROXIED=${PROXIED}", "IP6_PROVIDER=${IP6_PROVIDER}", "TZ=${TZ}" ], "networks": ["homelab"] }, "networks": { "homelab": { "external": true } }, "env": [ { "name": "CLOUDFLARE_API_TOKEN", "label": "Cloudflare API token", "description": "Scoped token: Zone > DNS > Edit on ezequielcf.dev", "required": true, "secret": true }, { "name": "DOMAINS", "label": "Domains to update", "default": "ezequielcf.dev,*.ezequielcf.dev" }, { "name": "PROXIED", "label": "Proxied through Cloudflare", "description": "false = DNS-only (direct to origin, needed for direct LE HTTP-01); true = orange-cloud", "default": "false" }, { "name": "IP6_PROVIDER", "label": "IPv6 provider", "description": "none = IPv4-only updates", "default": "none" }, { "name": "TZ", "label": "Timezone", "default": "UTC" } ], "notes": "Updates `ezequielcf.dev` (@) and the wildcard `*.ezequielcf.dev` A record whenever the public IP changes. Records are DNS-only (gray cloud) so the router DMZ -> 10.0.0.10:80/443 path serves origin traffic directly; flip PROXIED=true in the .env to route through Cloudflare instead. The API token lives only in ~/.homelab/services/cloudflare-ddns/.env." }