# Setup Let’s Encrypt + non-www \> www

**URL:** <https://meta.discourse.org/t/setup-let-s-encrypt-non-www-www/84840>\
**Category:** Sysadmins\
**Tags:** how-to, domains\
**Created:** [08.Апрель.2018 22:33:44 UTC](https://meta.discourse.org/t/setup-let-s-encrypt-non-www-www/84840 "2018-04-08T22:33:44Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![BlackKnob](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blackknob/32/93549_2.png) [@BlackKnob](https://meta.discourse.org/u/BlackKnob)\
**Post date:** [08.Апрель.2018 22:33:44 UTC](https://meta.discourse.org/t/setup-let-s-encrypt-non-www-www/84840/1 "2018-04-08T22:33:44Z")

</div>

I finally made it work, and thought to put everything together in case someone needs it.  
This info is assembled from different topics on this forum. Thanks to @brahn and @techAPJ.  
This assumes you’ve completed the initial Let’s Encrypt setup:

> [@Set up HTTPS support with Let's Encrypt](https://meta.discourse.org/t/setting-up-lets-encrypt/40709):
>
> bookmark This is a guide for enabling HTTPS on an existing Discourse installation using Let’s Encrypt. It assumes prior installation without HTTPS enabled. person_raising_hand Required user level: System Administrator exclamation This guide is only for existing installs where HTTPS is not enabled. Following the [official setup guide](https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md) automatically enables HTTPS by default. So you’d like to add https to your Discourse absolutely free, courtesy of our friends at [Let’s Encrypt?](https://letsencrypt.org/)bell I…

After you’ve done it, the following needs to be added to the app.yml in hooks section. It will do two things:

1. setup SSL for both `example.com` and `www.example.com`. Just replace `example.com` with your domain name.
2. redirect `example.com` to `www.example.com`

If anybody knows how to improve it, please let me know.

```
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'; # remember the certificate for a year and automatically connect to HTTPS for th$

```

as always, remember that spacing and indentation is extremely important in the app.yml file. After you’ve done editing, you have to rebuild the container with:

```
cd /var/discourse
./launcher rebuild app

```

---

_[View the full topic](https://meta.discourse.org/t/setup-let-s-encrypt-non-www-www/84840)._
