Files
runtipi/apps/cfddns/metadata/description.md
alexz 57b71da781 cfddns: rebuild on private fork with management web UI
- Swap image from favonia/cloudflare-ddns:latest to
  git.alexzaw.dev/alexz/cloudflare-ddns:latest (private fork with
  cmd/manager binary that wraps the original ddns updater)
- Expose web UI on internal port 8080, traefik-routable
- Add CFDDNS_WEB_USER/CFDDNS_WEB_PASSWORD basic-auth form fields
- Repurpose existing DOMAINS/PROXIED/UPDATE_CRON/TZ as first-run seed
  for the YAML config that the UI manages thereafter
- Mount ${APP_DATA_DIR}/data:/config for persistent cfddns.yaml
- Healthcheck on /healthz via 127.0.0.1 (alpine wget)
- Bump tipi_version 7 -> 8 to trigger app update
2026-05-18 01:18:39 -07:00

1.9 KiB

Cloudflare DDNS

Keeps your Cloudflare DNS A/AAAA records in sync with the public IP address of this server, with a web management UI for managing the domain list and settings.

This is a private fork of favonia/cloudflare-ddns with an added manager binary that wraps the upstream updater. The manager:

  • Loads configuration from cfddns.yaml in the app data dir.
  • Exposes a web UI (HTTP basic auth) for adding, editing, and removing domain entries, toggling proxy state per domain, editing the Cloudflare API token, and viewing live status and logs.
  • Supervises the upstream ddns binary as a child process and restarts it cleanly when the configuration changes.

First install

On first start the manager seeds cfddns.yaml from the DOMAINS, PROXIED, UPDATE_CRON, TZ, and CLOUDFLARE_API_TOKEN env vars (set via the install form). After that the YAML file is the source of truth and the env vars are ignored.

If both DOMAINS and CLOUDFLARE_API_TOKEN are empty at first start, the manager will not launch the updater — it logs a warning and waits for you to configure domains via the web UI.

Web UI

Open the app from the Runtipi dashboard. Log in with the username/password you set during install (CFDDNS_WEB_USER / CFDDNS_WEB_PASSWORD).

The UI shows:

  • Current public IPv4/IPv6 (scraped from updater output)
  • Last update time and status
  • Updater process state and PID
  • Domain table with add / edit / delete actions
  • Per-domain proxied checkbox
  • Cron schedule, timezone, and API token editor
  • Live tail of the updater log
  • "Refresh now" button that triggers an immediate update

Storage

Configuration: ${APP_DATA_DIR}/data/cfddns.yaml (mode 0600 — contains your API token).

Source