Running other websites on the same machine as Discourse

@pfaffman edited this heavily 2022.02.24. Blame me if it’s broken.

If you want to run other websites on the same machine as Discourse, you need to set up an extra NGINX or HAProxy proxy in front of the Docker container.

NOTE: This is for advanced admins

This guide assumes you already have Discourse working - if you don’t, it may be hard to tell whether or not the configuration is working.

You cannot use ./discourse-setup to set up Discourse if another server is using port 80 or 443. You will need to copy and edit samples/standalone.yml with your favorite text editor.

Install nginx outside the container

First, make sure the container is not running:

cd /var/discourse
./launcher stop app

Then install nginx and certbot:

sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx

Change the container definition

This is where we change how Discourse actually gets set up. We don’t want the container listening on ports - instead, we’ll tell it to listen on a special file.

Change your /var/discourse/containers/app.yml to look like this:

# base templates used; can cut down to include less functionality per container templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  # - "templates/web.ssl.template.yml" # remove - https will be handled by outer nginx
  # - "templates/web.letsencrypt.ssl.template.yml" # remove -- https will be handled by outer nginx
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"  # <-- Added

Be sure to remove or comment out the exposed ports by putting a # in front.

# which ports to expose?
# expose: comment out entire section by putting a # in front of each line
# - "80:80"   # http
# - "443:443" # https

Now you can

/var/discourse/launcher rebuild app

to rebuild Discourse to make its data available to the socket.

If you are using some other reverse proxy that cannot use a web socket, you can instead expose a different port in the section above like - 8080:80.

Create an NGINX ‘site’ for the outer nginx

Create a site file for Discourse:

cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com

Next edit that file by commenting out these lines:

        #listen 80 default_server;
        #listen [::]:80 default_server;

and editing the server_name and location stanza like this:

    server_name discourse.example.com;  # <-- change this

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;

}

If you’re using a two-container installation the socket line will be:

                proxy_pass http://unix:/var/discourse/shared/web_only/nginx.http.sock:;

Then, in a shell:

certbot --nginx

And follow the instructions. If you don’t understand the prompts, you probably shouldn’t be doing this, but can check the certbot docs for help.

@pfaffman thinks that certbot will do this for you, but if you make changes to the nginx config you will need to

sudo service nginx reload

Create your other sites

You’re done with the Discourse section!

Make other NGINX “sites”, then link and enable them, as in the last step above.

Tips

  • sudo netstat -tulpn : This will tell you what ports are being used
  • /var/log/nginx/error.log : Is the location of the nginx log on ubuntu. This will tell you what the error is when you get a 502 Bad Gateway error.
114 Likes
Port already in use, what to do?
Best way to install Discourse on my server?
Multisite configuration with Docker
Installing Discourse Under Nginx
Nginx configuration for discourse
Discourse + Nginx reverse Proxy
[Solved] Help setting other websites on the same DigitalOcean droplet
Using Multiple Websites with Nginx + Discourse
Setting up nginx for use with Discourse
Nginx + discourse
Using Discourse With Other Sites on Same Droplet
Can't make Discourse accessible through Apache
Faster rebuilds?
Discourse not working through separate nginx docker
Disable direct access with port (nginx)
Problem with discourse in a subfolder
Nginx configuration for discourse
NGINX proxy in front of the Docker container.errors
Wordpress and discourse on the same server
Wordpress and Discourse in a single droplet
A better "site not available" page
Adding an offline page when rebuilding
Setting up Discourse on a VPS with other sites
Launcher rebuild app failing: repository name must be lowercase [SOLVED]
Broken images inside posts
Which performance is better if discourse or phpbb hosts on a same vps?
Discourse doesn't deliver webpages, fresh install on Linode Ubuntu 14.04
Port already in use, what to do?
Bad gateway when trying to use SSL
Multiple discourse installation on single droplet
NGINX proxy in front of the Docker container.errors
Multiple container setup problems
Nginx configuration for discourse
403 forbidden after installation
Custom Intro page for discourse
Starting a second Discourse forum on the same VPS
Installing docker on an already running web server?
Accessing to the database from outside the container
How to change the port from docker - help
Discourse stopped working after installing Plesk
Discourse blocking with password reset
Difference between socket- and port-based connection to outer NGINX?
Nginx configuration for discourse
Custom Layouts Plugin
Setting up HTTPS support with Let's Encrypt
Setting up HTTPS support with Let's Encrypt
Setting up Discourse on a VPS with other sites
Put forum under sub-domain and have website
Can Discourse ship frequent Docker images that do not need to be bootstrapped?
Can Discourse ship frequent Docker images that do not need to be bootstrapped?
IP Spoofing Attack
Error while doing discourse setup
Run other php script
Where to put custom content?
Domain names pointing with shared AWS instance
How to install discourse on hosting?
Can not visit forum.abc.com again after port change to container/app/yml
Error connecting to Redis
Advice on integrating into a Docker-Compose setup?
Installation on v-server as a subfolder with other services in subfolders using apache
Installation on v-server as a subfolder with other services in subfolders using apache
Installation on v-server as a subfolder with other services in subfolders using apache
Wanting to run Discourse alongside apache
Install Order on CentOS
Add subdomain exception to nginx to host another site on same host
Docker0 Missing (OpenVZ)
Domain & Subdomains
[SOLVED] How do you install Discourse and Ghost on the same server using Nginx?
Domain names pointing with shared AWS instance
Nginx rate limiting outside of container - any tips?
Sandbox and test discourse on host?
Best approach for test and production instance of discourse
Mixed content for icon using http on https setup
How do I do what I did in htaccess in nginx?
How do I do what I did in htaccess in nginx?
How Can I set up discourse on my hosting?
CDN causes white screen
[SOLVED] How do you install Discourse and Ghost on the same server using Nginx?
Using a certificate when Discourse is installed behind a reverse proxy
Can I run wordpress in the same VPS with a second IP?
ERR_SSL_PROTOCOL_ERROR with Letsencrypt
Using a certificate when Discourse is installed behind a reverse proxy
Generals Subfolder recommendations and tips
Installing discourse with nginx already running?
Wordpress + Discourse using Digital Ocean and Serverpilot
Unsure About How to Start a Website Project
Install on vps problem?
Install discourse alongside WordPress in a dedicated server
Installation Help required
Installed OK. Working fine for one day. Suddenly stopped working
SSL received a record that exceeded the maximum permissible length
Changing Max Attachment Size
Moved from PluXml and phpBB to Wordpress and Discourse, my all-new experience :tada:
Discourse site loads via IP but via domain only header
Configuring Website with Discourse and Wordpress?!
Looking for a tutorial on discourse/wordpress 1 machine install
Blank pages, 500 errors and no logs
Remote users IPV6 address shows as localhost
Not able to send email Net::ReadTimeout
Adding an offline page when rebuilding
[SOLVED] 502 Gateway Error on Nginx?
URLs for avatars & emoticons adding :80 to the end of the domain
OpenID Connect extension not creating new Discourse users
Installed discourse on a server that already runs a webserver, domain just redirects to subdomain
Installation fails on my Debian server
Discourse new Base Image
FAILED to rebuild discourse -- OpenURI::HTTPError: 401 Error: Invalid license key
How to install Discourse on Plesk?
Direct-delivery incoming email for self-hosted sites
Discourse with Traefik 2.0
How to add a subdomain on a different droplet/server?
More than one site as different container running on the same do server
Can I have two domains pointing towards the same IP address without redirect?
Postgres already running
Install Discourse on a droplet with WordPress served by Apache?
Discourse OpenID Connect
How to collect all static assets (js, css) used by discourse
Avatar, Site Logos, and Cert Errors
Runing Discourse Along a Wordpress Website
Discourse and WordPress installation on one ubuntu desktop
How do I rebuild app using the host network rather than the docker network?
Can I Host More Than 1 Thing On My VPS?
Is it possible the certbot inside the container can affect new certbot outside it?
Discourse Prometheus
Discourse + web server. Possible or better to avoid?
Help for installing Discourse alongside Apache2
502 Gateway Error: Discourse Installation with SSL form Cloudflare
Installation of Wordpress and Discourse same domain same server?
Multiple subdomain instances of Discourse at the same domain?
I can't set nginx: [emerg] cannot load certificate "/var/discourse/shared/standalone/ssl/ssl.crt": BIO_new_file() failed
Discourse with other websites, SMTP issue: End of file reached
Error: Slow down, too Many Requests from this IP Address
Links in emails are using http instead of https
Google auth error
Anything else on same Digital Ocean droplet as Discourse?
Multiple discourse installation on single droplet
Checking domain name fails behind NGINX proxy
Changing force_https does not update the url of uploaded images causing a mixed content warning
Running Discourse alongside LAMP
429 error when opening multiple topics
What is the best way to install Discourse Forum on a Proxmox VM and expose it on the internet
Multisite Configuration with Let's Encrypt and no reverse proxy
WARNING: Port 443 of computer does not appear to be accessible using hostname
Address already in use during setup
Setting up Discourse on a machine with existing Nginx
Installing discourse with http only (no https)
Multisite Dockerfile issues
Nginx error 502
Nginx error 502
IP Lookup is Pulling CDN's X-Forwarded-For
Not getting Discourse Home page
Multiple subdomain instances of Discourse at the same domain?
Installing Discourse to Debian 10.5
Discourse overloaded real traffic or DDOS? 100% CPU usage despite of decent traffic and high specs server
Setting up Discourse on a machine with existing Nginx
Use X-Forwarded or not?
How could I install another discourse on same server (docker)?
How to make Discourse coexist with nginx on a Debian 9 server?
Discourse won't start because port 80 is in use
Address already in use during setup
Migrate Existing Community to a Docker based Discourse
Standalone discourse install issues and how to use a separate ip address?
Using Nginx Proxy Manager to manage multiple sites with Discourse
Using Nginx Proxy Manager to manage multiple sites with Discourse
Discourse installed on subdomain but not working
How do I run Discourse on Pterodactyl Panel?
Discourse on nginx WITHOUT Passenger?
Restore a backup from command line
Infinite 301 redirect with reverse proxy setup
Different Device, Same IP with Nginx
Problems installing on existing EC2 server
Can't Send Emails
Discourse shows server IP/localhost as user's IP
Discourse HTTPS Web Socket
Discourse shows server IP/localhost as user's IP
Redirect_uri query parameter is not adding https
Multisite configuration with Docker
Multiple Standalone containers instead of multisite?
Discourse socketed: Nginx in front of discourse: no IP adresses
How should I enable letsencrypt while discourse is beside other websites
How to Docker+Discourse and Apache too?
Help understanding the structure of using discourse + static website
Discourse not showing up at specified hostname
Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache
Error in installing
Install Problem on a Custom Server with Nginx
Regenerating LetsEncrypt keys from behind nginx
[Solved] Dev instance with nginx: topic preview not working
Installation on Ubuntu 14.04 LTS + Apache 2 + Plesk 12
Can't get Discourse to work on different ports
Webhooks/Sidekiq issue on dev instance
Discouse passes localhost uri as oauth redirect_uri
What is the recommended practice for WordPress and Discourse on the same server?
I cannot access my main site after trying to install discourse
Nginx + discourse
Discourse with zpanel
Backup uploads terribly slow
How to install wordpress in the Secondary directory?
How should I enable letsencrypt while discourse is beside other websites
Moving to subdomain
Deploying discourse on server already running another rails app
How to upload files in root directory?
WordPress, Discourse and Local SMTP Server
Default app.yml file anywhere?
Does it make sense to use Discourse on any server or is it with the hosting service Discourse provides?
Oauth2 redirect_uri uses HTTP when my forum is using HTTPS
502 Bad gateway error after switching to SSL
Wrong sending domain used
Wrong sending domain used
Wordpress integration with mini forums
How can one install a panel with discourse?
Adding an offline page when rebuilding

Why would you do that over running multi-site?

1 Like

You can create appy.yml but you can’t use discourse-setup. Copy the other one and edit it.

It is sort of more complicated and requires all sites to use same mail and plugins. For most people it’s easier to just run another server, I think.

1 Like