Introduzione
Per impostazione predefinita, un’installazione “standalone” di Discourse si collega alle porte 80 e 443. Per ospitare un’altra applicazione come WordPress sullo stesso server, è necessario riconfigurare Discourse affinché ascolti su una porta interna e utilizzare un Nginx a livello di Host come Proxy Inverso per gestire il traffico e i certificati SSL.
1. Panoramica dell’Architettura
-
Nginx Host: Il gateway principale che ascolta sulle porte 80 e 443. Gestisce la terminazione SSL e instrada le richieste al container appropriato in base al
server_name. -
Container Discourse: Riconfigurato per ascoltare su
localhost:8080. -
Container WordPress: Gestito tramite Docker Compose, in ascolto su
localhost:8081.
2. Fase A: Riconfigurazione di Discourse
Modificare il file /var/discourse/containers/app.yml per rilasciare le porte pubbliche:
-
Modifica del Mapping delle Porte:
YAML
expose: - "8080:80" # Mappa la porta host 8080 alla porta container 80 -
Disattivazione dell’SSL Interno: Commentare i template SSL e 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" -
Ricostruzione: Eseguire
./launcher rebuild app.
3. Fase B: Distribuzione di WordPress tramite Docker Compose
Organizzare il sito WordPress in una directory dedicata. Assicurarsi che il volume del database sia persistente per prevenire la perdita di dati.
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. Fase C: Configurazione Finale di Nginx (SSL e Porta 443)
Una configurazione professionale nel 2025 richiede il pieno supporto HTTPS e HTTP/2. Dopo aver installato Nginx sul proprio host (sudo apt install nginx), creare una configurazione per i propri domini.
Suggerimento Pro: Eseguire sudo certbot --nginx per generare automaticamente i blocchi SSL, ma assicurarsi che includano le seguenti intestazioni proxy affinché Discourse funzioni correttamente.
Nginx
server {
listen 443 ssl http2;
server_name discourse.com;
# Certificati SSL di 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; # Cruciale per il rilevamento HTTPS di Discourse
}
}
5. Lezioni Apprese a Caro Prezzo e Best Practice
-
Credenziali del Database: Se le password contengono caratteri speciali come
&o?, racchiuderle sempre tra virgolette singole' 'nei file di configurazione e nei comandi del terminale per prevenire errori di interpretazione della shell. -
Permessi dei File: I container WordPress vengono eseguiti come
www-data(UID 33). Se si caricano o si decomprimono file comeroot, è necessario eseguirechown -R 33:33 .per evitare errori 500 Internal Server Error. -
Impostazioni di Cloudflare: Quando si utilizza un certificato SSL sul server (Let’s Encrypt), impostare SSL/TLS di Cloudflare su Full (Strict). Ciò impedisce il loop “Troppi Reindirizzamenti” comunemente causato dalla modalità “Flexible”.
-
Volumi Persistenti: Non eseguire mai
docker compose downorebuildsenza verificare che i file del database siano memorizzati in un volume persistente (ad esempio,./mysql_data).
Conclusione: Dissociare le applicazioni dalle porte 80/443 utilizzando un Proxy Inverso è il modo più scalabile per gestire un VPS multi-sito. Consente la gestione centralizzata dell’SSL e un facile debug tramite i log di Nginx a livello di host.