Se desideri eseguire altri siti web sulla stessa macchina di Discourse, devi configurare un proxy NGINX o HAProxy aggiuntivo davanti al container Docker.
NOTA: Questa guida è destinata a amministratori esperti
Questa guida presuppone che tu abbia già Discourse funzionante — se non è così, potrebbe essere difficile determinare se la configurazione funziona correttamente.
Non puoi usare ./discourse-setup per configurare Discourse se un altro server sta utilizzando la porta 80 o 443. Dovrai copiare e modificare samples/standalone.yml con il tuo editor di testo preferito.
Installa nginx all’esterno del container
Prima di tutto, assicurati che il container non sia in esecuzione:
cd /var/discourse
./launcher stop app
Poi installa nginx e certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Modifica la definizione del container
Qui modifichiamo il modo in cui Discourse viene effettivamente configurato. Non vogliamo che il container ascolti sulle porte — invece, gli diremo di ascoltare su un file speciale.
Devi modificare /var/discourse/containers/app.yml per disabilitare ssl e aggiungere un template per creare il socket nginx. Dovrebbe apparire così:
# template di base utilizzati; è possibile ridurre per includere meno funzionalità per i template del container:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # rimuovi - https sarà gestito da nginx esterno
# - "templates/web.letsencrypt.ssl.template.yml" # rimuovi - https sarà gestito da nginx esterno
- "templates/web.socketed.template.yml" # <-- Aggiunto
Assicurati di rimuovere o commentare le porte esposte anteponendo un #.
# quali porte esporre?
# expose: commenta l'intera sezione anteponendo un # a ciascuna riga
# - "80:80" # http
# - "443:443" # https
Ora puoi eseguire
/var/discourse/launcher rebuild app
per ricostruire Discourse e rendere i suoi dati disponibili tramite il socket.
Se stai utilizzando un altro reverse proxy che non può usare un web socket, puoi invece esporre una porta diversa nella sezione sopra, come - 8080:80.
Crea un “sito” NGINX per il nginx esterno
Crea un file di sito per Discourse:
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
Quindi modifica quel file commentando queste righe:
#listen 80 default_server;
#listen [::]:80 default_server;
e modificando la direttiva server_name e la sezione location in questo modo:
server_name discourse.example.com; # <-- modifica questo
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Se stai utilizzando un’installazione a due container, la riga del socket sarà:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Poi, in una shell:
certbot --nginx
E segui le istruzioni. Se non capisci i prompt, probabilmente non dovresti fare questa configurazione, ma puoi consultare la documentazione di certbot per aiuto.
@pfaffman pensa che certbot faccia tutto questo per te, ma se apporti modifiche alla configurazione di nginx dovrai eseguire
sudo service nginx reload
Crea i tuoi altri siti
Hai finito con la sezione Discourse!
Crea altri “siti” NGINX, quindi collegali e abilitali, come nell’ultimo passaggio sopra.
Suggerimenti
sudo netstat -tulpn: Questo ti dirà quali porte sono in uso/var/log/nginx/error.log: È la posizione del log di nginx su Ubuntu. Questo ti dirà qual è l’errore quando ricevi un errore 502 Bad Gateway.