Skip to main content

Command Palette

Search for a command to run...

How to Install Discourse Using Nginx for SSL: Step-by-Step Tutorial

Updated
2 min read
How to Install Discourse Using Nginx for SSL: Step-by-Step Tutorial

Learn how to install Discourse with Nginx managing the SSL port. Follow this comprehensive step-by-step guide to seamlessly set up your Discourse forum with Nginx handling SSL.

Prerequisites

  • Ubuntu server

  • Domain name configured

  • Root/sudo access

  • Minimum 2GB RAM recommended

Step 1: Install Required Packages

sudo apt update -y && apt upgrade -y
sudo apt install wget curl zip git docker.io nginx -y
sudo reboot

Step 2: Install Discourse

sudo mkdir /var/discourse
sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

Step 3: Configure Discourse

Edit the app.yml configuration file:

sudo nano /var/discourse/containers/app.yml

Make these important changes:

# Comment out these lines
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"

# Add this line
- "templates/web.socketed.template.yml"

# Comment out expose section
#expose:
#  - "80:80"
#  - "443:443"

# Add in env section
env:
  DISCOURSE_FORCE_HTTPS: true

Step 4: Build Discourse

cd /var/discourse
./launcher rebuild app

Step 5: Configure Nginx

Create a new Nginx configuration:

sudo nano /etc/nginx/sites-available/discourse

Add this configuration (replace example.com with your domain):

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/your_ssl_cert.bundle;
    ssl_certificate_key /etc/ssl/private/your_ssl_cert.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Step 6: Enable and Start Nginx

sudo ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl enable nginx
sudo systemctl start nginx

Step 7: SSL Certificate Setup

If using Let's Encrypt:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

Important Notes

  • Make sure your domain's DNS is properly configured before starting

  • The Nginx configuration assumes you're using SSL certificates

  • Discourse will be accessible directly through HTTPS on your domain

  • All HTTP traffic will automatically redirect to HTTPS

  • Check the logs if you encounter any issues: /var/discourse/shared/standalone/log/rails/production.log

After completing these steps, Discourse should be accessible via HTTPS through your domain, with Nginx handling all SSL termination[1][4].

Citations: [1] https://maker-tutorials.com/en/install-discourse-with-docker-in-subfolder-with-ssl-and-serve-other-content-under-the-same-domain/ [2] https://blog.khophi.co/install-run-discourse-behind-nginx-right-way-first-time/ [3] https://www.digitalocean.com/community/tutorials/how-to-install-discourse-behind-nginx-on-ubuntu-14-04 [4] https://meta.discourse.org/t/installing-discourse-behind-reverse-proxy-using-recommended-supported-installation/300191 [5] https://www.howtoforge.com/tutorial/how-to-install-and-configure-discourse-forum-with-nginx-on-ubuntu-1604/

More from this blog

T

Tenten - AI / ML Development

225 posts

🚀 Revolutionize your business with AI! 🤖 Trusted by tech giants since 2013, we're your go-to LLM experts. From startups to corporations, we bring ideas to life with custom AI solutions