From d456a856e32606e10c4aa53ef9ce1a61f3a054dc Mon Sep 17 00:00:00 2001 From: Stefan Koelle <50440224+skoelle@users.noreply.github.com> Date: Fri, 7 Aug 2026 00:11:43 +0200 Subject: [PATCH] Initial scaffold: SPEC, PLAN, app modules, Dockerfile, compose, CI workflow --- .gitignore | 5 +++++ README.md | 29 ++++++++++++++++++++++++++++- requirements.txt | 4 ++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d8d6c50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.env +data/ +__pycache__/ +*.pyc +.venv/ diff --git a/README.md b/README.md index bb910b8..8dec321 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ # dyndns-updater -Cloudflare + FreeDNS DynDNS-Updater fuer FritzBox (TR-064) auf docker-host-pve + +Kleiner Docker-Container, der Cloudflare-A-Records (DNS-only) und eine bestehende +FreeDNS-Update-URL mit der aktuellen öffentlichen IPv4-Adresse aktuell hält. + +Details siehe [SPEC.md](SPEC.md) (Architektur/Design) und [PLAN.md](PLAN.md) +(Umsetzungs-Tasks). + +## Kurzüberblick + +- IP wird ausschließlich über die FritzBox TR-064-Schnittstelle ermittelt (nicht aus + Webhook-Parametern übernommen) +- Trigger: Container-Start, `GET /webhook/update` (kein Auth, rein intern), + Fallback-Polling alle 15 Minuten +- DNS-Update (Cloudflare + FreeDNS) nur bei tatsächlicher IP-Änderung +- Healthcheck-Heartbeat bei jedem Poll-Zyklus, unabhängig von einer IP-Änderung + +## Quickstart + +```bash +cp .env.example .env +vim .env # Werte eintragen +docker compose up -d +``` + +## Build + +Wird automatisch per GitHub Actions nach `ghcr.io/skoelle/dyndns-updater` gebaut +(siehe `.github/workflows/build-and-push.yml`). diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e0f99ee --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +flask==3.0.3 +requests==2.32.3 +fritzconnection==1.14.0 +APScheduler==3.10.4