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
これで、ソケットを通じてデータをアクセス可能にするためにDiscourseを再構築できます。
/var/discourse/launcher rebuild app
他のリバースプロキシを使用してウェブソケットを使用できない場合は、上記のセクションで別のポートを公開することもできます(例:- 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 $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
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エラーが発生した際のエラー内容を確認できます。