Files
iwz/CLAUDE.md
Michael Stangl 2379f4ac9f @
Skripte nach bin/ und lib/ umstrukturiert + WSL-Log-Analyse

Alle .bat-Skripte liegen jetzt in bin/, alle .py in lib/, .env(.example)
in bin/. setenv.bat setzt IWZ_* (inkl. IWZ_ENV) und PYTHONPATH; die
Launcher rufen setenv, aktivieren die .venv falls vorhanden und starten
das zugehoerige lib/-Skript. Die Python-Skripte lesen die .env ueber
IWZ_ENV (Fallback bin/.env).

Neu: Nutzungsanalyse per GoAccess (analyze.py/.bat) - laedt die
IONOS-Access-Logs per SFTP (paramiko) und erzeugt einen HTML-Report.
GoAccess laeuft ueber WSL (GOACCESS_MODE=wsl, Pfad-Uebersetzung nach
/mnt/c). install_py.bat prueft WSL+GoAccess und zeigt sonst den
Installationsweg. Doku in doc/analyse.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-08-28 16:44:56 +02:00

6.7 KiB
Raw Permalink Blame History

Ferienwohnungen Wolframm – Projektkontext

Was ist das?

Hugo-basierte statische Website als WordPress-Ersatz für www.iwz-ferienwohnungen.de. Drei Ferienwohnungen in Kaufbeuren-Hirschzell / Allgäu.

Stack

  • Static Site Generator: Hugo (keine externe Abhängigkeit, einzelne .exe)
  • Hosting: Bunny.net (Bunny CDN / Storage Zone, kostenpflichtig nach Traffic)
  • DNS: Bunny.net DNS oder weiterhin IONOS (siehe Umzug-Notizen, ggf. anzupassen)
  • Domain-Registrar: IONOS (bleibt so)
  • Buchungskalender: webplanner.de (externer Dienst, per Link eingebunden)
  • Git: eigene Gitea-Instanz (kein GitHub/GitLab, kein CI/CD-Workflow)
  • Deploy: manuell per deploy.bat oder deploy.py → hugo --gc --minify + Upload nach Bunny.net Storage Zone (per Bunny-API/FTP, analog zum Ansatz in .github/workflows/deploy.yml-Vorlage, aber lokal statt als GitHub Action)
  • Nutzungsanalyse: Server-Log-Auswertung mit GoAccess (kein JS-Tracking, keine Cookies, kein Consent-Banner). Skript analyze.bat / analyze.py lädt die Access-Logs per SFTP und erzeugt einen HTML-Report. Siehe doc/analyse.md.

Hosting-Roadmap (Stand aktuell)

  • Jetzt: Deploy läuft auf Bunny.net – für das erste Ausrollen der Instanz zur Kontrolle und Absprache. Die vorhandene Bunny-Konfiguration (Storage Zone, Pull Zone, .env) ist in Ordnung und bleibt vorerst so. deploy.bat / deploy.py deployen weiterhin nach Bunny.
  • Später: Die Instanz wird auf IONOS-Webspace ausgerollt (Deploy-Ziel wird dann umgestellt).
  • Nutzungsanalyse jetzt schon erprobbar: Die Log-Analyse (analyze.py) wird bereits mit den IONOS-Access-Logs getestet (SFTP-Zugang zum IONOS /logs-Ordner), unabhängig davon, dass das Deploy-Ziel noch Bunny ist. Nach dem IONOS-Umzug bleibt der Analyse-Workflow gleich.

Projektstruktur

iwz/
├── hugo.toml              # Konfiguration: baseURL, Menü, Kontaktdaten (Params)
├── requirements.txt       # Python-Abhängigkeiten (paramiko für analyze)
├── bin/                   # Alle .bat-Skripte (Einstiegspunkte)
│   ├── setenv.bat         # setzt IWZ, IWZ_BIN, IWZ_LIB, IWZ_ENV ... + PYTHONPATH
│   ├── install_py.bat     # legt .venv an + pip install -r requirements.txt
│   ├── get_cmd.bat        # öffnet Shell mit gesetzter Umgebung
│   ├── deploy.bat         # → lib/deploy.py (Vollupload nach Bunny)
│   ├── deploy-lastdiff.bat# → lib/deploy_lastdiff.py (nur Änderungen)
│   ├── analyze.bat        # → lib/analyze.py (IONOS-Logs + GoAccess)
│   ├── provide_previewlink.bat # → lib/preview_link.py
│   ├── .env               # Secrets (NICHT im Git; von setenv als IWZ_ENV gesetzt)
│   └── .env.example       # Vorlage zum Kopieren nach bin/.env
├── lib/                   # Alle .py-Skripte (von den .bat aufgerufen)
│   ├── deploy.py          # Hugo-Build + FTP-Upload nach Bunny Storage Zone
│   ├── deploy_lastdiff.py # nur geänderte Dateien (Hash-Manifest)
│   ├── analyze.py         # SFTP-Download der Logs + GoAccess-Report
│   └── preview_link.py    # signierter Bunny-Vorschau-Link
├── content/
│   ├── _index.md          # Startseite
│   ├── preise.md          # Preistabelle + Buchungsbedingungen
│   ├── ausflugsziele.md
│   ├── kontakt.md
│   ├── impressum.md       # PLATZHALTER – echte Daten eintragen!
│   ├── datenschutz.md     # PLATZHALTER – rechtskonform ersetzen!
│   └── ferienwohnungen/
│       ├── _index.md
│       ├── fewo1.md       # 45 qm, bis 4 Pers., 60 €/Nacht
│       ├── fewo2.md       # 40 qm, bis 3 Pers., 55 €/Nacht
│       └── fewo3.md       # 56 qm, bis 5 Pers., 100 €/Nacht
├── layouts/               # Hugo-Templates (kein externes Theme!)
│   ├── index.html         # Startseite: Hero, Highlights, FeWo-Karten
│   ├── _default/
│   │   ├── baseof.html    # Basis-Template (nav + footer)
│   │   ├── single.html    # Standard-Einzelseite
│   │   └── list.html      # Listenansicht (Ferienwohnungen-Übersicht)
│   ├── ferienwohnungen/
│   │   └── single.html    # FeWo-Detailseite: Galerie + Buchungsbutton
│   └── partials/
│       ├── head.html      # <meta>, CSS-Link
│       ├── nav.html       # Navigation (mobil-responsive)
│       └── footer.html    # Footer mit Kontakt + Links
└── static/
    ├── css/style.css      # Reines CSS, CSS Variables, Dark Mode
    ├── js/main.js         # Nur mobiles Menü-Toggle
    └── images/            # Fotos hier ablegen

Frontmatter der FeWo-Seiten

Jede fewoX.md hat folgende Felder:

groesse: "45 qm"
personen: 4
preis: 60
belegungsplan: "https://www.webplanner.de/XXXXXX/fewo1"
bilder:
  - "/images/fewo1_wohnzimmer.jpg"
  - "/images/fewo1_kueche.jpg"

Noch offen / TODO

  • Echte webplanner.de-URLs in fewo1/2/3.md eintragen (belegungsplan)
  • Fotos in static/images/ ablegen + in fewoX.md verlinken
  • Telefon, E-Mail, Adresse in hugo.toml unter [params] eintragen
  • content/impressum.md mit echten Pflichtangaben füllen
  • content/datenschutz.md durch rechtskonforme Version ersetzen
  • Bunny.net-Account anlegen + Storage Zone für die Seite erstellen
  • Bunny Storage-Passwort besorgen, sicher hinterlegen (.env, nicht ins Git)
  • deploy.bat / deploy.py um Upload zur Bunny Storage Zone erweitern (FTP, Port 21, passiv)
  • Bunny Pull Zone / CDN vor die Storage Zone schalten (Auslieferung + HTTPS)
  • Domain-Anbindung an Bunny klären (DNS bei IONOS auf Bunny zeigen lassen, oder DNS zu Bunny umziehen)

Lokaler Dev-Server

hugo server
# → http://localhost:1313

Deploy

Deploy läuft lokal per Skript (kein CI/CD, da Repo bei Gitea liegt). Referenz für den Bunny-Upload-Schritt ist die Vorlage .github/workflows/deploy.yml (GitHub-Actions-Syntax), deren Build- und Deploy-Logik 1:1 in deploy.bat/deploy.py nachgebaut wird:

hugo --gc --minify
# danach: Upload von ./public zur Bunny.net Storage Zone
# (Storage Zone Name + API-Key/Storage-Passwort als Secrets/env, nicht im Git)

# Bei jeder Änderung (Skripte liegen jetzt in bin/, Python in lib/):
bin\deploy.bat            # Vollupload
# oder nur geänderte Dateien:
bin\deploy-lastdiff.bat
# oder direkt:
python lib\deploy.py

Die .bat-Skripte in bin/ rufen setenv.bat auf (setzt IWZ_* und PYTHONPATH), wechseln ins Projekt-Root und starten das zugehörige Skript in lib/. Die Secrets liegen in bin/.env (von setenv.bat als IWZ_ENV gesetzt; die Python-Skripte lesen diesen Pfad, sonst Fallback auf bin/.env).