Discourse Docker セットアップでの SSL / HTTPS の許可

このガイドは、組み込みの Let’s Encrypt 証明書を使用しない理由がほとんどなくなったため、古くなっている可能性があります。こちらも参照してください:

2023-04-10 @pfaffman 談: これは主に歴史的な目的のために残されています。

それで、Docker ベースの Discourse 設定で SSL を有効にしたいのですね?やりましょう!

このガイドでは、すべての標準的なインストールデフォルト(/var/discourse/containers/app.yml にコンテナ設定ファイルがあり、Discourse docker が /var/discourse にインストールされていること)を使用したことを前提としています。

SSL 証明書の購入

namecheap またはその他の SSL 証明書プロバイダーにアクセスして、ドメインの SSL 証明書を購入してください。秘密鍵と CSR を生成し、最終的に証明書を取得するために、プロバイダーが文書化したすべての手順に従ってください。私は Apache のデフォルトを使用しましたが、これで問題ありません。

秘密鍵と証明書は安全な場所に保管してください。

証明書と鍵の配置

署名された証明書と鍵を入手し、/var/discourse/shared/standalone/ssl/ フォルダーに配置します。

秘密鍵は次のとおりです。

/var/discourse/shared/standalone/ssl/ssl.key

証明書は次のとおりです。

/var/discourse/shared/standalone/ssl/ssl.crt

ファイル名は重要です。これらから逸脱しないでください。そうしないと、nginx テンプレートは証明書を見つけることができなくなります。

共有フォルダーがどこにマウントされているかを確認するために、app.yml 設定ファイルを確認してください。

    volumes:
      - volume:
          host: /var/discourse/shared/standalone
          guest: /shared

本質的に、ファイルはコンテナ内で /shared/ssl/ssl.key および /shared/ssl/ssl.crt に配置されている必要があります。

すべてのクライアントが証明書から信頼されたルート証明書へのパスを見つけられるように(つまり、ユーザーに警告が表示されないように)、プロバイダーから提供された証明書ファイルを次のように連結する必要がある場合があります。

cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt

NGINX の設定

app.yml 設定ファイルから nginx ssl テンプレートへの参照を追加します。

    templates:
      - "templates/postgres.template.yml"
      - "templates/redis.template.yml"
      - "templates/web.template.yml"
      - "templates/web.ratelimited.template.yml"
      - "templates/web.ssl.template.yml"

Docker コンテナの設定

コンテナに SSL でリッスンするように指示します。

    expose:
      - "80:80"
      - "443:443"

Docker コンテナのブートストラップ

アプリを再構築します。

./launcher rebuild app

利益を得て、完了です!

トラブルシューティング

問題が発生した場合は、次のを使用してログを必ず確認してください。

./launcher logs app

仕組み

このテンプレートは、nginx を TLSv1.2 および TLSv1.3、強力な暗号スイート、HSTS ヘッダー、セッションチケット設定で構成します。SSL 設定を挿入するために、nginx の設定アウトレットを使用します。

イメージには、ポート 80 へのすべてのリクエストを https://DISCOURSE_HOST_NAME にリダイレクトするリダイレクトルールと、ポート 443 への他のホスト名のリクエストを正当なホスト名にリダイレクトするリダイレクトルールがあります。

この設定のカスタマイズは非常に簡単です。以下を参照してください。

そのファイルのコピーを作成し、必要に応じてテンプレートを修正できます。

ここでテンプレートとアウトレットを使用する利点は、残りの Discourse 推奨の NGINX 設定をすべて維持できることです。これは時間とともに変化します。

設定のテスト

すべてが正しく機能していることを確認するには、SSL Server Test (Powered by Qualys SSL Labs) を確認してください。一部のブラウザと OS の組み合わせでは、HTTPS の設定が不完全でも問題ない場合があります。そのため、まずここで確認してください。

「いいね!」 75
I need help with SSL
Broken image since https
Troubles installing SSL
NGINX Proxy Mixed Content Error
SSL on Discourse / DO sub-domain of Heroku hosted domain
Force Discourse to use SSL/HTTPS through CloudFlare
How to force redirect from https to http on Docker installation
SSL Let's Encrypt Error After Installation
Cannot connect to IP address and no errors in log
Can i change Lets Encrypt to EssentialSSL / Wildcard SLL
I have a very difficult problem installing ssl - please help
Go Daddy SSL certificate installation error in D.O. server
How Do I Uninstall SSL Certificate?
How to Set Up SSL in Discourse
Site down after enabling SSL
SSL installation
SSL certificate expired and after that - Error 404 Not Found
Skipping built-in SSL certificate?
Unable to renew Let's encrypt certificate
Adding SSL certificate
Getting Cloudflare 521 Error After Upgrade to 3.5.0.beta8-dev
Let's encrypt failing for IP behind firewall
Unable To Connect/Connection Refused due to https certificates
Rebuild goes into a loop
Transfer from bitnami to normal discourse
My site is down with a weird SSL notification
Https with let's encrypt behind a vpn?
Cannot install custom SSL new_file: no such file
Favicon is failing to load for logged-in users
How to install SSL certificate in Discourse
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
How to modify Dockerfile?
DNS validation for Let's Encrypt?
How might we better structure #howto?
Hit Let's encrypt renewal limit
Unable To Connect/Connection Refused due to https certificates
Setting up Discourse with SSL on Docker with AWS ELB breaks and returns 503 Service Unavailable (Back-end server is at capacity)
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
Global setting to hide origin IP from everywhere - is it possible?
Latest update requires cache purge in CloudFlare