「./launcher rebuild app」によるサイトメンテナンスは、サイトの再構築(gitからの新しいプラグインなどのインストール)に時間がかかります。
Discourseを再構築している間、「メンテナンス中」という静的ページを表示する推奨される方法はありますか?
nginxを使用することを考えました。これには、ポート80で提供するdockerを停止し、nginxにトラフィックを引き継がせてdockerコンテナまたは静的ページにリダイレクトさせる必要があります。
必要に応じてnginx.confを次のように手動で編集することを考えています。
server {
listen 80;
server_name your-discourse-domain.com;
location / {
proxy_pass http://localhost:80;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect http:// https://;
}
}
そして、次のように置き換えます。
server {
listen 80;
server_name your-discourse-domain.com;
location / {
root /path/to/your/maintenance/page;
}
}
何か提案はありますか?AWS EC2サーバーを使用しています。もっと良い方法はありますか?
pfaffman
(Jay Pfaffman)
3
私の考えでは、2つのコンテナを使用する方がより簡単で優れています。これにより、古いコンテナが実行されている間に新しいコンテナを構築できます。その方がダウンタイムが大幅に少なくなります。他の人は、追加のWebサーバーを実行する方が簡単だと考えています。
「いいね!」 1
Stephen
(Stephen)
4
それは多くのケースで機能しますが、データコンテナを更新する必要があるときはまだダウンタイムが発生します。
「いいね!」 1
pfaffman
(Jay Pfaffman)
5
データベースの大規模なアップグレードは年に1回未満しか発生しません。データベースのマイナーアップグレードはそれほど時間がかからず、データコンテナを再構築し、Webコンテナを数分で破棄して起動できます。サイトがダウンしているというきれいなメッセージを表示することよりもダウンタイムを削減することを好む人もいるようで、そのためには2番目のコンテナがその方法です。
実際、おそらく最も簡単な解決策は、「すぐに戻ります」メッセージを表示する2番目のnginxコンテナを用意し、アップグレード中に手動で実行することです。たとえば、次のようになります。
./launcher stop app
docker run nginx --name back-soon # そして、ページが提供されたことを確認するための追加のコマンド
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app
しかし、その場合、back-soonコンテナの証明書を取得し、更新し続ける必要があり、それは複雑です。
編集:この議論の公式トピックはこちらです Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl