Introduction
Par défaut, une installation Discourse « autonome » (standalone) se lie aux ports 80 et 443. Pour héberger une autre application comme WordPress sur le même serveur, vous devez reconfigurer Discourse pour qu’il écoute sur un port interne et utiliser un Nginx au niveau de l’hôte comme mandataire inverse (Reverse Proxy) pour gérer le trafic et les certificats SSL.
1. Aperçu de l’architecture
-
Nginx Hôte : La passerelle principale écoutant sur les ports 80 et 443. Il gère la terminaison SSL et achemine les requêtes vers le conteneur approprié en fonction du
server_name. -
Conteneur Discourse : Reconfiguré pour écouter sur
localhost:8080. -
Conteneur WordPress : Géré via Docker Compose, écoutant sur
localhost:8081.
2. Phase A : Reconfiguration de Discourse
Modifiez votre fichier /var/discourse/containers/app.yml pour libérer les ports publics :
-
Modifier le mappage de port :
YAML
expose: - "8080:80" # Mappe le port hôte 8080 au port conteneur 80 -
Désactiver le SSL interne : Commentez les modèles SSL et Let’s Encrypt :
YAML
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # - "templates/web.letsencrypt.ssl.template.yml" -
Reconstruire : Exécutez
./launcher rebuild app.
3. Phase B : Déploiement de WordPress via Docker Compose
Organisez votre site WordPress dans un répertoire dédié. Assurez-vous que le volume de la base de données est persistant pour éviter toute perte de données.
YAML
services:
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: 'your_secure_password'
volumes:
- ./mysql_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8081:80"
volumes:
- .:/var/www/html
4. Phase C : Configuration Nginx finale (SSL et Port 443)
Une configuration professionnelle en 2025 nécessite une prise en charge complète de HTTPS et HTTP/2. Après avoir installé Nginx sur votre hôte (sudo apt install nginx), créez une configuration pour vos domaines.
Astuce de pro : Exécutez sudo certbot --nginx pour générer automatiquement les blocs SSL, mais assurez-vous qu’ils incluent les en-têtes de proxy suivants pour que Discourse fonctionne correctement.
Nginx
server {
listen 443 ssl http2;
server_name discourse.com;
# Certificats SSL par Certbot
ssl_certificate /etc/letsencrypt/live/discourse.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
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; # Crucial pour la détection HTTPS de Discourse
}
}
5. Leçons apprises à grands frais et meilleures pratiques
-
Identifiants de base de données : Si vos mots de passe contiennent des caractères spéciaux comme
&ou?, entourez-les toujours d’apostrophes' 'dans vos fichiers de configuration et commandes de terminal pour éviter les erreurs d’interprétation du shell. -
Permissions de fichiers : Les conteneurs WordPress s’exécutent en tant que
www-data(UID 33). Si vous téléchargez ou décompressez des fichiers en tant queroot, vous devez exécuterchown -R 33:33 .pour éviter les erreurs de serveur interne 500. -
Paramètres Cloudflare : Lorsque vous utilisez un certificat SSL sur serveur (Let’s Encrypt), définissez le SSL/TLS de Cloudflare sur Full (Strict). Cela empêche la boucle « Trop de redirections » couramment causée par le mode « Flexible ».
-
Volumes persistants : Ne lancez jamais
docker compose downourebuildsans vérifier que vos fichiers de base de données sont stockés dans un volume persistant (par exemple,./mysql_data).
Conclusion : Dissocier vos applications des ports 80/443 à l’aide d’un mandataire inverse est la méthode la plus évolutive pour gérer un VPS multi-sites. Elle permet une gestion centralisée des SSL et un débogage facile via les journaux Nginx au niveau de l’hôte.