Multisite-Konfiguration mit Let's Encrypt und ohne Reverse Proxy einrichten

Diese Anweisungen sollten als Beta und für Personen betrachtet werden, die mit einer Standardeinrichtung vertraut sind

Aber im Moment (2023.02.11) funktionieren diese Anweisungen nicht!! (Siehe Set up Let’s Encrypt with multiple domains / redirects, wie die letsencrypt-Einstellung aktualisiert werden kann, um den fullpath-Teil hinzuzufügen. Ich werde dies in Kürze aktualisieren, um diese Änderungen widerzuspiegeln.)

Ich habe diese Anleitung vor ein paar Wochen entwickelt, benötige aber jemanden, der sie testet und prüft, ob sie für jemand anderen funktioniert. Bitte antworten Sie, wenn Sie es versuchen, und teilen Sie mir mit, ob es funktioniert und ob etwas unklar ist.

Und weiter geht’s. . .

Diese Anleitung dokumentiert grob, wie eine Multisite-Einrichtung mit 2 zusätzlichen Hosts (insgesamt 3) eingerichtet wird.

Es wird davon ausgegangen, dass Sie eine funktionierende Offizielle Standardinstallation von Discourse oder eine 2-Container-Installation (Move from standalone container to separate web and data containers) haben.

Domainname für die primäre Website

Subdomain für die 2. Website

Subdomain für die 3. Website

Datenbankpasswort (dasselbe wie DISCOURSE_DB_PASSWORD) oder discourse in app.yml

Der Einfachheit halber ist dies für eine Hauptwebsite namens =domain= mit zwei zusätzlichen Websites =two=.=domain= und =three=.=domain=. Sie können beliebige Namen verwenden, aber um der Einfachheit halber in dieser Vorlage ist es einfacher, keinen unterschiedlichen short name (für den Datenbanknamen und den Titel des Unterforums) und full hostname zu haben.

Fügen Sie in app.yml oder web_only.yml nach den Plugins hooks hinzu

  before_bundle_exec:
    - file:
        path: $home/config/multisite.yml
        contents: |
         =two=:
           adapter: postgresql
           database: =two=
           pool: 25
           timeout: 5000
           host: data
           password: NThmZTNjZjZhOTczNmVj
           host_names:
             - =two=.=domain=
         =three=:
           adapter: postgresql
           database: =three=
           pool: 25
           timeout: 5000
           host: data
           password: NThmZTNjZjZhOTczNmVj
           host_names:
             - =three=.=domain=

  after_db_migrate:
    - exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate

  after_ssl:
   # letsencrypt mitteilen, welche zusätzlichen Zertifikate abgerufen werden sollen
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /-d =domain= /
        to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
        global: true
   # nicht alle Hosts zurück zur Hauptdomain umleiten
    - replace:
        filename: "/etc/nginx/conf.d/discourse.conf"
        from: /if \\(\\$http_host[^\\}]*\\}/m
        to: ""

Fügen Sie den Abschnitt after_postgres in app.yml oder data.yml hinzu

  - exec: sudo -u postgres createdb =two= || exit 0
    - exec:
        stdin: |
          grant all privileges on database =two= to discourse;
        cmd: sudo -u postgres psql =two=
        raise_on_fail: false

    - exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
    - exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
    - exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
    - exec: sudo -u postgres createdb =three= || exit 0
    - exec:
        stdin: |
          grant all privileges on database =three= to discourse;
        cmd: sudo -u postgres psql =three=
        raise_on_fail: false
    - exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
    - exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
    - exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'

Danach,

./launcher rebuild app

oder

./launcher rebuild data
./launcher rebuild web_only
10 „Gefällt mir“

Ich habe es gerade ausprobiert, sogar zweimal, weil ich es kaum glauben konnte, dass es beim ersten Mal schon problemlos funktioniert hat :smile: Ich habe lediglich kopiert, die Domains und das Passwort angepasst und dann in die jeweiligen Dateien einer frischen Installation mit 2 Containern eingefügt. :ok_hand:

Bitte gib Feedback, falls etwas unklar ist. Ich musste nur kurz über diesen Absatz nachdenken:

Es scheint zu suggerieren, dass ein 2-Container-Setup notwendig ist, um der Anleitung zu folgen, aber das ist es nicht. Und ich habe nicht verstanden, warum auf Beitrag 48 des Themas verwiesen wird und nicht auf den ersten Beitrag.

2 „Gefällt mir“

Danke! Ich werde mir das ansehen. Das sind genau die Art von unachtsamen Dingen, von denen ich gehofft hatte, dass du mich darauf hinweisen würdest!

EDIT: Danke! Ich hatte unachtsamerweise meinen aktuellen Standort im 2-Container-Thema kopiert, also habe ich das korrigiert und die Formulierung so geändert, dass es mit jeder funktionierenden Installation funktioniert.

Danke!

2 „Gefällt mir“

Hallo

Ich habe mit einer Standard-Installation von Discourse (bei DigitalOcean) begonnen und dann Nginx eingerichtet (unter Verwendung dieser Anweisungen), da ich ein paar Drupal-Websites auf demselben Droplet haben wollte.

Wenn ich eine weitere Instanz von Discourse haben möchte, sollte ich dann die oben genannten Anweisungen befolgen?

Oder wäre dieser Leitfaden besser?

Danke!
/Sifaan

Diese Anweisungen gelten für den Fall, dass kein Reverse-Proxy verwendet wird. Ich empfehle, dass du die Anleitung Multisite-Konfiguration mit Docker befolgst. Die von dir verlinkten Anweisungen könnten funktionieren, aber ich empfehle dir, zuerst hier die Anleitung zu befolgen.

2 „Gefällt mir“

Danke; ich sehe, dass beide Seiten damit dieselbe SMTP-Konfiguration verwenden würden :frowning:
Gibt es eine Möglichkeit, das zu umgehen?
Oder wäre der andere Leitfaden besser (sieht so aus, als müsste man etwas Arbeit investieren, um die bestehende Seite ins Docker-Netzwerk zu integrieren)

Alternativ: Ist es möglich, eine andere Codebasis zu installieren, zum Beispiel unter /var/discourse2?
(Das kostet mich etwa 500 MB, aber es lohnt sich, wenn es mir die Kopfschmerzen erspart.)

Ja.

Verwende kein Multisite.

Ja, aber du musst einfach eine Installation mit zwei Containern erstellen und dann eine web_only2.yml-Datei haben. (Ich glaube, man kann zwei Dateien im Stil von app.yml haben, aber dann betreibst du unnötigerweise zwei PostgreSQL-Instanzen). Ich denke jedoch, dass du zwei Redis-Instanzen benötigst.

3 „Gefällt mir“

Danke; da ich mit der Aufteilung von Daten- und Web-Container nicht so vertraut bin, habe ich einfach einen weiteren eigenständigen Container erstellt, der sich an diese Anleitung orientiert (und die von Certbot erstellten Zertifikate scheinen zu funktionieren). Allerdings gibt es derzeit ein Problem mit der Mailgun-Konfiguration – Aktivierungs-E-Mails werden an Gmail gesendet, aber E-Mails, die auf meinem Registrar (Dreamhost) gehostet werden, schlagen fehl :frowning:

Wie viel zusätzliche Last würde die zusätzliche Postgres-Instanz verursachen?
Ich habe deinen Beitrag zur Aufteilung gelesen und werde es versuchen, wenn die Einsparungen erheblich sind.

Wahrscheinlich nicht allzu viel. Nur ein wenig RAM. Ich habe leider kaum eine Ahnung, wie viel.

1 „Gefällt mir“

Neulich habe ich das versucht, habe aber ein paar Probleme mit dem Leitfaden:

  1. Ich kann das Datenbankpasswort nicht finden (oder wofür es in der Datei überhaupt verwendet wird).
  2. Meine app.yml-Datei enthielt ursprünglich keinen Abschnitt „after_postgres“, also habe ich einen unter „hooks“ hinzugefügt, um ihn an die anderen (after_ssl, after_db_migrate, usw.) anzupassen. Falls dieser Abschnitt an der falschen Stelle steht, lass es mich bitte wissen – ich bin völlig neu in diesem Bereich.
  3. Wenn ich die Syntax der YAML-Datei auf http://www.yamllint.com/ überprüfe, erhalte ich die Fehlermeldung (<unknown>): did not find expected key while parsing a block mapping an der Zeile, in der ich den Abschnitt „after_postgres“ unter „hooks“ eingefügt habe.

Es wäre sehr hilfreich, wenn du die Schritte zur Bearbeitung der app.yml-Datei genauer erläutern könntest.

2 „Gefällt mir“

Vielleicht brauchst du kein Passwort, wenn du ein Single-Container-Setup verwendest (ein früherer Beitrag deutet darauf hin).

Das Hinzufügen des Abschnitts, wie du vorschlägst, sollte funktionieren.

Ich kann nicht ganz erkennen, was schiefgehen könnte. Ich werde mich in ein paar Tagen genauer damit befassen.

1 „Gefällt mir“

Ich überlege, dies einzurichten, da mein Freund und ich ein paar verschiedene Foren testen möchten, bevor wir entscheiden, ob wir mehr in sie investieren wollen, möglicherweise mit separatem Hosting und so weiter.

Ich dachte daran, sie auf verschiedenen Domains zu haben. Ich verstehe, dass dies zu einiger Verwirrung führen kann, da die Leute E-Mails von nur der Haupt-SMTP-Adresse erhalten, aber wissen Sie, ob separate Domains andere Probleme verursachen würden?

Discourse hat eine einzige Domain für alle seine Geschäfts- und Standardkunden. Sie können die E-Mail-Adresse für Benachrichtigungen beliebig festlegen, z. B. shortname@whatevermail.com.

2 „Gefällt mir“

Das freut mich sehr zu hören, danke!

1 „Gefällt mir“

Hallo, vielen Dank für das Tutorial.

Leider habe ich ein Problem, zusätzliche Discourse-Instanzen auf einem einzigen Server/einer einzigen IP-Adresse auszuführen.
Zuerst habe ich die Dokumentation befolgt, um eine eigenständige Website einzurichten, und das war erfolgreich.
(z. B. test.john.com - ein Subdomain-Redirect zur einzelnen IP)
Als ich nun versuchte, weitere Discourse-Instanzen hinzuzufügen (z. B. test.joe.com und test.doe.com - andere Subdomains von anderen Websites).
Ich habe versucht, Ihren Schritten zu folgen, aber es war nicht erfolgreich und jetzt bin ich ratlos.

Einige Fragen:

  1. Wie werden diese beiden weiteren Websites installiert? Wie das Kopieren von /standalone.yml in das containers-Verzeichnis und das Umbenennen? Und dann die normale Installation durchführen? (z. B. ./launcher rebuild joe)
  2. Ihre Anweisungen besagen, dass die Änderungen in der app.yml vorgenommen werden sollen, indem der gesamte obige Code angehängt wird – was ich davon ausgehe, dass es in die erste erfolgreich installierte Datei (test.john.com) eingefügt werden soll?

Abgesehen von denen im container-Verzeichnis habe ich eine config/multisite.yml erstellt und so sieht mein Code aus:

secondsite:
  adapter: postgresql
  database: b_discourse
  username: postgres
  password: postgres
  host: dbhost
  pool: 5
  timeout: 5000
  host_names:
    - test.joe.com
...
...
# und die Konfiguration der dritten Website

Ich bin mir jedoch nicht sicher, ob es noch andere Dinge gibt, die ich konfigurieren muss.

Ich freue mich über jede Antwort. Danke!

Nein. Sie fügen die Dinge wie beschrieben zur app.yml hinzu. Dadurch wird die mutlisite.yml innerhalb des Containers erstellt. Es wird eine einzige Instanz geben und sie wird für alle Domains funktionieren, vorausgesetzt, die DNS für alle davon zeigen dorthin. Dies ist nicht dazu gedacht, mehrere Discourse-Container für jeden Domainnamen zu haben.

Nach meinem letzten Kenntnisstand funktionierten diese Anweisungen so, wie sie geschrieben wurden. Fügen Sie einfach die Zeilen zu Ihrer app.yml hinzu und es sollte funktionieren. Sie müssen keine anderen Dateien anfassen.

1 „Gefällt mir“

Einzelne Website-Normaleinrichtung funktioniert perfekt. Kein Problem.
Aber ich habe viele Kombinationen für Multisite ausprobiert. Einzelne app.yml-Konfiguration oder getrennt nach web_only.yml, data.yml usw. Ich habe andere Tipps unter Multisite-Konfiguration mit Docker oder Umzug von einem eigenständigen Container zu separaten Web- und Datencontainern ausprobiert.

Was den Migrationspart angeht, sind alle Kombinationen immer fehlgeschlagen… >> bundle exec rake multisite:migrate

********************** letzter Teil des Prozesses**************************
2023-02-11 17:50:43.853 UTC [61] LOG: Herunterfahren wird eingeleitet
162:M 11 Feb 2023 17:50:43.866 # Benutzer hat das Herunterfahren angefordert...
162:M 11 Feb 2023 17:50:43.866 * Speichern des finalen RDB-Snapshots vor dem Beenden.
162:M 11 Feb 2023 17:50:43.881 * DB auf Festplatte gespeichert
162:M 11 Feb 2023 17:50:43.882 # Redis ist nun bereit zum Beenden, auf Wiedersehen...
2023-02-11 17:50:44.007 UTC [57] LOG: Das Datenbanksystem wurde heruntergefahren.


FEHLGESCHLAGEN
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate fehlgeschlagen mit Rückgabewert #&lt;Process::Status: pid 582 exit 1&gt;
Ort des Fehlschlags: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec fehlgeschlagen mit den Parametern "cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate"
Bootstrap fehlgeschlagen mit Exit-Code 1
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann helfen, das Problem zu diagnostizieren.

Ich habe überprüft, was erstellt wurde und was nicht, bis zum Fehlschlag.
Subdomain-Datenbanken werden erstellt, aber die Migration schlug fehl. Subdomain-Nginx-Konfigurationen oder multisite.yml konnten nicht erstellt werden, als ich die overlay2-Ordner oder irgendwo anders überprüft habe.

./launcher bootstrap, destroy, start, stop, rebuild oder frische Einrichtung viele Male … Alle Befehle ausprobiert, aber nichts ist passiert… :slight_smile:

Ist dieses Tutorial noch gültig für v3.1.0.beta 2 oder was könnte ich übersehen?
Irgendwelche Ideen, bitte?

1 „Gefällt mir“

Nein. Etwas mit Let’s Encrypt hat sich irgendwann geändert. Ich werde Sie bitten, genauer zu untersuchen, was alles im Container geändert werden muss, um mehrere Domains zu verwalten.

1 „Gefällt mir“

Ich verwende diese Methode und sie funktioniert gut. Ich habe derzeit kein HTTPS aktiviert, daher kann ich nichts zu den Schwierigkeiten mit Let’s Encrypt sagen.

Ich benutze dieses Setup seit Jahren mit meinen Staging-Servern. Seit dem Update auf 3.5.0.beta5-dev werde ich jedoch auf die primäre Website umgeleitet, wenn ich eine Subdomain eingebe.

Ich war so glücklich, mich nicht mit all den Zertifizierungsangelegenheiten befassen zu müssen. Aber jetzt bin ich ziemlich verloren, gibt es Tools, um zu debuggen, was passiert?

1 „Gefällt mir“