Workaround für Wartungsseite – ist das möglich?

Haha, ich bin froh, dass du gefragt hast, denn ich habe mir die Zeit gespart, diesen Teil zu erklären (ich hätte es tun sollen – es gibt viel zu erklären und Cloudflare ist komplex!).

Wenn die Worker-Route-Seite eingerichtet ist, wird jeder einzelne Bildladevorgang und jede Seitenaufruf im Forum durch diesen Worker geleitet.

Das kostenlose CDN-Paket von Cloudflare umfasst ein Limit von 100.000 Anfragen pro Tag für eine Worker-Route.

Wenn du also ein relativ stark frequentiertes Forum hast, ist es sinnvoll, die Route nicht dauerhaft aktiv zu lassen, um zu verhindern, dass du das Limit deiner kostenlosen Stufe innerhalb eines Tages erreichst. Dies betrifft nur die Worker-Route, nicht die Wartungsseite – du kannst die Wartungsseite jederzeit aktiv lassen; sie wird nur angesprochen, wenn die Worker-Route darauf verweist. Es geht also nur um Schritt 2, in dem du die Route zugewiesen hast (was einfach einzurichten und zu entfernen ist). Sofern du keinen bezahlten Cloudflare-Plan nutzt, ist es daher gute Praxis, die Route nur während deiner eigenen Wartungsarbeiten aktiv zu haben.

  1. Gehe zur Cloudflare Worker-Route-Seite für deine Domain und klicke auf die Schaltfläche rechts neben der Route.

  1. Klicke unten im Bearbeitungsbildschirm auf die Schaltfläche remove, um die Worker-Seite von der Route zu trennen.

  1. Keine Sorge, der Worker-Code selbst wird nicht gelöscht, nur die Routing-Regel. Beim nächsten Neuaufbau oder Update kannst du sie einfach wie in Schritt 2 oben erneut hinzufügen.

Wenn du einen bezahlten Cloudflare-Plan hast, brauchst du dir keine Sorgen zu machen. Allerdings kannst du in diesem Fall die Cloudflare-Fehlerseiten anstelle einer Worker-Seite verwenden… (habe ich schon erwähnt, dass Cloudflare ziemlich komplex ist? LOL)

:warning: erweiterte Admin-Konfiguration unten

Wenn man seine Updates auf dem kostenlosen Plan vollständig automatisieren möchte, sollte man ein Cloudflare-API-Token verwenden, seine Zone-ID und einen curl-Befehl nutzen, um die route id des Workers zu erhalten. Dann bearbeite das Skript /root/update-web.sh mit ein paar weiteren nützlichen Befehlen, um die Worker-Route automatisch ein- und auszuschalten:

#!/bin/bash
cd /var/discourse

CF_TOKEN="your_actual_token_here" #<---Cloudflare api token
ZONE_ID="xxxx" #<---from your Cloudflare profile page
ROUTE_ID="xxxx"
WORKER_NAME="my-site-maintenance-page"

echo "➡️ Pulling latest Discourse docker scripts..."
git pull

echo "➡️ Bootstrapping new web container in the background..."
./launcher bootstrap web_only

if [ $? -eq 0 ]; then
    echo "✅ Bootstrap successful!"
    
    # Turn ON the Cloudflare Maintenance Worker
    echo "🚧 Enabling Maintenance Page..."
    curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$ROUTE_ID" \
         -H "Authorization: Bearer $CF_TOKEN" \
         -H "Content-Type: application/json" \
         --data '{"pattern":"*your-site.com/*","script":"'$WORKER_NAME'"}' > /dev/null

    # Swap the containers (The 30-second downtime window)
    echo "🔄 Swapping containers..."
    ./launcher destroy web_only && ./launcher start web_only
    
    # Turn OFF the Cloudflare Maintenance Worker
    echo "🌍 Disabling Maintenance Page..."
    curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$ROUTE_ID" \
         -H "Authorization: Bearer $CF_TOKEN" \
         -H "Content-Type: application/json" \
         --data '{"pattern":"*your-site.com/*","script":null}' > /dev/null

    echo "🚀 Done! Site updated with zero visible downtime."
else
    echo "❌ Bootstrap failed! Aborting swap to keep current site online."
fi 

Ich verwende die vorherige Version des Skripts, weil ich nicht alles automatisieren möchte und gerne bei Updates/Neuaufbauten anwesend bin. Ich füge die Worker-Route einfach kurz vor dem Update hinzu und entferne sie danach. Das dauert nur ein paar Sekunden.

Meine allgemeinen Schritte sind:

  1. Die Worker-Route auf Cloudflare hinzufügen
  2. Per SSH in Hetzner einloggen
  3. Systemupdates durchführen (z. B. sudo apt update && sudo apt upgrade -y) und den Server bei Bedarf neu starten
  4. Erneut per SSH einloggen, falls ein Neustart erforderlich war
  5. ./update-web.sh ausführen
  6. Die Worker-Route auf Cloudflare entfernen