@pfaffman が 2022.02.24 に大幅に編集しました。問題があれば私を責めてください。
Discourse と同じマシンで他のウェブサイトを実行したい場合は、Docker コンテナの前面に別の NGINX または HAProxy プロキシを設定する必要があります。
注意: これは上級管理者向けです
このガイドはDiscourse がすでに動作していることを前提としています。動作していない場合、設定が機能しているかどうかを判断するのが難しいかもしれません。
別のサーバーがポート 80 または 443 を使用している場合、./discourse-setup を使用して Discourse をセットアップすることはできません。お気に入りのテキストエディタで samples/standalone.yml をコピーして編集する必要があります。
コンテナの外側に nginx をインストールする
まず、コンテナが実行されていないことを確認します。
cd /var/discourse
./launcher stop app
次に、nginx と certbot をインストールします。
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
コンテナ定義を変更する
ここで、Discourse の実際のセットアップ方法を変更します。コンテナがポートでリッスンするのではなく、特別なファイルでリッスンするように指示します。
/var/discourse/containers/app.yml を編集して SSL を無効にし、nginx ソケットを作成するためのテンプレートを追加する必要があります。次のようになります。
# 基本テンプレートを使用。コンテナテンプレートごとに含める機能を減らすために削減できます:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # 削除 - https は外部 nginx によって処理されます
# - "templates/web.letsencrypt.ssl.template.yml" # 削除 -- https は外部 nginx によって処理されます
- "templates/web.socketed.template.yml" # <-- 追加
各行の前に # を付けて、公開されているポートを削除するかコメントアウトするようにしてください。
# どのポートを公開しますか?
# expose: 全ての行の前に # を付けてセクション全体をコメントアウト
# - "80:80" # http
# - "443:443" # https
これで、次のように実行できます。
/var/discourse/launcher rebuild app
Discourse を再構築して、そのデータをソケットで利用できるようにします。
Web ソケットを使用できない別のリバースプロキシを使用している場合は、上記のセクションで - 8080:80 のように別のポートを公開することもできます。
外部 nginx のための NGINX ‘サイト’ を作成する
Discourse のサイトファイルを作成します。
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
次に、これらの行をコメントアウトしてそのファイルを編集します。
#listen 80 default_server;
#listen [::]:80 default_server;
そして、server_name と location ステージザを次のように編集します。
server_name discourse.example.com; # <-- これを変更
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
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 $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
2 2 コンテナ構成を使用している場合、ソケット行は次のようになります。
`proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;`
次に、シェルで次を実行します。
certbot --nginx
そして、指示に従ってください。プロンプトを理解できない場合は、これを実行すべきではないかもしれませんが、ヘルプについては certbot のドキュメントを確認できます。
@pfaffman は certbot がこれを自動的に行ってくれると考えていますが、nginx 設定を変更した場合は次を実行する必要があります。
sudo service nginx reload
他のサイトを作成する
Discourse のセクションはこれで完了です!
上記の最後のステップと同様に、他の NGINX の「サイト」を作成し、リンクして有効にします。
ヒント
sudo netstat -tulpn: 使用されているポートを確認できます/var/log/nginx/error.log: Ubuntu における nginx ログの場所です。502 Bad Gateway エラーが発生した場合のエラー内容がわかります。