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?
2 Me gusta

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