Discourse non si carica con Apache e reindirizzamento proxy

Nonostante avessi ogni intenzione di abbandonare Discourse a causa della totale mancanza di documentazione attuale che non sia iper-focalizzata su CentOS/Nginx, una persona incredibilmente generosa e paziente di DigitalOcean ha risposto a un thread che avevo creato lì e, dopo alcuni tentativi ed errori, ha aiutato a mettere insieme un tutorial semplice da seguire per i futuri utenti di Discourse nelle stesse circostanze mie.

Come promemoria, queste circostanze sono:

Installare Discourse sullo stesso server di Apache | Utilizzando Ubuntu 18.04 | DigitalOcean

credito a Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (prima risposta)

Prerequisiti

  • Per stare sul sicuro, assicurati di eseguire il backup del tuo Droplet, così in caso di problemi potrai tornare a una versione funzionante
  • Connettiti via SSH al tuo Droplet
  • Apache installato; puoi seguire le istruzioni su come farlo qui:

Passo 1 - Installare Docker

Per installare Docker, segui le istruzioni qui:

Passo 2 - Scaricare Discourse

Per prima cosa, crea una directory dove memorizzare i file di Discourse:

mkdir /var/discourse

Successivamente, clona l’immagine Docker ufficiale di Discourse in /var/discourse.

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Passo 3 - Configurare Discourse per ascoltare sulla porta 8080

Utilizzeremo il modello standalone.yml che include tutti i servizi necessari come PostgreSQL, Redis, ecc.

Copia il file di esempio con il seguente comando:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Quindi modifica il file con il tuo editor preferito. Apri /var/discourse/containers/app.yml e aggiorna le porte alle righe 23 e 24:

## quali porte TCP/IP dovrebbe esporre questo contenitore?
expose:
  - "8080:80"   # inoltra la porta host 8080 alla porta del contenitore 80 (http)
  - "8443:443"   # inoltra la porta host 8443 alla porta del contenitore 443 (https)

Inoltre, se non hai ancora un certificato SSL, assicurati di commentare la riga 16:

  #- "templates/web.ssl.template.yml"

Aggiungi semplicemente il simbolo # davanti alla riga - "templates/web.ssl.template.yml", altrimenti Discourse non si avvierà.

Passo 4 - Configurare Discourse

Cambia directory:

cd /var/discourse

Quindi avvia Discourse (poiché è la prima volta che avvii il servizio, verrà eseguito il bootstrap dell’applicazione con le nuove modifiche presenti nel file app.yml):

./discourse-setup

Nota: Assicurati di fornire impostazioni valide per il server di posta, altrimenti la configurazione potrebbe fallire.

Passo 5 - Configurare Apache

Nella directory /etc/apache2/sites-available/, crea un nuovo file chiamato forum.example.com.conf e aggiungi il seguente contenuto Vhost:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Abilita il Vhost con il seguente comando:
a2ensite forum.example.com
  • Abilita Mod Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Riavvia Apache:
systemctl restart apache2

Dopo di che, potrai accedere a Discourse direttamente tramite il tuo nome di dominio.


Nota 1: Durante l’installazione di Discourse, app.yml potrebbe essere sovrascritto e le righe 16/17 (SSL) verranno decommentate. Dovrai commentare nuovamente quelle righe e poi ricompilare l’app (non dimenticare di cambiare directory): ./launcher rebuild app

Nota 2: SSL non è abilitato per Discourse con questa guida. Non sorprende che non esista documentazione per abilitare SSL Let’s Encrypt se lo hai già abilitato per Apache. Se qualcuno trova una soluzione per questo, si prega di contattare.