6.1 KiB
Bunny.net – Ersteinrichtung und Vorab-Veröffentlichung
Ziel: iwz-ferienwohnungen bei Bunny.net anlegen, eine erste Fassung der Hugo-Seite
online stellen und den Zugriff darauf auf dich + den Kunden beschränken (Vorschau,
bevor die Seite öffentlich unter der echten Domain läuft).
Hinweis: Dieser Weg ersetzt den früher geplanten Cloudflare-Pages-Ansatz. Details zum alten Cloudflare/IONOS-Plan siehe weiter unten im Abschnitt "Alt: Cloudflare-Variante (nicht mehr aktuell)".
1. Bunny.net-Account anlegen
- Auf bunny.net registrieren (E-Mail + Passwort, keine Kreditkarte für den Start nötig, Abrechnung erfolgt nach Traffic/Storage).
- E-Mail-Adresse bestätigen und einloggen ins Dashboard.
2. Storage Zone anlegen (Ablage für die gebauten Hugo-Dateien)
- Im Dashboard-Menü Storage → Add Storage Zone.
- Name vergeben, z. B.
iwz-ferienwohnungen. - Main Region: Region wählen, die am nächsten an euch/den Besuchern liegt (z. B. Frankfurt/Falkenstein, Europa).
- Replikations-Regionen optional dazuwählen, falls später Besucher aus anderen Kontinenten erwartet werden (für die Vorschau-Phase nicht nötig).
- Zone erstellen.
3. Zugangsdaten der Storage Zone notieren
- Storage Zone öffnen → Reiter FTP & API Access.
- Hostname, Username und Password (nicht das Read-only-Passwort!)
notieren – diese werden später für den Upload per
deploy.bat/deploy.pygebraucht (alsBUNNY_STORAGE_ZONEundBUNNY_API_KEY, siehe CLAUDE.md). - Zugangsdaten nicht ins Git-Repo einchecken (z. B. in
.envoder als Windows-Umgebungsvariable ablegen).
4. Erste Fassung hochladen
Lokal die Seite bauen und die public/-Inhalte in die Storage Zone hochladen:
hugo --gc --minify
Für den allerersten Test kann der Upload manuell per File Manager im Bunny-
Dashboard (Storage Zone → Files → Drag & Drop von public/) erfolgen. Sobald
deploy.bat/deploy.py entsprechend erweitert ist, übernimmt das Skript diesen
Schritt automatisch (Ordnerinhalt von public/ 1:1 in die Storage Zone spiegeln).
5. Pull Zone anlegen (macht die Storage Zone über HTTPS erreichbar)
- In der Storage Zone → Connected Pull Zones → Connect Pull Zone (oder im Menü CDN → Add Pull Zone und als Origin die Storage Zone wählen).
- Namen vergeben, z. B.
iwz-ferienwohnungen. - Zonen für die Auslieferung wählen (Europa reicht für die Vorschau).
- Pull Zone erstellen → Bunny vergibt automatisch eine Test-URL:
https://iwz-ferienwohnungen.b-cdn.net - HTTPS ist auf dieser
b-cdn.net-URL automatisch aktiv, kein eigenes Zertifikat nötig.
Damit ist die Seite technisch live – als nächstes wird sie geschützt, bevor der Link an den Kunden geht.
6. Zugriff beschränken: nur du + der Kunde
Bunny.net Pull Zones bieten dafür Token Authentication: Requests an die Pull Zone werden nur ausgeliefert, wenn die URL einen gültigen, signierten Token enthält. Es gibt keinen klassischen Basic-Auth-Login-Dialog im Browser – stattdessen bekommt der Kunde einen fertigen Link mit Token, der bis zu einem festgelegten Ablaufzeitpunkt gültig ist.
6.1 Token Authentication aktivieren
- Pull Zone öffnen → Reiter Security.
- Token Authentication aktivieren.
- Den angezeigten Authentication Key kopieren und sicher aufbewahren (nicht ins Git-Repo, nicht per unverschlüsselter Mail verschicken) – wer diesen Key kennt, kann selbst gültige Links erzeugen.
Ab jetzt liefert die Pull Zone nichts mehr aus, ohne gültigen Token in der URL – das ist der eigentliche Zugriffsschutz.
6.2 Signierten Link erzeugen
Ein signierter Link besteht aus einem Hash über Authentication Key + Pfad + Ablaufzeitpunkt. Das lässt sich einfach per kleinem Python-Snippet erzeugen,
z. B. lokal ausführen, wenn ein neuer Vorschau-Link für den Kunden gebraucht
wird:
import hashlib
import base64
import time
security_key = "DEIN_AUTHENTICATION_KEY"
url_path = "/index.html" # z.B. Startseite, oder "/" je nach Setup
expires = int(time.time()) + 7 * 24 * 60 * 60 # 7 Tage gültig
hashable = f"{security_key}{url_path}{expires}"
token_hash = hashlib.sha256(hashable.encode()).digest()
token = base64.urlsafe_b64encode(token_hash).decode().rstrip("=")
print(f"https://iwz-ferienwohnungen.b-cdn.net{url_path}?token={token}&expires={expires}")
Den ausgegebenen Link schickst du dem Kunden. Läuft die Gültigkeit ab, einfach
ein neues Snippet mit neuem expires-Wert ausführen und den frischen Link
verschicken.
6.3 Praktisch für Vorschau-Zwecke
- Länge der Gültigkeit (
expires) nach Bedarf wählen – z. B. 7 Tage für eine kurze Abstimmungsrunde, oder wenige Stunden für einen einzelnen Termin. - Ohne gültigen Token bekommt jeder andere Besucher einen Fehler von Bunny – die Seite ist damit faktisch nur über den geteilten Link erreichbar.
- Sobald die Seite live gehen soll (echte Domain, öffentlich), wird Token Authentication in der Pull Zone einfach wieder deaktiviert.
7. Domain-Anbindung (später, für den echten Umzug)
Noch offen und erst relevant, wenn die Seite final ist:
- Eigene Domain (
iwz-ferienwohnungen.de) als Custom Hostname in der Pull Zone hinterlegen. - Entweder DNS bei IONOS per CNAME auf die Bunny-Pull-Zone zeigen lassen, oder DNS komplett zu Bunny.net DNS umziehen (Nameserver-Wechsel bei IONOS, ähnlich wie ursprünglich für Cloudflare geplant).
- SSL-Zertifikat für die eigene Domain wird von Bunny automatisch ausgestellt, sobald der Hostname verifiziert ist.
- Domain-Registrar bleibt in jedem Fall IONOS.
Zusammenfassung des Stacks (aktuell)
Domain-Registrar: IONOS (bleibt so)
DNS: noch offen (IONOS bleibt vorerst / später ggf. Bunny.net DNS)
Hosting: Bunny.net (Storage Zone + Pull Zone/CDN)
Vorschau-Schutz: Bunny Token Authentication (signierte, befristete Links)
Code/Content: Gitea (eigene Instanz, kein CI/CD-Workflow)
Deploy: manuell per deploy.bat / deploy.py (hugo build + Upload zur Storage Zone)
Buchungskalender: webplanner.de (bleibt so, extern)