¿Hay alguna forma de especificar DISCOURSE_PORT junto a DISCOURSE_HOSTNAME?

La URL de destino es https://discourse.example.com:9443.
Usamos un proxy inverso (nginx) en otro servidor con esta configuración:

Спойлер
server {
	listen 9443 ssl;
	listen [::]:9443 ssl;

	client_max_body_size 500m;

	server_name discourse.example.com;

	ssl_certificate /etc/ssl/certs/example.com.pem;
        ssl_certificate_key /etc/ssl/private/example.com.key;

	location / {
		proxy_pass http://10.250.26.133:3080/;
		proxy_set_header Host $host;
		proxy_set_header X-Real_IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}

Y este archivo containers/app.yml:

Спойлер
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

expose:
  - "3080:80"   # http
  - "443:443" # https

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

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  UNICORN_WORKERS: 8

  DISCOURSE_HOSTNAME: discourse.example.com
  DISCOURSE_PORT: 9443 # <--- esto no funciona

  #DOCKER_USE_HOSTNAME: true

  DISCOURSE_DEVELOPER_EMAILS: 'admin@example.com'

  DISCOURSE_SMTP_ADDRESS: smtp.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: example-username
  DISCOURSE_SMTP_PASSWORD: "p@ssw0rd"
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, por defecto true)
  DISCOURSE_SMTP_DOMAIN: example.com
  DISCOURSE_NOTIFICATION_EMAIL: discourse@example.com

  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/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
          - git clone https://github.com/discourse/discourse-oauth2-basic.git
run:
  - exec: echo "Beginning of custom commands"
  - exec: echo "End of custom commands"

Ejecuté ./launcher rebuild app.
Luego tenemos la URL funcionando https://discourse.example.com:9443.

Pero:

  1. No pude crear un usuario administrador porque Discourse me redirige a una URL sin el puerto 9443.
    Tuve que crear el administrador mediante la consola (./launcher enter app y luego rake admin:create).

  2. No pude registrar ningún otro usuario por la misma razón.

  3. No pude conectarme con Gitea OAuth porque Discourse genera la URL de autorización con un redirect_uri incorrecto (falta el puerto 9443 en la URL).

¿Existe alguna forma de especificar DISCOURSE_PORT junto con DISCOURSE_HOSTNAME?

No puedes acceder a Discourse en un navegador web en un puerto no estándar. Consulta Cómo configurar Discourse en un servidor con sitios Apache existentes. También hay un tema similar para nginx, pero solo necesitas la parte de Discourse, así que este debería servirte.

También debes eliminar las plantillas de SSL y Let’s Encrypt. Además, no es necesario exponer el puerto 443.