Merci pour vos retours, j’apprécie vraiment le temps que vous y avez consacré. Pour ne pas passer pour un rabat-joie, mais :
[2/5] Préparation de la configuration
✓ Les ports 80 et 443 sont libres
Cela dit, mon instance est maintenant opérationnelle, avec l’aide de Gemini (surtout pour tout ce qui concerne Docker, lol). Je souhaiterais partager mon « runbook » avec les autres utilisateurs de Virtualmin, car : « libérer le port 443 » n’est pas la solution ici. Le reste de mon message sera consacré à cela. Si je devais plutôt publier cela ailleurs, par exemple dans un nouveau sujet, merci de m’indiquer où aller ; je pense que je ne suis pas le seul avec cette configuration, et cela pourrait être utile à d’autres. Merci encore !
Si vous êtes sur un VPS géré par Webmin/Virtualmin et que vous utilisez un sous-domaine :
Le Runbook Définitif Virtualmin + Discourse *
-
(1) Nettoyage des restes (si vous réessayez, comme moi) :
rm -rf /var/discourse/shared/standalone/ssl/*rm -rf /var/discourse/shared/standalone/letsencryptrm -rf /var/discourse/shared/standalone/state -
(2) Suppression des modèles :
Vous devez supprimer complètement les lignes
templates/web.ssl.template.ymlettemplates/web.letsencrypt.ssl.template.ymldeapp.yml. Le解析eur de lancement personnalisé les évaluera même si elles sont précédées de#. -
(3) Configuration de l’email et variables :
Modifiez
DISCOURSE_SKIP_EMAIL_SETUPde'1'à'0', car votre Discourse ne pourra pas se connecter et vérifier DiscordID ;Ajoutez
DISCOURSE_FORCE_HTTPS: trueafin que le backend génère des URL sécurisées.Rappel amical : Assurez-vous que
DISCOURSE_SMTP_USER_NAMEest défini avec le nom brut de votre compte de boîte aux lettres (par exemple,'logophilia'), pas l’adresse email complète (par exemple,'logophilia@logophilia.eu'), et entourez les identifiants de guillemets simples (') pour contourner d’éventuels bogues d’analyse de caractères YAML. -
(4) Configuration du bloc expose :
Assurez-vous que votre bloc
expose:dansapp.ymlcontient une mappage HTTP ; mapper443=>8443est optionnel / redondant, car Virtualmin termine la logique SSL avant de la transmettre :expose: - 8080:80Vous pouvez maintenant reconstruire :
cd /var/discourse ./launcher rebuild app -
(5) Configuration du sous-domaine et du chemin du proxy :
- Créez votre sous-domaine dans Virtualmin comme d’habitude et sécurisez-le avec un certificat SSL Let’s Encrypt (fait automatiquement, je le précise juste : assurez-vous qu’il ne génère pas d’erreur pour une raison sans rapport).
- Accédez à Proxy Paths (Virtualmin → votre sous-domaine → Configuration Web → Proxy Paths), créez une nouvelle mappage
/vershttp://localhost:8080/, laissez « serve locally » décoché, mais activez Proxy WebSocket sur Oui pour permettre les mises à jour en temps réel et les flux de notifications.
-
(6) Directives d’en-tête CSRF :
- Dans Webmin ➔ Serveurs ➔ Serveur Web Apache ➔ [trouvez la configuration de votre sous-domaine ici et cliquez sur la configuration pour 443] ➔ Éditer les directives, placez les lignes suivantes juste au-dessus du bloc proxy de Virtualmin pour Let’s Encrypt (généralement « ProxyPass /.well-known ! ») pour faciliter la transmission du jeton CSRF :
ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-For %{REMOTE_ADDR}sProxyPreserveHost On: Indique à Discourse votre nom de domaine réel au lieu de « localhost ».
RequestHeader set X-Forwarded-Proto "https": Indique explicitement à Discourse que l’utilisateur utilise une connexion sécurisée, ce qui correspond à votre paramètreDISCOURSE_FORCE_HTTPS: true.
RequestHeader set X-Forwarded-For: Transmet la véritable adresse IP du visiteur au conteneur afin que les journaux de sécurité fonctionnent. -
(7) Poignée de main propre du conteneur :
Pendant que le processus de reconstruction (désolé… c’est vrai pourtant
se termine, assurez-vous que tout modèle de conteneur potentiellement bloqué est effacé avec docker rm -f appafin que l’exécution de./launcher start applance une instance complètement nouvelle liée au port8080. Vérifiez quedocker psaffiche quelque chose sous « ports » similaire à :# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d21772a21e36 local_discourse/app "/sbin/boot" 45 minutes ago Up 45 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp app(Comme vous pouvez le voir, j’ai laissé la directive 443=>8443 dans mon app.yml, cela fonctionne dans les deux cas.)
-
(8) Surveillance et lancement :
Suivez le flux de démarrage avec
docker logs -f appjusqu’à ce que les migrations de base de données se terminent et que les workers commencent à traiter les requêtes. Une série de lignes « INFO » en rapide succession, essentiellement. -
(9) Finalisation :
Chargez votre sous-domaine dans un navigateur, cliquez sur S’inscrire, et laissez le système envoyer un email de validation à votre boîte aux lettres.
*) Jusqu’à preuve du contraire ![]()