Cloudflare DDNS — a small, robust dynamic-DNS updater that keeps your Cloudflare A/AAAA records pointed at your current public IP. Deployed as a background host-networked Nomad service (no ports, no volume); set your API token and domains.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "cloudflare-ddns"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The favonia/cloudflare-ddns container image. Pin a tag in production.
image = "favonia/cloudflare-ddns:1"
# Cloudflare API token with DNS edit permission (CLOUDFLARE_API_TOKEN). REQUIRED.
api_token = "your-cloudflare-api-token"
# Comma-separated domains/records to keep updated (DOMAINS), e.g. home.example.com,vpn.example.com. REQUIRED.
domains = "home.example.com"
# Whether the records should be Cloudflare-proxied (PROXIED).
proxied = false
# IPv6 detection (IP6_PROVIDER). Set "none" to disable IPv6 updates if you have no IPv6.
ip6_provider = "none"
# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# The task resources.
resources = {
cpu = 100
memory = 64
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "cloudflare-ddns" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "favonia/cloudflare-ddns:1" | The favonia/cloudflare-ddns container image. Pin a tag in production. |
| api_token set me | string | "your-cloudflare-api-token" | Cloudflare API token with DNS edit permission (CLOUDFLARE_API_TOKEN). REQUIRED. |
| domains set me | string | "home.example.com" | Comma-separated domains/records to keep updated (DOMAINS), e.g. home.example.com,vpn.example.com. REQUIRED. |
| proxied | bool | false | Whether the records should be Cloudflare-proxied (PROXIED). |
| ip6_provider | string | "none" | IPv6 detection (IP6_PROVIDER). Set "none" to disable IPv6 updates if you have no IPv6. |
| constraints | list | [] | Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 100
memory = 64
} | The task resources. |
No variables match.
Cloudflare DDNS — a small, robust dynamic-DNS updater that keeps your Cloudflare A/AAAA records pointed at your current public IP.
Background host-networked Nomad service — no ports, no volume. Just set your API token and domains.
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run cloudflare-ddns --registry=nomploy
| Variable | Default | Description |
|---|---|---|
api_token |
placeholder | CLOUDFLARE_API_TOKEN with Zone:DNS:Edit. Required. |
domains |
home.example.com |
Comma-separated records to update (DOMAINS). Required. |
proxied |
false |
Whether records are Cloudflare-proxied (PROXIED). |
ip6_provider |
none |
IPv6 detection (IP6_PROVIDER); none disables AAAA updates. |
image |
favonia/cloudflare-ddns:1 |
Image. Pin a tag in production. |
resources |
{ cpu = 100, memory = 64 } |
Task resources. |
The records must exist in Cloudflare already; this keeps them pointed at your IP. Watch progress
with nomad alloc logs.