Impossible de faire fonctionner Discourse sur différents ports

Je souhaite faire fonctionner mon forum Discourse parallèlement à mon serveur WordPress, mais bien sûr, ces deux applications utilisent nativement les ports 80 et 443. Pour contourner ce problème, je prévois d’utiliser un proxy inverse NGINX pour rediriger les sous-domaines publics vers mes applications tournant sur des ports différents en arrière-plan. Voici les étapes que j’ai suivies pour installer Discourse :

mkdir /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

# Création du fichier de configuration
cat <<-"EOF" > /var/discourse/containers/discourse
## Ceci est le modèle de conteneur Docker Discourse tout-en-un, autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
- "10080:80"   # http
- "10443:443" # https

params:
db_default_text_search_config: "pg_catalog.english"

## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
#db_shared_buffers: "256MB"

## Peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
#db_work_mem: "40MB"

## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
#version: tests-passed

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

## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
#UNICORN_WORKERS: 3

## TODO : Le nom de domaine auquel cette instance Discourse répondra
## Obligatoire. Discourse ne fonctionnera pas avec une adresse IP brute.
DISCOURSE_HOSTNAME: 'forum.example.com'

## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
## nom d'hôte (option -h) que celui spécifié ci-dessus (par défaut "$hostname-$config")
#DOCKER_USE_HOSTNAME: true

## TODO : Liste d'e-mails séparés par des virgules qui seront administrateurs et développeurs
## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'webmaster@example.com'

## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
# L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
# ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
DISCOURSE_SMTP_ADDRESS: smtp-relay.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: info@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optionnel, par défaut true)
#DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (requis par certains fournisseurs)
DISCOURSE_NOTIFICATION_EMAIL: no-reply@example.com    # (adresse d'envoi des notifications)

## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
LETSENCRYPT_ACCOUNT_EMAIL: webmaster@example.com

## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
## consultez https://meta.discourse.org/t/14857 pour plus de détails
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## La clé d'adresse IP Maxmind pour la recherche d'adresses IP
## consultez https://meta.discourse.org/t/-/137387/23 pour plus de détails
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
- volume:
	host: /var/discourse/shared/standalone
	guest: /shared
- volume:
	host: /var/discourse/shared/standalone/log/var-log
	guest: /var/log

## Les plugins vont ici
## consultez https://meta.discourse.org/t/19157 pour plus de détails
hooks:
after_code:
	- exec:
		cd: $home/plugins
		cmd:
		- git clone https://github.com/discourse/docker_manager.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
- exec: echo "Début des commandes personnalisées"
## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fin des commandes personnalisées"
EOF

# Configuration de Discourse avec le fichier de configuration
./launcher bootstrap discourse

Je peux confirmer que Discourse écoute sur les bons ports :

root@ubuntu-server:~# netstat -tlnp
Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale          Adresse distante          État        PID/Program name
tcp        0      0 0.0.0.0:10080           0.0.0.0:*               LISTEN      185948/docker-proxy
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      150667/docker-proxy
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      150655/docker-proxy
tcp        0      0 0.0.0.0:10443           0.0.0.0:*               LISTEN      185937/docker-proxy
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      169991/nginx: maste
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      519/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1465/sshd: /usr/sbi
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      169991/nginx: maste
tcp6       0      0 :::22                   :::*                    LISTEN      1465/sshd: /usr/sbi

Si je fais un curl sur l’URL et le numéro de port, je reçois 301 Moved permanently :

root@ubuntu-server:~# curl forum.example.com:10080
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

C’est probablement le port HTTP qui redirige vers le port HTTPS. (L’utilisation du drapeau -I avec curl vous montrera la cible de la redirection.)

Exécuter curl forum.example.com:10443 devrait charger le site comme vous vous y attendez.

Avez-vous consulté Exécuter d’autres sites Web sur la même machine que Discourse ?