これは高度な設定です。Linuxサーバー管理とDockerに精通している場合以外は、これに従わないでください。また、postgresまたはredisのバージョンアップがあった場合に気づくように、discourse_dockerへのコミットに細心の注意を払う必要があります。
現在の設定からの移行
私は2つのコンテナへの移行に成功しました。もし他の誰かが手順を必要とするなら、これが私にとって機能した方法です。
このプロセスには、バックアップ、個別のwebコンテナとdataコンテナの設定、およびデータのリストアが含まれます。
-
Discourseインスタンスをバックアップし、バックアップをダウンロードします。簡単なガイドまたは後で手動でバックアップとリストアに従うことができます。
-
現在のスタンドアロンコンテナを停止します
./launcher stop app -
samples/からweb_only.ymlとdata.ymlをcontainers/にコピーし、好きな名前に変更します。例:web_rocks.ymlとdata2.yml。 -
名前を変更した場合は、
data.ymlとweb_only.ymlのエントリのvolumes:に注意してください。
web_only.ymlをweb_rocks.ymlに変更した場合、Web_rocks.ymlのエントリを次のように変更する必要があります。
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
同様に、data.ymlにも同じ編集を行ってください。
dataコンテナの設定
data.ymlから始め、データベースのパスワードを設定します。次に:
- コンテナのルートフォルダ
/var/discourseに来ます ./launcher bootstrap data2を実行します(data2、または与えた新しい名前)./launcher start data2を実行します(新しい名前を再度使用)- すべてがスムーズに進めば、
./launcher enter data2(再度新しい名前を使用)でコンテナに接続できます exitでコンテナを終了します。
webコンテナの設定
web_only.ymlを変更しましょう。
まず、テンプレートを変更し、app.ymlが行うようにポートを公開します。
次に、正しいデータコンテナにリンクされていることを確認します。データ.ymlを「something_else」に変更した場合は、それを「name」に入れます。
# コンテナをリンクするために'links'キーを使用します。つまり、Dockerの--linkフラグを使用します。
links:
- link:
name: data
alias: data
SSHやその他のポートを公開したくなくても、Webアクセス用にポート80と443を公開する必要があります。これは、前面でnginxが実行されているかどうか、およびコンテナとどのように接続するかによって異なります。
どこかに次のブロックがあります。
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- dataコンテナ内で設定したパスワードを入力します。
- 先ほど書き留めたdataコンテナのエイリアスを入力します。
DB_HOSTとREDIS_HOSTについて。これは、言及したlinksブロックと一致する必要があります。 DB_USERNAMEは変更していないでしょう。
DISCOURSE_DEVELOPER_EMAILSとDISCOURSE_HOSTNAMEなどの値が見つかります。これらはすでにapp.ymlにあります。そこからコピーしてください。
hooksセクションでは、app.ymlですでに使用している追加のプラグインを設定することを忘れないでください。
これでブートストラップする準備が整いました。
./launcher bootstrap web_only(ここでも新しい/独自の名前を使用)
ブートストラップが完了したら、web_onlyを起動できます(新しい名前を使用):
./launcher start web_only
Discourseの準備ができたら、ログインしてサイトをリストアします。
その後、すべてが再び機能し、私のdiscourseインストールは2つの別々のコンテナで再び実行されました。
2つのコンテナを使用する場合の更新方法
数分間のダウンタイムを気にしない場合、またはデータがアップグレードする必要がある場合。postgresとredisの変更はまれであり、dataコンテナを実行したままにすることで、古いコンテナが実行されている間に新しいweb_onlyコンテナをビルドすることが可能になります。
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
これは、Postgresのマイナーアップグレードやredisのアップグレードに機能します。
ダウンタイムを1分たりとも気にしない場合、かつデータがアップグレードする必要がない場合(ほとんどの場合):
web_onlyのみをアップグレード:
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
postgresまたはredisのアップグレードがない限り、web_onlyを再ビルドするだけで十分です。それらは年に一度程度の頻度で発生し、アップグレードが発生した際にはhttps://meta.discourse.org/t/postgresql-15-update/349515のようなアナウンスが表示されますが、redisのアップグレードやpostgresのマイナーアップデートはそれほど明確にアナウンスされません。
dataの再ビルドにはダウンタイムが必要です(単一コンテナバージョンと同じ理由です。他のプロセスが同じデータベースファイルにアクセスしている間、postgresをアップグレードすることはできません。また、新しいdataコンテナをビルドするときは、古いコンテナに接続しようとするため、web_onlyコンテナを破棄して起動する必要があります)。
dataコンテナを再ビルドする必要はめったになく(だからこそ、この方法でダウンタイムが節約されます)、postgresまたはredisにアップグレードがある場合に注意を払う必要があります。フロントエンドはそれを認識しません。これは、単一コンテナよりも注意が必要な高度な設定です。
2コンテナインストールの管理
@pfaffmanがいつかこれに関するトピックを作成する予定ですが、それまではこちらがあります:Managing a Two-Container Installation - Documentation - Literate Computing Support

