Dies ist eine erweiterte Einrichtung. Befolgen Sie dies nur, wenn Sie erfahren in der Linux-Serveradministration und Docker sind. Sie müssen auch die Commits zu discourse_docker genau beobachten, um sicherzustellen, dass Sie eine Versionsaktualisierung für postgres oder redis bemerken.
Konvertieren Ihrer aktuellen Einrichtung
Es ist mir gelungen, auf zwei Container umzusteigen. Falls jemand anderes Anweisungen benötigt, so hat es für mich funktioniert.
Der Prozess umfasst das Sichern, das Einrichten separater Web- und Datencontainer und das Wiederherstellen der Daten.
-
Sichern Sie Ihre Discourse-Instanz und laden Sie das Backup herunter. Sie können der einfachen Anleitung folgen oder manuell sichern und später wiederherstellen.
-
Stoppen Sie den aktuellen eigenständigen Container
./launcher stop app -
Kopieren Sie
web_only.ymlunddata.ymlaussamples/nachcontainers/und benennen Sie sie um, wie Sie möchten, z. B.web_rocks.ymlunddata2.yml. -
Wenn Sie sie umbenennen, achten Sie bitte auf die Einträge
volumes:indata.ymlundweb_only.yml
Wenn Sieweb_only.ymlinweb_rocks.ymlumbenannt haben, müssen Sie den Eintrag inWeb_rocks.ymlwie folgt ändern:
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
Entsprechend sollten Sie auch in data.yml ähnliche Änderungen vornehmen.
Einrichten des Datencontainers
Beginnen Sie mit data.yml und legen Sie ein Passwort für die Datenbank fest. Dann:
- Wechseln Sie in den Stammordner des Containers
/var/discourse - Führen Sie
./launcher bootstrap data2aus (data2 oder wie auch immer Sie es genannt haben) - Führen Sie
./launcher start data2aus (wieder mit dem neuen Namen) - Wenn alles reibungslos verläuft, können Sie über
./launcher enter data2(wieder mit dem neuen Namen) auf den Container zugreifen - Verlassen Sie den Container mit
exit.
Einrichten des Webcontainers
Modifizieren wir web_only.yml.
Ändern Sie zuerst die Vorlage und legen Sie Ports wie in Ihrer app.yml fest.
Zweitens stellen Sie sicher, dass Sie mit dem richtigen Datencontainer verknüpft sind. Wenn Sie data.yml in „something_else“ umbenannt haben, fügen Sie es für „name“ ein.
# Verwenden Sie den Schlüssel 'links', um Container miteinander zu verknüpfen, d. h. verwenden Sie das Docker --link-Flag.
links:
- link:
name: data
alias: data
Obwohl wir SSH oder andere Ports nicht mehr freigeben möchten, müssen Sie die Ports 80 und 443 für den Webzugriff weiterhin freigeben. Dies hängt davon ab, ob Sie einen Nginx davor laufen haben und wie Sie den Container damit verbinden.
Irgendwo dort finden Sie diesen Block:
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- Geben Sie das Passwort ein, das Sie im Datencontainer festgelegt haben.
- Geben Sie den Alias des Datencontainers ein, den Sie gerade notiert haben. Für
DB_HOSTund fürREDIS_HOST. Er muss mit dem Link-Block übereinstimmen, den wir erwähnt haben. - Sie haben wahrscheinlich den
DB_USERNAMEnicht geändert.
Sie finden die Werte für DISCOURSE_DEVELOPER_EMAILS und DISCOURSE_HOSTNAME und viele mehr. Sie haben diese Werte bereits in Ihrer app.yml. Kopieren Sie sie von dort.
Im Abschnitt Hooks denken Sie daran, alle zusätzlichen Plugins festzulegen, die Sie bereits in app.yml verwenden.
Jetzt sollten Sie bereit sein, es zu bootstrappen:
./launcher bootstrap web_only (wieder mit Ihrem neuen/eigenen Namen)
Sobald es gebootstrappt ist, können Sie web_only starten (verwenden Sie Ihren neuen Namen):
./launcher start web_only
Sobald Discourse bereit ist, melden Sie sich an und stellen Sie Ihre Website wieder her.
Danach funktionierte bei mir alles wieder und meine Discourse-Installation lief wieder, aber jetzt in zwei separaten Containern.
Wie man aktualisiert, wenn separate Web- und Datencontainer verwendet werden
Wenn Ihnen die paar Minuten Ausfallzeit nichts ausmachen – oder wenn Daten aktualisiert werden müssen. Änderungen an Postgres und Redis sind selten, und das Laufenlassen des Datencontainers ermöglicht es, einen neuen web_only-Container zu erstellen, während der alte läuft.
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
Das funktioniert für ein kleines Upgrade von Postgres und/oder ein Redis-Upgrade.
Wenn Ihnen jede Minute Ausfallzeit wichtig ist und Daten nicht aktualisiert werden müssen (was die meiste Zeit der Fall ist):
Nur web_only aktualisieren:
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
Es reicht aus, web_only neu zu erstellen und data zu überspringen, außer wenn ein Upgrade für Postgres oder Redis ansteht. Diese erfolgen etwa einmal im Jahr und Sie werden eine Ankündigung wie PostgreSQL 15 update sehen, wenn dies geschieht, obwohl Upgrades für Redis und kleinere Postgres-Updates nicht so offensichtlich angekündigt werden.
Das Neuerstellen von Daten erfordert Ausfallzeiten (aus demselben Grund wie bei der Einzelcontainer-Version – Sie können Postgres nicht aktualisieren, während ein anderer Prozess auf dieselben Datenbankdateien zugreift. Außerdem müssen Sie, wenn Sie einen neuen Datencontainer erstellen, den web_only-Container zerstören und starten, da dieser versucht, sich mit dem alten Container zu verbinden.
Sie müssen den Datencontainer nicht oft neu erstellen (weshalb diese Methode Ausfallzeiten spart). Sie müssen darauf achten, wann ein Upgrade in Postgres oder Redis ansteht; das Frontend wird es nicht wissen; dies ist eine erweiterte Einrichtung, die mehr Aufmerksamkeit erfordert als ein einzelner Container.
Verwaltung einer Zwei-Container-Installation
@pfaffman wird eines Tages einen Thread dazu erstellen, aber bis dahin gibt es diesen: Managing a Two-Container Installation - Documentation - Literate Computing Support

