Discourse Multisite – Nginx (dentro de Docker) solo sirviendo el sitio predeterminado

Hola a todos,

Estoy configurando Discourse multisite usando discourse_docker, pero estoy teniendo problemas con Nginx dentro del contenedor. He seguido la documentación oficial, pero no consigo que todos los sitios funcionen correctamente.

Hallazgos hasta ahora:

  • El Nginx dentro de la imagen Docker de Discourse solo está sirviendo el sitio predeterminado; los sitios adicionales no cargan.

    I, [2025-03-19T03:38:06.444387 #1]  INFO -- : Replacing (?-mix:server.+{) with server {
      listen 80;
      return 301 https://$$ENV_DISCOURSE_HOSTNAME$request_uri;
    }
    
  • Cuando deshabilito Let’s Encrypt y habilito el proxy de Cloudflare, todos los sitios se vuelven inaccesibles.

  • He revisado la configuración multisite de app.yml y reconstruido el contenedor, pero el problema persiste.

Aquí está la configuración actual

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

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

params:
  db_default_text_search_config: "pg_catalog.english"
  db_shared_buffers: "256MB"

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  UNICORN_WORKERS: 4
  DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE: 5000
  DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE: 5000
  DISCOURSE_HOSTNAME: forum.getnursingjobs.com
  DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: "REPLACE_WITH_ENV_VAR"
  DISCOURSE_DB_HOST: DB IP
  DISCOURSE_DB_NAME: 
  DOCKER_USE_HOSTNAME: true
  DISCOURSE_DEVELOPER_EMAILS: 
  DISCOURSE_SMTP_ADDRESS: 
  DISCOURSE_SMTP_PORT: 
  DISCOURSE_SMTP_USER_NAME: 
  DISCOURSE_SMTP_PASSWORD: "REPLACE_WITH_ENV_VAR"
  DISCOURSE_NOTIFICATION_EMAIL: 
  DISCOURSE_REPLY_BY_EMAIL_ADDRESS: 
  DISCOURSE_MAXMIND_ACCOUNT_ID: 
  DISCOURSE_MAXMIND_LICENSE_KEY: "REPLACE_WITH_ENV_VAR"
  DISCOURSE_EMAIL_SITE_TITLE: 'GetNursingJobs.com'

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

hooks:
  after_postgres:
    - exec: sudo -u postgres createdb b_discourse || exit 0
    - exec:
        stdin: |
          grant all privileges on database b_discourse to discourse;
        cmd: sudo -u postgres psql b_discourse
        raise_on_fail: false
    - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<' "alter schema public owner to discourse;"
    - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<' "create extension if not exists hstore;"
    - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<' "create extension if not exists pg_trgm;"

  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-adplugin.git
          - git clone https://github.com/discourse/discourse-google-one-tap.git

  before_bundle_exec:
    - file:
        path: $home/config/multisite.yml
        contents: |
          welding:
            adapter: postgresql
            database: discourse_welding
            username: discourse
            password: "REPLACE_WITH_ENV_VAR"
            host: DB IP
            pool: 25
            timeout: 5000
            db_id: 2
            host_names:
              - forum.getweldingjobs.com
          medical:
            adapter: postgresql
            database: discourse_medical
            username: discourse
            password: "REPLACE_WITH_ENV_VAR"
            host: DB IP
            pool: 25
            timeout: 5000
            db_id: 3
            host_names:
              - forum.medicaltranscriptionjobs.com
          dataentry:
            adapter: postgresql
            database: discourse_dataentry
            username: discourse
            password: "REPLACE_WITH_ENV_VAR"
            host: DB IP
            pool: 25
            timeout: 5000
            db_id: 4
            host_names:
              - forum.dataentryjobs.com
          chef:
            adapter: postgresql
            database: discourse_chef
            username: discourse
            password: "REPLACE_WITH_ENV_VAR"
            host: DB IP
            pool: 25
            timeout: 5000
            db_id: 5
            host_names:
              - forum.getchefjobs.com

  after_bundle_exec:
    - exec: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate

En lo que necesito ayuda:

  1. ¿Cómo puedo configurar el Nginx interno dentro del contenedor para que sirva todos los dominios multisite?
  2. ¿Hay alguna configuración específica de app.yml que deba ajustar para esta configuración?

Creo que los problemas eran la nube naranja y el uso de nombres de host incorrectos.