Discourse auf einem privaten Internet mit Cloudflare Tunnel installieren

Da Discourse jetzt auf einem Raspberry Pi ausgeführt werden kann, wird die Ausführung einer kleinen Instanz in Ihrem Heim-Labor zu einem gängigen Anwendungsfall. Viele private Internetanbieter blockieren jedoch den eingehenden Datenverkehr zu den Ports 80/443, die Discourse benötigt.

Für unsere Demoseite unter https://discourse-on-a-pi.falco.dev/ haben wir Cloudflare Tunnel verwendet, um dies zu umgehen, und Sie können das auch tun!

Richten Sie Ihren Tunnel ein

Folgen Sie zuerst dieser Anleitung:

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide

Die einzige Änderung, die Sie vornehmen müssen, ist die Änderung der URL von url: http://localhost:8000 zu url: http://localhost:80. Lassen Sie den Tunnel bereits im Hintergrund laufen.

Deaktivieren Sie Rocket Loader

Sie müssen Cloudflare Rocket Loader deaktivieren, damit Discourse ordnungsgemäß funktioniert.

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Installieren Sie Discourse

Folgen Sie How to install Discourse in production, aber drücken Sie STRG+C, nachdem die Datei app.yml erstellt wurde und Sie einen Countdown von 5 Sekunden erhalten.

Bearbeiten Sie nun die ersten Zeilen der Datei, sodass sie wie folgt aussehen:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

und fügen Sie die folgende Zeile unter dem Abschnitt env: hinzu:

DISCOURSE_FORCE_HTTPS: true

Führen Sie dann ./launcher rebuild app aus.

Während Sie warten, richten Sie eine Page Rule ein, um immer zu HTTPS umzuleiten, wie hier gezeigt:

In wenigen Minuten ist Ihre neue Discourse-Instanz unter der Domain verfügbar, die Sie im Tunnel-/Discourse-Konfiguration verwendet haben :tada:.

38 „Gefällt mir“

Ich denke, es ist besser, den Port zu erwähnen. Wenn der Benutzer sich entscheidet, einen Argo Tunnel zu verwenden, muss er seinen Port so einrichten, dass er mit den Tunnel-Einstellungen übereinstimmt. Zum Beispiel:

-80:80
#-443:443

Dann muss er den Tunnel zum Lauschen bringen
http://localhost:80

Was ich verwende, ist die Verwendung eines Unix-Sockets, um sie zu verbinden.

5 „Gefällt mir“

Ist das nicht das, was ich hier erwähne:

?

7 „Gefällt mir“

Hallo Rafael,

Danke für das Tutorial.

Ich habe alles gemäß Ihrer obigen Anleitung befolgt und alles funktioniert einwandfrei, jedoch;

Wenn ich auf den Link in der E-Mail klicke, um mein Konto zu aktivieren, werde ich zurück zur richtigen Webseite mit einem Aktivierungsbutton weitergeleitet, aber dieser Button funktioniert nicht. Ich habe in diesem Forum nach Anleitungen gesucht und es sieht so aus, als ob es ein Problem mit der Domain-zu-IP-Zuordnung gibt?

Ich habe bestätigt, dass force_https in der Konfiguration auf true gesetzt ist.

Haben Sie irgendwelche Gedanken / sind Sie auf dieses Problem gestoßen (Screenshot angehängt) mit dem Button, der nichts tut?

3 „Gefällt mir“

Okay, das habe ich behoben.

Stellen Sie einfach sicher, dass Rocket Loader deaktiviert ist :wink:

Prost!

6 „Gefällt mir“

Endlich Discourse auf Raspberry Pi installiert. Aber ich habe Probleme mit Cloudflare Tunnels.

Ich kann nicht über die Domain auf die Discourse-Seite zugreifen, etwas Seltsames in der config.yml-Konfiguration?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 „Gefällt mir“

Was ist die Ausgabe des Tunnelbefehls? Sie sollte explizit auf Fehler in der Konfiguration hinweisen.

3 „Gefällt mir“

cloudflared Tunnel-Infos \u003cNAME\u003e Ausgabe:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF Standard-Pfad für Ursprungszertifikat kann nicht ermittelt werden. Keine Datei cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR Sie müssen den Pfad zum Ursprungszertifikat mit der Option --origincert angeben oder die Umgebungsvariable TUNNEL_ORIGIN_CERT festlegen. Weitere Informationen finden Sie unter https://developers.cloudflare.com/argo-tunnel/reference/arguments/. originCertPath=
Fehler beim Parsen der Tunnel-ID: Fehler beim Auffinden des Ursprungszertifikats: Client hat keinen Ursprungszertifikatspfad angegeben, als er vom Terminal ausgeführt wurde
2 „Gefällt mir“

Es sieht so aus, als hätten Sie die Zertifikatsdatei verlegt. Wenn Sie als Root ausgeführt werden, sollte sich die Datei unter

/root/.cloudflared/

befinden und nicht dort, wo Sie sie platziert haben, wie in

2 „Gefällt mir“

Ich habe bereits eine cert.pem-Datei.

2 „Gefällt mir“

Und versuchen Sie, den Tunnel als pi-Benutzer oder als root zu starten?

3 „Gefällt mir“

Ich verwende diesen Befehl als pi-Benutzer

cloudflared tunnel run <UUID oder NAME>

2 „Gefällt mir“

Hallo @bekircem,

Es sieht so aus, als ob Ihr Cloudflared eine Verbindung zu Cloudflares Edge herstellen konnte.

Haben Sie das Routing mit einem CNAME zu Ihrer Argo Tunnel ID auf Cloudflare aktiviert?

Viele Grüße,

Alex.

3 „Gefällt mir“

Hallo @Stigin, danke für die Antwort.

Ja, ich habe das Routing von der Befehlszeile aus aktiviert.

2 „Gefällt mir“

Interessant, @bekircem – Hmm!!

Welchen Fehler erhalten Sie derzeit, wenn Sie Ihre Website-Adresse aufrufen? Ist es nur eine generische Cloudflare Argo Tunnel-Fehlerseite?

Könnten Sie uns bitte Ihre laufenden Container zeigen, indem Sie den Befehl ausführen: docker ps und uns Ihre aktuell laufenden Tunnel mit cloudflared tunnel list anzeigen? || Stellen Sie sicher, dass Sie Ihre Argo-Route / alle nicht relevanten Container ausblenden! :wink:

Alex.

3 „Gefällt mir“

Welche Fehlermeldung erhalten Sie derzeit, wenn Sie Ihre Website-Adresse aufrufen? Ist es nur eine generische Cloudflare Argo Tunnel-Fehlerseite?

Nein, es gibt keine Cloudflare Argo Tunnel-Fehlerseite.

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   „/sbin/boot“   11 Stunden   Up 11 Stunden   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Wenn Sie diesen Befehl als Root-Benutzer ausführen cloudflared tunnel list

2022-01-24T15:55:03Z INF Der Standardpfad für das Ursprungszertifikat kann nicht ermittelt werden. Keine Datei cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR Sie müssen den Pfad zum Ursprungszertifikat mit der Option --origincert angeben oder die Umgebungsvariable TUNNEL_ORIGIN_CERT festlegen. Weitere Informationen finden Sie unter https://developers.cloudflare.com/argo-tunnel/reference/arguments/. originCertPath=
Fehler beim Auffinden des Ursprungszertifikats: Der Client hat beim Ausführen vom Terminal aus keinen Pfad für das Ursprungszertifikat angegeben.

Wenn Sie diesen Befehl als pi-Benutzer ausführen cloudflared tunnel list

Sie können detailliertere Informationen zu jedem Tunnel mit `cloudflared tunnel info <name/uuid>` erhalten.
ID                                   NAME      CREATED              CONNECTIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z

Ist das normal?

Wir müssen einen Subdomain für DISCOURSE_HOSTNAME in der Datei config.yml verwenden, richtig?

Update: Ich habe Cloudflared deinstalliert und als Root-Benutzer neu installiert, und es funktioniert jetzt. Ich verstehe immer noch nicht, wo genau ich bei meinem vorherigen Versuch falsch lag.

2 „Gefällt mir“

Irgendwie habe ich die Website endlich auf einem Raspberry zum Laufen gebracht und sie ist live.

Ich verstehe nicht wirklich, wie. Ich habe Cloudflared entfernt und es als Root-Benutzer neu installiert. Und es funktioniert…

Ich habe zwei Fragen:

1- Es scheint, dass mein SSL-Zertifikat nicht richtig funktioniert, daher kann ich mich nicht in mein Administratorkonto bei Discourse einloggen. (Es scheint im Inkognito-Tab zu laufen. Vielleicht liegt es am Cache.) Verwenden Sie Full oder Full (strict)?

2- Ich habe Fragen zum Ausführen von Cloudflared als Dienst. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

Ich habe den Tunnel mit dem Befehl cloudflared tunnel run <UUID oder NAME> ausgeführt. Aber wenn ich das iTerm-Fenster schließe, wird er dann aufhören zu funktionieren?

Wenn Sie sich bereits angemeldet haben und eine Konfigurationsdatei in ~/.cloudflared/ haben, werden diese nach /etc/cloudflared/ kopiert.

Wenn Sie keine Konfigurationsdatei haben, müssen Sie eine config.yml-Datei mit den oben aufgeführten Feldern erstellen. Sie können eine benutzerdefinierte Datei übergeben, indem Sie cloudflared --config CONFIG-FILE service install ausführen.

Ich habe nachgesehen, ich habe keine Konfigurationsdatei in /etc/cloudflared/. Was soll ich in diesem Fall tun, um diesen Dienst automatisch auszuführen?

Danke.

2 „Gefällt mir“

Spezifischere Fragen zum Cloudflare Tunnel-Dienst erhalten möglicherweise bessere Antworten unter https://community.cloudflare.com/tag/cloudflaretunnel

3 „Gefällt mir“

Hallo @bekircem,

Ich glaube, eine Neuinstallation hätte das Problem behoben, dass cloudflared das Zertifikat nicht findet…

Was das Ausführen von Cloudflare als Dienst betrifft: Die Konfigurationsdatei, die Sie beim manuellen Ausführen des Dienstes erstellt haben, muss nach /etc/cloudflared verschoben werden.

Ich bin mir nicht sicher, ob ich persönliche Websites hier verlinken darf. Bitte lassen Sie mich wissen, wenn ich dies entfernen muss, aber ich habe dies in einem meiner Blogs unter dem Abschnitt behandelt: ‘Setup and Run Cloudflared as a Service

Lassen Sie uns wissen, wie es Ihnen ergeht!

Alex.

4 „Gefällt mir“

Vielen Dank für die Antwort.

Toller Blogbeitrag, danke fürs Teilen.

Cloudflared als Dienst ausführen

sudo cloudflared service install

Die Datei config.yml wird automatisch nach /etc/cloudflared/ kopiert.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

Und es funktioniert großartig. Ich habe noch keinen Neustart versucht, aber ich hoffe, es wird funktionieren.

4 „Gefällt mir“