Consenti SSL / HTTPS per la tua configurazione Docker di Discourse

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.

75 Mi Piace
I need help with SSL
Broken image since https
Troubles installing SSL
NGINX Proxy Mixed Content Error
SSL on Discourse / DO sub-domain of Heroku hosted domain
Force Discourse to use SSL/HTTPS through CloudFlare
How to force redirect from https to http on Docker installation
SSL Let's Encrypt Error After Installation
Cannot connect to IP address and no errors in log
Can i change Lets Encrypt to EssentialSSL / Wildcard SLL
I have a very difficult problem installing ssl - please help
Go Daddy SSL certificate installation error in D.O. server
How Do I Uninstall SSL Certificate?
How to Set Up SSL in Discourse
Site down after enabling SSL
SSL installation
SSL certificate expired and after that - Error 404 Not Found
Skipping built-in SSL certificate?
Unable to renew Let's encrypt certificate
Adding SSL certificate
Getting Cloudflare 521 Error After Upgrade to 3.5.0.beta8-dev
Let's encrypt failing for IP behind firewall
Unable To Connect/Connection Refused due to https certificates
Rebuild goes into a loop
Transfer from bitnami to normal discourse
My site is down with a weird SSL notification
Https with let's encrypt behind a vpn?
Cannot install custom SSL new_file: no such file
Favicon is failing to load for logged-in users
How to install SSL certificate in Discourse
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
How to modify Dockerfile?
DNS validation for Let's Encrypt?
How might we better structure #howto?
Hit Let's encrypt renewal limit
Unable To Connect/Connection Refused due to https certificates
Setting up Discourse with SSL on Docker with AWS ELB breaks and returns 503 Service Unavailable (Back-end server is at capacity)
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
Global setting to hide origin IP from everywhere - is it possible?
Latest update requires cache purge in CloudFlare