• Get In Touch
February 4, 2017

Install Discourse Community Forum on CentOS 7

Want your very own server? Get our 1GB memory, Xeon V4, 25GB SSD VPS for £10.00 / month.
Get a Cloud Server

Discourse is a free and open source community forum. Unlike other discussion forums, Discourse has a modern look and feel, it is also responsive. Discourse comes with many features such as community moderation, summarize topics and inline context. Discourse is available in more than 25 languages.

Discourse also features real time notifications, an overlay editor, desktop notifications, file attachments and much more. You can also configure Discourse for social logins and single sign on. It is SEO friendly and comes with many plugins to extend its features. Discourse is used by many prominent companies for community forums like New Relic, Twitter developers forum etc.

In this tutorial we will be installing Discourse community forum on CentOS 7 using Docker.

Requirements

To install Discourse Community Forum you will need a server or VPS with at least 1 GB RAM which is enough to serve small to moderate forum. To follow this tutorial you will need a minimal CentOS 7 installation with sudo or root access on it. If you are logged in as non root user run sudo -i to switch to the root account. Additionally, you will also need a domain name or subdomain pointed towards your server.

Installing Discourse

Before installing any package it is recommended that you update the packages and repository using the following command.

yum -y update

Now you will need to install git. Run the following command to do so.

yum -y install git

Discourse needs a 2GB Swap file if you have a VPS with 2GB RAM or less. You can skip this step if you have more than 2 GB RAM. Run the following command to check if you already have a swap file created.

swapon -s

If you do not have a swap created, the command will not print any output. Now create a swap file of 2GB in root directory using following command.

dd if=/dev/zero of=/swapfile count=2048 bs=1MiB

It will take few seconds to create the swap file. You will get following output.

[root@liptan-pc ~]# dd if=/dev/zero of=/swapfile count=2048 bs=1MiB
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 29.8985 s, 71.8 MB/s

Once done, modify the file permissions so that the swap file is only readable to the root account using following command.

chmod 600 /swapfile

Now tell the system to set up the swap space using following command.

mkswap /swapfile

You should get following output.

[root@liptan-pc ~]# mkswap /swapfile
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=b26c5ac6-6c5a-4a0b-9776-aaf3fd72f18b

Now make the swap file permanent by editing /etc/fstab file in your favorite editor.

nano /etc/fstab

If you don’t have nano install, run yum -y install nano to install nano editor. Now add the following line at the end of the file.

/swapfile   swap    swap    sw  0   0

If you don’t make the swap file permanent then your system will not use the swap file after reboot. Now tell the system to use the swap file using the following command.

swapon /swapfile

Now you can check if the swap file is mounted is created or not using following command.

swapon -s

You will get following output.

[root@liptan-pc ~]# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file    2097148 0       -1

Change the swappiness value of your system to 10 using the following command.

sysctl vm.swappiness=10

The swappiness value tells the system how often the system swaps data from memory to swap space. The above swappiness setting also restores if not made permanent. Edit /etc/sysctl.conf file using your favorite editor.

nano /etc/sysctl.conf

Now add the following line at the end of the file.

vm.swappiness = 10

Another configuration you might want to change is the cache pressure. Run the following command to change the cache pressure to optimal value.

sysctl vm.vfs_cache_pressure=50

The above swappiness setting also restores if not made permanent. Edit /etc/sysctl.conf file using your favorite editor.

nano /etc/sysctl.conf

Add the following line to the end of file.

vm.vfs_cache_pressure = 50

You can now check if your swap file is used as memory using the following command.

free -m

The output should include the swap memory as shown in the following output.

[root@liptan-pc ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            991          70          69          12         852         743
Swap:          2047           0        2047

As we have the swap file created, we can proceed to the next step of installation.

Install Docker using following command.

wget -qO- https://get.docker.com/ | sh

If you do not have wget installed, you can install it using yum -y install wget. The above command will detect your operating system and download and install the latest version of Docker in your system. Before using Docker, you will need to log out from current session and log back in again.

Now start the docker service and enable it to start at boot time using following command.

systemctl start docker
systemctl enable docker

Once the docker is running, make a new directory for Discourse docker files using the following command.

mkdir /var/discourse

Now clone the Docker image of Discourse application using following command.

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Now switch to the newly created directory using following command.

cd /var/discourse

Now you will need to copy the template of configuration file so that we can use it. Run the following command for same.

cp samples/standalone.yml containers/app.yml

Now edit the configuration file using your favorite text editor.

nano containers/app.yml

Find the following line.

  #db_shared_buffers: "256MB"

Uncomment it and change its value to 128MB if you have 1GB actual memory or 256MB if you have 2GB actual memory in your system.

Next find the following line.

  #UNICORN_WORKERS: 3

Uncomment it and change the value of unicorn workers to 2 if you have 1GB actual memory or 3 or 4 if you have 2GB or more actual memory in your system.

Next, find the following line.

DISCOURSE_HOSTNAME: 'discourse.example.com'

Change the value of discourse hostname to your domain name or subdomain.

Now find the following line.

 DISCOURSE_DEVELOPER_EMAILS: 'me@example.com'

Change the email address to the admin email address. You can use more than one email address separated by comma. These email addresses will be made administrator upon initial signup. Next find the following lines.

## TODO: The SMTP mail server used to validate new accounts and send notifications
  DISCOURSE_SMTP_ADDRESS: smtp.example.com         # required
  #DISCOURSE_SMTP_PORT: 587                        # (optional, default 587)
  #DISCOURSE_SMTP_USER_NAME: user@example.com      # required
  #DISCOURSE_SMTP_PASSWORD: pa$$word               # required, WARNING the char '#' in pw can cause problems!
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)

It is very important to provide the email configuration, otherwise your site may break. Users are also sent an email before creation of a new account. Provide the address to the SMTP server in DISCOURSE_SMTP_ADDRESS. Uncomment the line and change the port to the value on which your SMTP server is listening to. In most cases SMTP runs on either port 587 or 465 or 25. Next uncomment the lines for SMTP username and password and provide the appropriate values in it. You should also uncomment the DISCOURSE_SMTP_ENABLE_START_TLSline and leave the the value true if your SMTP server can be connected using TLS. If the SMTP server is running on unsecured connection than change its value to false. Generally an SMTP server is listening to port 587 or 465 connects on secured connection wheres 25 connects on unsecured connection.

If you do not have mail server, you can create your own mail server using the instruction on How to setup an email server on CentOS 7.

Once all the above inputs are provided, save the file and exit the editor.

Now run the following command to bootstrap Discourse.

./launcher bootstrap app

The above process can take upto few minutes. Once the bootstrap process is completed, run the following command to start the Discourse application.

./launcher start app

The Discourse application will be successfully deployed on your server. You can access the application on the domain name you have provided in configuration. You will see following screen.

HP_NO_IMG/data/uploads/users/e840080c-7322-4497-85c0-150182bd4c02/146974446.png” alt=”” />

Click on the Register button. In the next interface, select the email address which you have provided in configuration file. Provide an username and strong password.

HP_NO_IMG/data/uploads/users/e840080c-7322-4497-85c0-150182bd4c02/965095802.png” alt=”” />

Click on the Register button again. The system will now send you an confirmation email. Once you confirm your email address. You fourm will start and you will see the following interface.

HP_NO_IMG/data/uploads/users/e840080c-7322-4497-85c0-150182bd4c02/2134700794.png” alt=”” />

You can login by clicking Login button in the right corner. You will see the administrator interface once logged in. You can now configure the forum how you like it.

HP_NO_IMG/data/uploads/users/e840080c-7322-4497-85c0-150182bd4c02/1372763215.png” alt=”” />

Conclusion

In this tutorial we have learned how to install Discourse community forum on CentOS 7 server. You can now successfully deploy the application and use it to power your own community.

Want your very own server? Get our 1GB memory, Xeon V4, 25GB SSD VPS for £10.00 / month.
Get a Cloud Server

Share this Article!

Related Posts

Node.js Authentication – A Complete Guide with Passport and JWT

Node.js Authentication – A Complete Guide with Passport and JWT

Truth be told, it’s difficult for a web application that doesn’t have some kind of identification, even if you don’t see it as a security measure in and of itself. The Internet is a kind of lawless land, and even on free services like Google’s, authentication ensures that abuses will be avoided or at least […]

Node.js and MongoDB: How to Connect MongoDB With Node

Node.js and MongoDB: How to Connect MongoDB With Node

MongoDB is a document-oriented NoSQL database, which was born in 2007 in California as a service to be used within a larger project, but which soon became an independent and open-source product. It stores documents in JSON, a format based on JavaScript and simpler than XML, but still with good expressiveness. It is the dominant […]

Using MySQL with Node.js: A Complete Tutorial

Using MySQL with Node.js: A Complete Tutorial

Although data persistence is almost always a fundamental element of applications, Node.js has no native integration with databases. Everything is delegated to third-party libraries to be included manually, in addition to the standard APIs. Although MongoDB and other non-relational databases are the most common choice with Node because if you need to scale an application, […]

Node.Js Vs Django: Which Is the Best for Your Project

Node.Js Vs Django: Which Is the Best for Your Project

Django and NodeJs are two powerful technologies for web development, both have great functionality, versatile applications, and a great user interface. Both are open source and can be used for free. But which one fits your project best? NodeJs is based on JavaScript, while Django is written in Python. These are two equally popular technologies […]

Nodejs Vs PHP:  Which Works Best?

Nodejs Vs PHP: Which Works Best?

Before getting into the “battle” between Node.js and PHP we need to understand why the issue is still ongoing. It all started with the increased demand for smartphone applications, their success forcing developers to adapt to new back-end technologies that could handle a multitude of simultaneous requests. JavaScript has always been identified as a client-side […]