Questa guida è probabilmente obsoleta poiché ora ci sono pochissime ragioni per non utilizzare il certificato Let’s Encrypt integrato che funziona e basta. Vedi anche:
2023-04-10 @pfaffman dice: Questo è lasciato qui principalmente per scopi storici.
Quindi desideri abilitare SSL per la tua configurazione Discourse basata su Docker? Facciamolo!
Questa guida presuppone che tu abbia utilizzato tutte le impostazioni predefinite di installazione standard: un file di configurazione del container in /var/discourse/containers/app.yml e Docker di Discourse installato in: /var/discourse
Acquista un certificato SSL
Vai su namecheap o qualche altro fornitore di certificati SSL e acquista un certificato SSL per il tuo dominio. Segui tutti i passaggi documentati da loro per generare la chiave privata e la CSR e infine ottenere il tuo certificato. Ho usato le impostazioni predefinite di apache, andranno benissimo.
Conserva la tua chiave privata e il certificato in un luogo sicuro.
Posiziona il certificato e la chiave
Ottieni un certificato e una chiave firmati e posizionali nella cartella /var/discourse/shared/standalone/ssl/
La chiave privata è:
/var/discourse/shared/standalone/ssl/ssl.key
Il certificato è
/var/discourse/shared/standalone/ssl/ssl.crt
I nomi dei file sono critici non discostarti da essi o il tuo modello nginx non saprà dove trovare il certificato.
Dai un’occhiata al tuo file di configurazione app.yml per vedere dove è montata la cartella condivisa.
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
In sostanza, i file devono trovarsi in /shared/ssl/ssl.key /shared/ssl/ssl.crt all’interno del container.
Affinché tutti i client possano trovare un percorso dal tuo certificato a un certificato root attendibile (ovvero, per non dare avvisi ai tuoi utenti), potrebbe essere necessario concatenare i file di certificato dal tuo provider in questo modo:
cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt
Configura NGINX
Aggiungi un riferimento al modello ssl nginx dal tuo file di configurazione app.yml:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.ssl.template.yml"
Configura il tuo container Docker
Dì al tuo container di ascoltare su SSL
expose:
- "80:80"
- "443:443"
Avvia il tuo container Docker
Ricostruisci la tua app
./launcher rebuild app
Profitto, hai finito!
Risoluzione dei problemi
Assicurati di leggere i log usando
./launcher logs app
Se qualcosa va storto.
Come funziona
Il modello configura nginx con TLSv1.2 e TLSv1.3, suite di cifratura forti, header HSTS e impostazioni dei ticket di sessione. Utilizza gli outlet di configurazione nginx per iniettare la configurazione SSL.
L’immagine ha regole di riscrittura che reindirizzeranno tutte le richieste sulla porta 80 a https://DISCOURSE_HOST_NAME e reindirizzeranno anche le richieste per altri hostname sulla porta 443 all’hostname canonico.
Personalizzare questa configurazione è molto facile, vedi:
Puoi fare una copia di quel file e modificare il modello secondo necessità.
Il vantaggio di utilizzare modelli e outlet qui è che possiamo mantenere tutto il resto della configurazione NGINX consigliata da Discourse, che cambia nel tempo.
Testare la configurazione
Vedi SSL Server Test (Powered by Qualys SSL Labs) per assicurarti che tutto funzioni correttamente. È possibile che alcuni browser e combinazioni di sistemi operativi siano soddisfatti con https parzialmente configurato, quindi controlla prima qui.