# 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 # , 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: ```yaml 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 - [x] Echte webplanner.de-URLs in fewo1/2/3.md eintragen (`belegungsplan`) - [x] Fotos in `static/images/` ablegen + in fewoX.md verlinken - [x] Telefon, E-Mail, Adresse in `hugo.toml` unter `[params]` eintragen - [x] `content/impressum.md` mit echten Pflichtangaben füllen - [x] `content/datenschutz.md` durch rechtskonforme Version ersetzen - [x] Bunny.net-Account anlegen + Storage Zone für die Seite erstellen - [x] Bunny Storage-Passwort besorgen, sicher hinterlegen (`.env`, nicht ins Git) - [x] `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 ```powershell 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: ```powershell 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`).