@pfaffman ha modificato pesantemente questo file il 24.02.2022. Incolpatemi se è rotto.
Se si desidera eseguire altri siti web sulla stessa macchina di Discourse, è necessario impostare un proxy NGINX o HAProxy aggiuntivo di fronte al container Docker.
NOTA: Questo è per amministratori esperti
Questa guida presume che Discourse funzioni già; in caso contrario, potrebbe essere difficile capire se la configurazione funziona o meno.
Non è possibile utilizzare ./discourse-setup per configurare Discourse se un altro server sta utilizzando la porta 80 o 443. Sarà necessario copiare e modificare samples/standalone.yml con il proprio editor di testo preferito.
Installare nginx al di fuori del container
Innanzitutto, assicurati che il container non sia in esecuzione:
cd /var/discourse
./launcher stop app
Quindi installa nginx e certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Modificare la definizione del container
Qui cambiamo 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.
È necessario modificare /var/discourse/containers/app.yml per disabilitare ssl e aggiungere il template per creare il sock di nginx. Dovrebbe apparire così:
# base templates usati; è possibile ridurre per includere meno funzionalità per template di container:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # rimuovere -- https sarà gestito da nginx esterno
# - "templates/web.letsencrypt.ssl.template.yml" # rimuovere -- https sarà gestito da nginx esterno
- "templates/web.socketed.template.yml" # <-- Aggiunto
Assicurati di rimuovere o commentare le porte esposte mettendo un # davanti a ogni riga.
# quali porte esporre?
# expose: commentare l'intera sezione mettendo un # davanti a ogni riga
# - "80:80" # http
# - "443:443" # https
Ora puoi eseguire
/var/discourse/launcher rebuild app
per ricostruire Discourse e rendere i suoi dati disponibili al socket.
Se si utilizza un altro proxy inverso che non può utilizzare un web socket, è possibile esporre una porta diversa nella sezione precedente, ad esempio - 8080:80.
Creare un ‘sito’ NGINX per l’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
Successivamente modifica quel file commentando queste righe:
#listen 80 default_server;
#listen [::]:80 default_server;
e modificando la direttiva server_name e location in questo modo:
server_name discourse.example.com; # <-- cambia 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 $proxy_add_x_forwarded_for;
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:;
Quindi, in una shell:
certbot --nginx
E segui le istruzioni. Se non comprendi i prompt, probabilmente non dovresti farlo, ma puoi consultare la documentazione di certbot per assistenza.
@pfaffman pensa che certbot farà questo per te, ma se apporti modifiche alla configurazione 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 attivali, come nell’ultimo passaggio sopra.
Suggerimenti
sudo netstat -tulpn: Questo ti dirà quali porte vengono utilizzate/var/log/nginx/error.log: Questa è la posizione del log di nginx su ubuntu. Ti dirà qual è l’errore quando ottieni un errore 502 Bad Gateway.