Configuración de Let's Encrypt + sin www > www

Finalmente logré que funcionara y pensé en reunir todo por si alguien lo necesita.
Esta información se ha recopilado de diferentes temas en este foro. Gracias a @brahn y @techAPJ.
Esto asume que has completado la configuración inicial de Let’s Encrypt:

Una vez hecho esto, lo siguiente debe agregarse a la sección hooks en app.yml. Esto hará dos cosas:

  1. Configurar SSL tanto para example.com como para www.example.com. Solo reemplaza example.com con tu nombre de dominio.
  2. Redirigir example.com a www.example.com

Si alguien sabe cómo mejorarlo, por favor avísame.

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'; # recordar el certificado durante un año y conectarse automáticamente a HTTPS para el año

Como siempre, recuerda que los espacios y la indentación son extremadamente importantes en el archivo app.yml. Después de editar, debes reconstruir el contenedor con:

cd /var/discourse
./launcher rebuild app
6 Me gusta

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 me gusta

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

1 me gusta

Necesito proporcionar el contexto completo.
Tengo una versión bastante reciente 2.7.0.beta7, pero mi configuración de www y no-www es incorrecta. Estoy intentando solucionarlo.

Seguí las instrucciones anteriores (copiar/pegar) y ahora mi versión no-www deja de funcionar.

1 me gusta

Esa ruta está dentro del contenedor, así que si la estás buscando en el sistema operativo del host, estás mirando en el lugar equivocado.

Podrías revisar Configurar Let’s Encrypt con múltiples dominios y ver si esas instrucciones son diferentes. Solo tendrías que agregar el otro dominio de la misma manera.

También puedes consultar https://www.forcewww.com/

4 Me gusta

Esto parece que ya no funciona y hace que mi instancia no sea accesible. La recuperé en condiciones de funcionamiento usando esto en su lugar:

2 Me gusta