Ich habe versucht, eine private Instanz von Discourse zu installieren, indem ich den offiziellen Anleitungen unter https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md gefolgt bin. Obwohl die Skripte äußerst komplex aussehen, musste ich die Dateien container.yml und discourse-setup manuell ändern, um meine eigenen Einstellungen vorzunehmen…
Problem: Trotz seiner Komplexität erlaubt das Installationsskript keine Änderung der offenen Ports! Ports 80/443 können auf meinem Server nicht verwendet werden, da sie von nginx belegt sind. Also musste ich das Setup-Skript erneut anpassen, um die Ports 3080/3443 als erforderliche Ports für den Zugriff auf Discourse festzulegen.
Dann gelang es mir, alle Container zum Laufen zu bringen. Als ich den Stack mit Portainer betrachtete, stellte ich fest, dass die Anwendung startet und leise stoppt und die Protokolle keine Informationen über den Grund liefern. Da Redis und Postgres keine Ports veröffentlichen, könnte die Discourse-App fehlschlagen, weil sie keine Verbindung zu diesen Komponenten herstellen kann? Was habe ich übersehen oder falsch gemacht?
Es scheint, als hätten Sie vom Standard-Installationsverfahren abgewichen, indem Sie separate Container für Redis und Postgres eingerichtet haben. Daher habe ich leider keine sofortige Antwort für Sie. Wie haben Sie die Redis-Einstellungen in Discourse konfiguriert?
Eine weitere Sache: Ich sehe redis:4-alpine. Ich fürchte, Sie müssen auf eine neuere Version von Redis umsteigen, da Discourse Version 6.20 oder höher benötigt. Ich glaube jedoch nicht, dass dies die Ursache Ihres Problems ist.
Das Setup-Skript funktioniert nur für eine Standardinstallation. Wenn Sie etwas Komplexeres vorhaben, müssen Sie die YAML-Datei manuell bearbeiten. Das ist viel einfacher, als das Skript zu ändern.
Wenn Sie das bereitgestellte PostgreSQL und Redis nicht verwenden werden, sind Sie auf sich allein gestellt, wenn Sie herausfinden, warum Ihre nicht funktionieren. Es gibt zu viele Dinge, die es sein könnten, als dass wir sie erraten oder ableiten könnten. Ich würde eine Standardinstallation auf einer separaten VM empfehlen, um zu sehen, wie die Dinge funktionieren, bevor Sie eine sehr komplexe Einrichtung versuchen.
Ich habe keine ‘nicht standardmäßige’ Installation durchgeführt! Ich habe, wie in der Dokumentation beschrieben, den gesamten Kram von Github heruntergeladen, nur die exponierten Ports geändert und das Skript ausgeführt:
Ich habe nichts an der Redis-Konfiguration geändert, noch an der von Postgres.
Ich habe nichts an der Redis-Version geändert.
Diese Softwareteile wurden vom originalen discourse-setup-Skript installiert.
@pfaffman Was meinst du mit „die yml von Hand bearbeiten“? Welche yml meinst du? Es gibt viele .yml-Dateien in „containers“…
Übrigens habe ich tatsächlich einen Reverse-Proxy auf der Box, der eine einfache Konfiguration zu haben scheint: mehrere subdomain.conf-Dateien, die die Weiterleitung subdomain:80 → Port XXX definieren. Ist das, was benötigt wird?
Ich würde eine Standardinstallation auf einer separaten VM empfehlen, um zu sehen, wie die Dinge funktionieren, bevor du ein sehr komplexes Setup versuchst.
Ich möchte kein komplexes Setup , ich muss nur Discourse zusammen mit einigen anderen Containern ausführen, wofür Docker ja gedacht ist…
Im Allgemeinen installiert discourse-setup keine separaten PostgreSQL- und Redis-Instanzen und schon gar nicht die Versionen 12 und 4.
Können Sie bitte Ihre Konfiguration und die Änderungen, die Sie an container.yml und den Skripten vorgenommen haben, posten? Achten Sie darauf, vertrauliche Einstellungen zu schwärzen.
Teilen Sie uns außerdem mit, bei welchem Commit des discourse_docker-Repositorys Sie sich befinden.
Sie haben sowohl discourse-setup als auch eine Datei bearbeitet, die überschrieben wird, wenn Sie discourse-docker aktualisieren. Alles andere als Ihre app.yml zu ändern, ist eindeutig nicht standardmäßig.
Warum? Und was auch immer Sie dort ändern mussten, so macht man es nicht. Sie müssen diese Änderungen in Ihre app.yml eintragen.
Discourse funktioniert nicht auf einem nicht standardmäßigen Port, daher ist dies keine Standardinstallation.
Die Standardinstallation beinhaltet PostgreSQL und Redis im einzelnen Container. Wie bereits erwähnt, verwenden Sie nicht unterstützte Versionen von Redis und PostgreSQL. Sie können auch eine Zwei-Container-Installation durchführen, wie hier beschrieben Umzug von einem Standalone-Container zu separaten Web- und Datencontainern (und Sie können ./discourse-setup --two-container verwenden, damit discourse-setup separate Daten- und Webcontainer erstellt, obwohl die Wartung etwas komplizierter ist (Sie müssen wissen, wann der Datencontainer aktualisiert werden muss).
OK, dann muss ich:\n- die gesamte Software deinstallieren, die mit den modifizierten Skripten installiert wurde (ich hoffe, das ist leicht rückgängig zu machen).\n- das Skript erneut herunterladen. Ich habe git clone https://github.com/discourse/discourse_docker.git /var/discourse für die aktuelle Installation verwendet: Ist das in Ordnung?\n- möglicherweise einige Einstellungen nur in der Datei app.yml ändern, bevor ich ./discourse-setup ausführe.\n- das Installationsskript für eine Standardinstallation ausführen (ich bevorzuge einen einzelnen Container).\n- den Nginx-Proxy einrichten, um discourse.example.com:80/443 an den entsprechenden Container weiterzuleiten. Gibt die Dokumentation Hinweise für diesen Teil?\n\nBitte vervollständigen Sie die Liste, falls ich einen Schritt übersprungen habe!\n\nVielen Dank nochmals für Ihre Hilfe!
app.yml wird von discourse-setup erstellt. Sie können discourse-setup nicht ausführen, wenn es nicht auf die Ports zugreifen kann. Wenn Sie jedoch den Quellcode lesen, werden Sie feststellen, dass Sie ./discourse-setup --skip-connection-test ausführen und es trotzdem laufen lassen können.
Ihr Nginx ist für Let’s Encrypt verantwortlich, daher möchten Sie die Let’s Encrypt-Vorlage auskommentieren. Ich vermute, das wird im oben und unten verlinkten Reverse-Proxy-Thema beschrieben.
You cannot use ./discourse-setup to set up Discourse if another server is using port 80 or 443. You will need to copy and edit samples/standalone.yml with your favorite text editor.
und ich verstehe, dass ich app.ymlvor dem Ausführen von discourse-setup ändern muss, wie bereits in der Einleitung erwähnt:
You cannot use ./discourse-setup to set up Discourse if another server is using port 80 or 443. You will need to copy and edit samples/standalone.yml with your favorite text editor.
Können Sie dann bitte den folgenden Prozess bestätigen:
Lade den gesamten Kram von Github herunter
Führe discourse-setup einmal mit der Option --skip-connection-test aus → dies erstellt containers/app.yml
Ändere app.yml wie oben in der Dokumentation beschrieben
Aktualisiere die Software mit /var/discourse/launcher rebuild app
Erstelle die Nginx-Site, um auf den Discourse-Socket zu verweisen, und starte Nginx neu
Starte schließlich einen Browser, um auf Discourse unter https://discourse.mydomain.com zuzugreifen, was einfach auf die Server-IP verweist.
Den gesamten Kram von Github herunterladen: ERLEDIGT
discourse-setup einmal mit der Option --skip-connection-test ausführen: Alles lief bis zum Ende gut, wo das Skript zurückkehrte
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
Das scheint mir normal zu sein, da der Container versucht, auf dieselben Ports wie der vorhandene Webserver zuzugreifen. Da jedoch kein Discourse-Container erstellt wurde (wie von docker container ls zurückgegeben), möchte ich Sie bitten, dies zu bestätigen, bevor ich mit der Nginw-Konfiguration fortfahre…
Meinen Sie „bevor Sie discourse-setup ausführen“? In diesem Fall, welche Datei sollte ich ändern, da app.yml nicht existiert, bevor ich das Skript ausführe? Ich möchte eine 1-Container-App installieren: Sollte ich dasselbe discourse-setup-Skript erneut ausführen oder den Befehl /var/discourse/launcher rebuild app?
Entschuldigen Sie die Störung, ich muss zu 100 % sicher sein, da ich definitiv kein Experte bin :
Ich führe noch einmal./discourse-setup --skip-connection-test --skip-rebuild aus (der vorherige Lauf erfolgte ohne die Option --skip-rebuild). Ich muss nichts löschen, was vom vorherigen Lauf installiert wurde.
Dann bearbeite ich die vorhandene app.yml-Datei und kommentiere die Ports aus (sie sind bereits auskommentiert)
Sie müssen discourse-setup nie wieder ausführen (es sei denn, Sie ändern vielleicht den Arbeitsspeicher und möchten, dass die Speichereinstellungen auf die empfohlenen Standardwerte aktualisiert werden).\n\nBearbeiten Sie einfach die Ports und bauen Sie neu
Ich habe einen DNS-Eintrag eingerichtet, damit discourse.mydomain.com auf die Server-IP-Adresse zeigt = OK.
Wenn ich einen Browser zu discourse.mydomain.com öffne, lande ich… bei der Nextcloud-Instanz, die auf dem Server läuft. Es scheint, dass die Konfiguration korrigiert werden muss, da der Traffic nicht richtig an den Discourse-Container weitergeleitet wird…
Ich möchte NPM nicht installieren, da ich gelesen habe, dass es kein robustes Werkzeug ist und die Konfiguration für Discourse eine Festverdrahtung von IP-Adressen beinhaltet: Sollte ich es trotzdem tun?