diff --git a/.env.example b/.env.example index a675a32..04aa06b 100644 --- a/.env.example +++ b/.env.example @@ -9,3 +9,8 @@ BUNNY_STORAGE_PASSWORD= # Pull Zone -> CDN -> Security-Tab im Bunny.net Dashboard (Token Authentication) BUNNY_PULL_ZONE_URL=https://iwz-ferienwohnungen.b-cdn.net BUNNY_AUTH_KEY= + +# Account-API-Key fuer den CDN-Cache-Purge nach dem Deploy. +# Dashboard -> oben rechts auf den Namen -> Account -> API -> "API Key". +# ACHTUNG: nicht der BUNNY_AUTH_KEY oben, sondern der Account-weite API-Key! +BUNNY_API_KEY= diff --git a/content/ferienwohnungen/fewo1.md b/content/ferienwohnungen/fewo1.md index ad314db..4d682d2 100644 --- a/content/ferienwohnungen/fewo1.md +++ b/content/ferienwohnungen/fewo1.md @@ -34,9 +34,9 @@ bilder: - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-Wohnzimmer.jpg" - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-schlafzimmer.jpg" - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-Kueche.jpg" - - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-Badezimmer.jpg" + # - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-Badezimmer.jpg" # auf alter Live-Site nicht vorhanden - "/images/fewo1/ferienwohnung-allgaeu-kaufbeuren-wohnung-1-wc-terrasse.jpg" - - "/images/fewo1/ferienwohnung-kaufbeuren-Wohnung1.jpg" + # - "/images/fewo1/ferienwohnung-kaufbeuren-Wohnung1.jpg" # auf alter Live-Site nicht vorhanden - "/images/fewo1/ferienwohnung-1-wolframm-kaufbeuren-Skizze.jpg" --- diff --git a/content/ferienwohnungen/fewo2.md b/content/ferienwohnungen/fewo2.md index 4a14933..6ce7b5d 100644 --- a/content/ferienwohnungen/fewo2.md +++ b/content/ferienwohnungen/fewo2.md @@ -32,11 +32,11 @@ bilder: - "/images/fewo2/Wohnzimmer-TV-und-Schrank-fewo-2.jpg" - "/images/fewo2/Essplatz-fewo-2.jpg" - "/images/fewo2/Wohnung-2-Kueche-frontal-1.jpg" - - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-Kueche-Wohnzimmer.jpg" - - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-Kueche-wohnung-mieten.jpg" + # - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-Kueche-Wohnzimmer.jpg" # auf alter Live-Site nicht vorhanden + # - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-Kueche-wohnung-mieten.jpg" # auf alter Live-Site nicht vorhanden - "/images/fewo2/FeWo2-Bad-mit-Vorhang_2.jpg" - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-flur.jpg" - - "/images/fewo2/ferienwohnung-kaufbeuren-Wohnung2.jpg" + # - "/images/fewo2/ferienwohnung-kaufbeuren-Wohnung2.jpg" # auf alter Live-Site nicht vorhanden - "/images/fewo2/ferienwohnung-2-wolframm-kaufbeuren-skizze.jpg" --- diff --git a/deploy.py b/deploy.py index fd2be3b..e4e6212 100644 --- a/deploy.py +++ b/deploy.py @@ -8,6 +8,9 @@ import ftplib import os import subprocess import sys +import urllib.error +import urllib.parse +import urllib.request from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parent @@ -60,6 +63,39 @@ def deploy_to_bunny(host, zone, password): ftp_upload_dir(ftp, PUBLIC_DIR) +def purge_cdn_cache(pull_zone_url, api_key): + """Leert den Bunny CDN-Cache der Pull Zone per Wildcard-URL-Purge. + + Ohne Purge liefert das CDN unveraenderte Dateinamen (z.B. /css/style.css) + weiter aus dem Cache -> online sieht man die alte Version. + """ + if not pull_zone_url or not api_key: + print("\n-> CDN-Purge uebersprungen " + "(BUNNY_PULL_ZONE_URL / BUNNY_API_KEY nicht gesetzt).") + print(" Cache ggf. manuell im Bunny-Dashboard leeren.") + return + + wildcard = pull_zone_url.rstrip("/") + "/*" + query = urllib.parse.urlencode({"url": wildcard, "async": "false"}) + url = f"https://api.bunny.net/purge?{query}" + print(f"\n-> CDN-Cache leeren: {wildcard}") + + req = urllib.request.Request(url, method="POST") + req.add_header("AccessKey", api_key) + req.add_header("Accept", "application/json") + try: + with urllib.request.urlopen(req, timeout=60) as resp: + if resp.status == 200: + print(" Cache geleert.") + else: + print(f" WARNUNG: unerwarteter Status {resp.status}") + except urllib.error.HTTPError as e: + print(f" WARNUNG: Purge fehlgeschlagen (HTTP {e.code}). " + "Ist BUNNY_API_KEY der Account-API-Key?") + except urllib.error.URLError as e: + print(f" WARNUNG: Purge fehlgeschlagen ({e.reason}).") + + if __name__ == "__main__": print("=== IWZ Deploy ===") @@ -67,6 +103,8 @@ if __name__ == "__main__": zone = env.get("BUNNY_STORAGE_ZONE") host = env.get("BUNNY_STORAGE_HOST", "storage.bunnycdn.com") password = env.get("BUNNY_STORAGE_PASSWORD") + pull_zone_url = env.get("BUNNY_PULL_ZONE_URL") + api_key = env.get("BUNNY_API_KEY") if not zone or not password: print("\nFEHLER: BUNNY_STORAGE_ZONE / BUNNY_STORAGE_PASSWORD fehlen.") @@ -75,5 +113,6 @@ if __name__ == "__main__": hugo_build() deploy_to_bunny(host, zone, password) + purge_cdn_cache(pull_zone_url, api_key) print("\nFertig! Seite ist live.")