Ich wollte nur die Schritte teilen, die ich unternommen habe, um einen Unterordner zusammen mit Cloudflare einzurichten, insbesondere wenn die Hauptwebsite bereits live ist und die Root-Domain nicht (auch nicht vorübergehend) auf den Forum-Server zeigen kann.
Wichtige Punkte
- Die vorhandene
meineWebsite.comzeigt derzeit auf1.1.1.1und ist live - Wir sollten
meineWebsite.com/forum(und seine Unterverzeichnisse) auf2.2.2.2leiten - Da wir während der Discourse-Installation die Letsencrypt-Validierung (die prüft, ob die Domain den aktuellen Server auflöst) nicht durchführen können, sollten wir die DNS-Validierung verwenden
Änderungen in app.yml
Letsencrypt-Updates
Erstellen Sie eine neue Letsencrypt-Vorlage und legen Sie sie in app.yml gemäß diesem Thema fest: LetsEncrypt DNS Validation Template Using Cloudflare
Stellen Sie jedoch sicher, dass Sie nur die Methode issue_cert aus diesem Beitrag kopieren und den Rest des Inhalts aus der ursprünglichen web.letsencrypt.ssl.template.yml übernehmen (da diese nach der Veröffentlichung des Themas geändert wurde).
LETSENCRYPT_CF_TOKEN: ""
LETSENCRYPT_CF_ACCOUNT_ID: ""
LETSENCRYPT_CF_ZONE_ID: ""
LETSENCRYPT_DNS_PROVIDER: "dns_cf"
- Sie können das Cloudflare-Token auf der Seite CF Mein Profil → “API Tokens” erstellen.
- Account ID und Zone ID werden auf der Übersichtsseite der Domain angezeigt.
- Lassen Sie den Wert des DNS-Anbieters wie oben angegeben.
Unterordner-Updates
Gemäß diesem Thema Serve Discourse from a subfolder (path prefix) instead of a subdomain setzen Sie DISCOURSE_RELATIVE_URL_ROOT: /forum unter env: und aktualisieren Sie den Abschnitt run:.
Beachten Sie diesen Beitrag für Benutzer-IPs: Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21
Neuaufbau
Nachdem Sie die app.yml geändert haben, um den Neuaufbau-Befehl auszuführen, müssen wir die Discourse-Prüfung überspringen, damit die Domain die IP des aktuellen Servers auflöst (da unsere meineWebsite.com bereits auf 1.1.1.1 zeigt und Discourse die Root-Domain prüft). Führen Sie dazu aus:
./launcher rebuild app --skip-connection-test
Cloudflare-Setup
Ich weiß, dass einige Leute empfehlen, Workers zu verwenden, um /forum auf 2.2.2.2 zu leiten. Ich fand es jedoch viel einfacher, dies mit Load Balancing zu tun. Mit Workers konnte ich CSS/JS-bezogene Probleme sowieso nicht lösen, auch nicht mit deaktiviertem Rocket Loader und ähnlichen Einstellungen. Also,
- Aktivieren Sie den Load Balancer (unter Traffic)
- Wählen Sie “Manage Pools” → “Create”
- Erstellen Sie 2 Pools (für die Hauptwebsite und für das Forum), jeder sollte nur einen Endpunkt haben
- Erstellen Sie einen Load Balancer, der Hostname sollte
meineWebsite.comsein - Wählen Sie unter Endpunkte beide Pools aus
- Überspringen Sie Monitore (da wir die Servergesundheit nicht überwachen müssen, sollte die Hauptwebsite immer auf
1.1.1.1und das Forum auf2.2.2.2zeigen), überspringen Sie Traffic Steering (standardmäßig deaktiviert) - Erstellen Sie unter Custom Rule eine mit der Pfadbedingung
/forumund leiten Sie sie auf den Forum-Endpunkt.
- Speichern/Bereitstellen
Notizen
- Aus irgendeinem Grund hat das Kopieren der Beispiel-app.yml und der anschließende Neuaufbau bei mir nicht funktioniert (wahrscheinlich habe ich etwas falsch gemacht). Als Lösung habe ich zum ersten Mal
discourse-setupmit einer anderen Domain ausgeführt und dann, zusammen mit anderen app.yml-Änderungen, den Hostnamen geändert und den endgültigen Neuaufbau durchgeführt. - Discourse generiert 2 Zertifikate von Letsencrypt,
RSA certundECDSA cert, und Letsencrypt hat ein Limit von 5 Zertifikaten pro exakter Domain pro Woche. Wenn Sie 2 Mal hintereinander etwas falsch machen, wird beim 3. Versuch nur ein Zertifikat ausgestellt und das Forum funktioniert nicht (Sie können das aktuelle Limit mit diesem Skript überprüfen GitHub - sahsanu/lectl: Script to check issued certificates by Let's Encrypt on CTL (Certificate Transparency Log) using https://crt.sh). - CF Load Balancer ist nicht kostenlos, aber wenn man die Kosten von (derzeit) 5 USD pro 500.000 DNS-Anfragen bedenkt, ist er meiner Meinung nach im Vergleich zum Aufwand mit Nginx usw. lohnenswert.

