Resuelto: Discurso detrás de Traefik

Sé que esto se ha discutido antes, pero la mayoría de las discusiones anteriores se referían a versiones más antiguas de discourse y traefik, ¡así que aquí estoy y necesito ayuda! :smiley:

¿Qué funciona?
Discourse era accesible desde el exterior y funcionaba bien hasta que comenté todos los puertos expuestos.

Traefik también es accesible desde el exterior.

¿Qué no funciona?
Intentar acceder a Discourse me da un error de puerta de enlace incorrecta, pero mientras intentaba diferentes cosas que leí, también obtuve un 404.

Mi configuración de traefik:

cat docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:latest
#    network_mode: "host"
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`mydyndns-url`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=redacted:***"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`mydyndns-url`)"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"
      - "providers.file.filename=/dynamic_conf.yml"
      - "traefik.http.routers.traefik-secure.middlewares=secHeaders@file,traefik-auth"
networks:
  proxy:
    external: true

Uso

docker network create proxy
docker-compose -f /opt/containers/traefik/docker-compose.yml up -

para iniciar las cosas. Usé data/traefik.yml de aquí y data/dynamic_conf.yml del mismo tipo

Eso funciona.

Dentro de mi discourse (/var/discourse/containers/app.yml) tengo esto:

## este es el contenedor Docker todo en uno y autónomo de Discourse
##
## Después de realizar cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## LOS ARCHIVOS YAML SON MUY, MUY SENSIBLES A ERRORES DE ESPACIO EN BLANCO O ALINEACIÓN.
## visite http://www.yamllint.com/ para validar este archivo según sea necesario


templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomente estas dos líneas si desea agregar Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"


## ¿qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
expose:
#  - "7890:80"   # http
#  - "7891:443" # https


labels:
  app_name: discourse
  traefik.enable: true
  traefik.http.routers.discourse.entrypoints: http
  traefik.http.routers.discourse.rule: Host(`***`)      ## Ingrese su dominio aquí
  traefik.http.middlewares.discourse-https-redirect.redirectscheme.scheme: https
  traefik.http.routers.discourse.middlewares: discourse-https-redirect
  traefik.http.routers.discourse-secure.entrypoints: https
  traefik.http.routers.discourse-secure.rule: Host(`***`)      ## Ingrese su dominio aquí
  traefik.http.routers.discourse-secure.tls: true
  traefik.http.routers.discourse-secure.tls.certresolver: http
  traefik.http.routers.discourse-secure.service: discourse
  traefik.http.services.discourse.loadbalancer.server.port: 3000
  traefik.docker.network: proxy


docker_args:
  - "--network=proxy"


networks:
  - proxy
#  - default


params:
  db_default_text_search_config: "pg_catalog.english"

  ## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente mediante bootstrap según la RAM detectada, o puede anularlo
  #db_shared_buffers: "256MB"

  ## puede mejorar el rendimiento de la clasificación, pero aumenta el uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: tests-passed

env:
  LC_ALL: de_DE.UTF-8
  LANG: de_DE.UTF-8
  LANGUAGE: dn_DE.UTF-8
  EMBER_CLI_PROD_ASSETS: 1
  # DISCOURSE_DEFAULT_LOCALE: en

  ## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente mediante bootstrap según las CPU detectadas, o puede anularlo
  #UNICORN_WORKERS: 3

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Requerido. Discourse no funcionará con un número IP simple.
  DISCOURSE_HOSTNAME: ***

  ## Descomente si desea que el contenedor se inicie con el mismo
  ## nombre de host (-h opción) que se especifica arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que se convertirán en administradores y desarrolladores
  ## en el registro inicial, por ejemplo, 'user1@example.com,user2@example.com'

///dejando la configuración de correo electrónico fuera por razones de privacidad - eso funcionó cuando se expuso directamente

  ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
  ## consulte https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clave de licencia de la dirección IP de geolocalización de maxmind para la búsqueda de direcciones IP
  ## consulte https://meta.discourse.org/t/-/137387/23 para obtener detalles
  DISCOURSE_MAXMIND_LICENSE_KEY: ***

## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulte https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Cualquier comando personalizado para ejecutar después de la compilación
run:
  - exec: echo "Beginning of custom commands"
  ## Si desea establecer la dirección de correo electrónico 'De' para su primer registro, descomente y cambie:
  ## Después de recibir el primer correo electrónico de registro, vuelva a comentar la línea. Solo necesita ejecutarse una vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

¡Así que… por favor!

¿Qué hice mal?

Eso sugiere que tu contenedor está roto de alguna manera, pero que has configurado traefik con éxito para conectarse a él, así que probablemente quieras volver a eso. Quizás no esperaste lo suficiente para que el servidor web y rails se iniciaran. No veo ningún problema obvio con el app.yml.

¡Gracias, @pfaffman!

He esperado un tiempo (11 horas, y ese ordenador no es TAN lento) y eso no lo soluciona.

Me pregunto si he conseguido forzar a Discourse a conectarse a mi red llamada “proxy”. ¿Hay alguna forma de comprobarlo?

docker ps me dice que Discourse ya no usa puertos, que es lo que quería. Pero no puedo saber si Discourse se conecta a algo.

./launcher enter app
wget www.google.de

me muestra que discourse está conectado a Internet. Pero no puedo acceder a él desde el exterior…

Prueba el puerto 80, no el 3000

1 me gusta

¡¡¡FUNCIONA!!! Muchas, muchas gracias. Esto me estaba molestando desde hace una semana.

1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.