He leído varias publicaciones sobre la ejecución de Discourse detrás de un proxy Traefik, pero desafortunadamente parece que todavía me falta algo.
Desde el host, si hago curl a la IP interna del contenedor, puedo ver el HTML del asistente de configuración de Discourse devuelto y Traefik informa que el servicio está disponible:
Sin embargo, cuando intento conectarme al dominio que pasa por Traefik, puedo ver el certificado HTTPS esperado pero luego obtengo un 504 después de varios segundos.
Aquí está mi configuración de 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
## El contenedor Docker no tiene estado; todos los datos se almacenan en /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"
Tengo muchos otros servicios en la misma instancia de Traefik configurados de manera similar en diferentes hosts y todos funcionan.
En los registros de acceso de Nginx de Discourse, puedo ver la solicitud cuando hago curl a la IP local, pero no cuando hago curl al dominio.
¿Alguna sugerencia sobre lo que falta? Parece que se está perdiendo en algún lugar entre Traefik y nginx.
