8.0 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
Wichtige Einschränkung (Stand: getestet): Das Bunny-Dashboard zeigt in der Security-Seite der Pull Zone nur die Basic Token Authentication (Felder: "Token authentication", "Token IP validation", "Url token authentication Key"). Diese Basic-Methode signiert immer einen exakten Pfad – es gibt dabei kein Path-Prefix-/Wildcard-/Verzeichnis-Token. Ein Token für
/ist damit nur für/gültig, nicht für/ferienwohnungen/oder andere Unterseiten (führt zu 403 auf allen anderen Seiten). Verzeichnis-weite Tokens gibt es bei Bunny nur über die separate "Advanced" Token-Methode (HS256, i. d. R. anderer Tarif/Reiter) – die in diesem Projekt bisher nicht verfügbar/eingerichtet ist.Für die aktuelle Vorschau-Phase deshalb: Token Authentication ist deaktiviert. Die
b-cdn.net-Test-URL ist damit frei erreichbar (kein Passwortschutz, aber auch nicht in Suchmaschinen o. ä. auffindbar/verlinkt) – ausreichend für eine kurze, informelle Abstimmung mit dem Kunden. Die folgenden Abschnitte 6.1–6.3 bleiben als Referenz stehen, falls später doch ein Advanced-Token-Setup eingerichtet wird oder Bunny die Basic-Methode um Prefix-Matching erweitert.
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. Mit der Basic-Methode gilt das aber pro exaktem Pfad (siehe Hinweis oben) – für mehrere Seiten braucht es entsprechend mehrere Links, siehe 6.2.
6.2 Signierten Link je Seite erzeugen
Ein signierter Link besteht aus einem Hash über Authentication Key + Pfad + Ablaufzeitpunkt. Da die Basic-Methode keine Verzeichnis-Tokens kennt, braucht
jede Seite ihren eigenen Link. Lokal ausführen, wenn neue Vorschau-Links für
den Kunden gebraucht werden:
import hashlib
import base64
import time
security_key = "DEIN_AUTHENTICATION_KEY"
expires = int(time.time()) + 7 * 24 * 60 * 60 # 7 Tage gültig
# Alle Pfade eintragen, die der Kunde ansehen soll:
url_paths = [
"/",
"/ferienwohnungen/",
"/ferienwohnungen/fewo1/",
"/ferienwohnungen/fewo2/",
"/ferienwohnungen/fewo3/",
"/preise/",
"/ausflugsziele/",
"/kontakt/",
"/impressum/",
"/datenschutz/",
]
for url_path in url_paths:
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}")
Die ausgegebenen Links schickst du dem Kunden (z. B. als Liste). Läuft die
Gültigkeit ab, einfach das Snippet mit neuem expires-Wert erneut ausführen.
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 die geteilten Links erreichbar.
- Da pro Seite ein eigener Token nötig ist, taugt dieser Weg nur für wenige, fest bekannte Seiten – nicht für eine frei navigierbare Vorschau. Für eine frei klickbare Vorschau (aktueller Stand) bleibt Token Authentication vorerst deaktiviert (siehe Hinweis oben).
- Sobald die Seite live gehen soll (echte Domain, öffentlich), bleibt Token Authentication in der Pull Zone ohnehin 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)