discourse multiple installations
There is no official guide on how to install multiple discourse instances on one cloud server by discourse team , so i created this full guide to support people like me who are searching for configurations on official discourse forum and still not able to succeed
I am using digital Ocean Ubuntu18,2GB RAM/50GB hard disk droplet
Lets start
- Installing first discourse
sudo mkdir /var/discourse
wget -qO- https://get.docker.io/ | sh
git clone GitHub - discourse/discourse_docker: A Docker image for Discourse /var/discourse
cd /var/discourse
sudo cp samples/standalone.yml containers/app.yml
sudo nano containers/app.yml
edit you app.yml file and add host name,smtp,email
sudo ./launcher bootstrap app
sudo ./launcher start app
And you will be able to see the discourse page on your host example.com in browser
Now if everything is working fine lets start 2nd installation
we have to install nginx to create proxy pass for discourse but we have to create nginx outside our container , so stop the first app.yml container
cd /var/discourse
./launcher stop app
install nginx now with below commands
sudo apt update
sudo apt install nginx
systemctl status nginx
after status nginx you will see output like below
Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
below are the nginx commands you dont have to use any command if nginx is running these are for info purpose only:
sudo systemctl stop nginx
To start the web server when it is stopped, type:
sudo systemctl start nginx
To stop and then start the service again, type:
sudo systemctl restart nginx
If you are simply making configuration changes, Nginx can often reload without dropping connections. To do this, type:
sudo systemctl reload nginx
By default, Nginx is configured to start automatically when the server boots. If this is not what you want, you can disable this behavior by typing:
sudo systemctl disable nginx
To re-enable the service to start up at boot, you can type:
sudo systemctl enable nginx
now we have installed nginx ,go to cd /var/discourse
and edit your app.yml file by
nano containers/app.yml (is nano is not installed install it by sudo apt-get install nano or for centos sudo yum install nano
edit your app.yml file templates same like below and delete expose section
— “templates/postgres.template.yml”
— “templates/redis.template.yml”
— “templates/sshd.template.yml”
— “templates/web.template.yml”
— “templates/web.ratelimited.template.yml” — “templates/web.socketed.template.yml”
#expose: # comment out entire section
first we installed discourse on ports now we are editing it again to work with nginx this is our first site and second is not yet started , now we will add conf file in nginx to listen our website
so go to
cd /etc/nginx/sites-enabed/
now add new file here discourse.conf by
touch discourse.conf
now edit this new file with
nano discourse.conf
copy paste below code and add in discourse.conf(change server name to host name (website name )
server {
listen 80; listen [::]:80;
server_name wwebhub.com; # ← change thislocation / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:; # ←- volume: same like yml file
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;
}
}
now cd …
sudo nginx -t (if ok then proceed)
systemctl stop nginx
systemctl start nginx
sudo service nginx reload
now we have done nginx conf file we will rebuild our first site
/var/discourse/launcher stop app
/var/discourse/launcher rebuild app
after rebuild you can log in to your website and you will see your first website running discourse
now again stop app
/var/discourse/launcher stop app
and then create second .yml file for second discourse we will name it to app2.yml
sudo cp contaiiners/app.yml containers/app2.yml
now we have second app2.yml file same copy of app.yml , we will edit it now
nano containers/app2.yml
change host name to new host name and smtp to new smtp (use new smtp always)
in app2.yml file you will see volume : /var/discourse/shared/standalone
change volume standalone to standalone2
save it and go to cd /etc/nginx/sites-enabled
create new discourse2.conf file with
touch discourse2.conf
nano discourse2.conf and add below script to it
server {
listen 80; listen [::]:80;
server_name wwebhub.com; # ← change thislocation / {
proxy_pass http://unix:/var/discourse/shared/standalone2/nginx.http.sock:; # ←- volume: same like yml file
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;
}
}
now again
sudo nginx -t (if ok proceed)
systemctl stop nginx
systemctl start nginx
sudo service nginx reload
now rebuild secand app2.yml with
inside cd /var/discourse
./launcher rebuild app2
now your second discourse is live start first also with
./launcher start app
both containers are now live if you see blank page make sure you create swap and rebuild both app and app2