Configuration Let's Encrypt + non-www > www

J’ai enfin réussi à faire fonctionner cela, et j’ai pensé à rassembler toutes les informations au cas où quelqu’un en aurait besoin.
Ces informations proviennent de différents sujets sur ce forum. Merci à @brahn et @techAPJ.
Ceci suppose que vous avez terminé la configuration initiale de Let’s Encrypt :

Une fois cela fait, les éléments suivants doivent être ajoutés à la section hooks du fichier app.yml. Cela permettra de faire deux choses :

  1. Configurer SSL pour à la fois example.com et www.example.com. Remplacez simplement example.com par votre nom de domaine.
  2. Rediriger example.com vers www.example.com.

Si quelqu’un sait comment l’améliorer, merci de me le faire savoir.

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'; # se souvenir du certificat pendant un an et se connecter automatiquement en HTTPS pour l'année

Comme toujours, rappelez-vous que l’espacement et l’indentation sont extrêmement importants dans le fichier app.yml. Après avoir terminé l’édition, vous devez reconstruire le conteneur avec :

cd /var/discourse
./launcher rebuild app
6 « J'aime »

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 « J'aime »

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

1 « J'aime »

Je dois fournir le contexte complet.
J’utilise une version assez récente, 2.7.0.beta7, mais ma configuration avec et sans « www » est incorrecte. J’essaie de la corriger.

J’ai suivi les instructions ci-dessus (copier/coller), et maintenant ma version sans « www » ne fonctionne plus.

1 « J'aime »

Ce chemin se trouve à l’intérieur du conteneur, donc si vous cherchez sur le système d’exploitation de l’hôte, vous êtes au mauvais endroit.

Vous pouvez consulter Configurer Let’s Encrypt avec plusieurs domaines pour voir si ces instructions diffèrent. Vous ajouteriez simplement l’autre domaine de la même manière.

Vous pouvez également consulter https://www.forcewww.com/.

4 « J'aime »

Cela ne semble plus fonctionner et rend mon instance inaccessible. Je l’ai remise en état de marche en utilisant ceci à la place :

2 « J'aime »