diff --git a/.gitignore b/.gitignore index d8d6c50..fc36f7d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .env -data/ __pycache__/ *.pyc .venv/ diff --git a/AGENTS.md b/AGENTS.md index 67b0dca..d7faed4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,7 +13,7 @@ Kontext: [`SPEC.md`](SPEC.md) (Design), [`PLAN.md`](PLAN.md) (Tasks), - `app/` – Kernmodule (Python 3.12) - `config.py` – ENV-basierte Konfiguration + Validierung - - `state.py` – persistierte letzte IP (`/data/last-known-ip.json`) + - `state.py` – persistierte letzte IP (`/app/data/last-known-ip.json`, ephemeral im Container) - `fritzbox.py` – IP-Ermittlung via TR-064 (Retry/Backoff) - `cloudflare.py` – A-Record-Update (DNS-only) - `freedns.py` – FreeDNS-Update-Call @@ -31,7 +31,7 @@ Kontext: [`SPEC.md`](SPEC.md) (Design), [`PLAN.md`](PLAN.md) (Tasks), ## Konventionen -- CREDENTIALS NIE committen. `.env` und `data/` sind gitignored – nie mit `-f` hinzufügen. +- CREDENTIALS NIE committen. `.env` ist gitignored – nie mit `-f` hinzufügen. - Keine Co-Autoren in Commits. - Keine Kommentare im Code außer auf Nachfrage. - Python-Code mit Ruff formatieren (line-length 100, double quotes). diff --git a/Dockerfile b/Dockerfile index fbc38a4..bac6d86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ RUN pip install --no-cache-dir -r requirements.txt COPY app/ ./app/ -RUN mkdir -p /data && chown -R appuser:appuser /app /data +RUN mkdir -p /app/data && chown -R appuser:appuser /app USER appuser diff --git a/app/config.py b/app/config.py index 4f79b13..e6c0dc5 100644 --- a/app/config.py +++ b/app/config.py @@ -38,7 +38,7 @@ class Config: self.healthcheck_ping_url = os.environ.get("HEALTHCHECK_PING_URL", "") - self.state_path = os.environ.get("STATE_PATH", "/data/last-known-ip.json") + self.state_path = os.environ.get("STATE_PATH", "/app/data/last-known-ip.json") def validate(self): missing = [v for v in REQUIRED_VARS if not os.environ.get(v)] diff --git a/docker-compose.yml b/docker-compose.yml index 5614787..d827170 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,5 @@ services: - .env ports: - "8090:8090" # Webhook-Port (GET, kein Auth) - intern im LAN - volumes: - - ./data:/data # last-known-ip.json Persistierung labels: - "com.centurylinklabs.watchtower.enable=true"