Configurazione Let's Encrypt + non-www > www

Ho finalmente fatto funzionare tutto e ho pensato di mettere insieme il tutto nel caso qualcuno ne avesse bisogno.
Queste informazioni sono state raccolte da diversi argomenti su questo forum. Grazie a @brahn e @techAPJ.
Si presuppone che tu abbia completato la configurazione iniziale di Let’s Encrypt:

Dopo averlo fatto, quanto segue deve essere aggiunto alla sezione hooks di app.yml. Questo farà due cose:

  1. impostare SSL sia per example.com che per www.example.com. Sostituisci semplicemente example.com con il tuo nome di dominio.
  2. reindirizzare example.com a www.example.com

Se qualcuno sa come migliorarlo, fammelo sapere.

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git


  after_web_config:
    - replace:
        filename: /etc/nginx/nginx.conf
        from: /sendfile.+on;/
        to: |
          server_names_hash_bucket_size 64;
          sendfile on;
    - file:
        path: /etc/nginx/conf.d/discourse_redirect_1.conf
        contents: |
          server {
            listen 443;
            server_name example.com;
            return 301 $scheme://www.example.com$request_uri;
          }
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /-k 4096 -w \\/var\\/www\\/discourse\\/public/
        to: |
          -d www.example.com -d example.com -k 4096 -w /var/www/discourse/public

    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /-k 4096 --force -w \\/var\\/www\\/discourse\\/public/
        to: |
          -d www.example.com -d example.com -k 4096 --force -w /var/www/discourse/public

    - replace:
        filename: "/etc/nginx/conf.d/discourse.conf"
        from: /return 301 https.+/
        to: |
          return 301 https://$host$request_uri;

    - replace:
        filename: "/etc/nginx/conf.d/discourse.conf"
        from: /gzip on;[^\\}]+\\}/m
        to: |
          gzip on;
          add_header Strict-Transport-Security 'max-age=31536000'; # ricorda il certificato per un anno e connettiti automaticamente a HTTPS per l'anno

come sempre, ricorda che spaziatura e indentazione sono estremamente importanti nel file app.yml. Dopo aver terminato la modifica, devi ricostruire il contenitore con:

cd /var/discourse
./launcher rebuild app
6 Mi Piace

I wonder if this part is needed, since we already have the “force https” option in Admin settings.
@brahn, this is your part of the code, can you explain why is this necessary?

- replace:
    filename: "/etc/nginx/conf.d/discourse.conf"
    from: /return 301 https.+/
    to: |
      return 301 https://$host$request_uri;
1 Mi Piace

I’m not really sure, does that setting redirect or just block non-https requests?

1 Mi Piace

Devo fornire il contesto completo.
Ho una versione abbastanza recente, la 2.7.0.beta7, ma la mia configurazione con e senza www è errata. Sto cercando di risolverla.

Ho provato le istruzioni sopra (copia/incolla) e ora la versione senza www smette di funzionare.

1 Mi Piace

Quel percorso si trova all’interno del container, quindi se stai cercando nel sistema operativo host, ti stai guardando nel posto sbagliato.

Potresti consultare Configurazione di Let’s Encrypt con più domini e verificare se quelle istruzioni sono diverse. Dovresti semplicemente aggiungere l’altro dominio nello stesso modo.

Puoi anche visitare https://www.forcewww.com/

4 Mi Piace

Questo sembra non funzionare più e rende la mia istanza irraggiungibile. Sono riuscito a rimetterla in funzione usando questo invece:

2 Mi Piace