Traefik プロキシで Discourse を実行することについての多くの投稿を読みましたが、残念ながらまだ何かを見落としているようです。
ホストからコンテナの内部 IP を curl すると、Discourse セットアップウィザードの HTML が返され、Traefik はサービスが利用可能であることを報告します。
しかし、Traefik を経由するドメインに接続しようとすると、期待どおりの HTTPS 証明書が表示されますが、数秒後に 504 エラーが発生します。
以下は Discourse の設定です。
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
#- "80:80" # http
#- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: 'redacted'
DISCOURSE_DEVELOPER_EMAILS: 'redacted'
DISCOURSE_SMTP_ADDRESS: smtp.postmarkapp.com
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: redacted
DISCOURSE_NOTIFICATION_EMAIL: noreply@redacted
## Docker container is stateless; all data is stored in /shared
volumes:
- volume:
host: /opt/discourse/shared/standalone
guest: /shared
- volume:
host: /opt/discourse/shared/standalone/log/var-log
guest: /var/log
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
docker_args:
- "-l traefik.enable=true"
- "-l traefik.http.routers.discourse.tls=true"
- "-l traefik.http.routers.discourse.rule=Host(`redacted`)"
- "-l traefik.http.routers.discourse.entrypoints=websecure"
- "-l traefik.http.routers.discourse.tls.certresolver=ledns"
- "-l traefik.http.services.discourse.loadbalancer.server.port=80"
- "-l traefik.http.services.discourse.loadbalancer.server.scheme=http"
run:
- exec: echo "Beginning of custom commands"
- exec: echo "End of custom commands"
同じ Traefik インスタンスで、異なるホストで同様に設定された他の多くのサービスはすべて正常に動作しています。
Discourse の nginx アクセスログでは、ローカル IP を curl したときの要求は確認できますが、ドメインを curl したときの要求は確認できません。
何か不足している点について、何か提案はありますか? Traefik と nginx の間でどこかで失われているようです。
