In this tutorial, we will explain how to install and configure Askbot on a CentOS 7 VPS with Nginx.

Askbot is an open-source question and answers forum system written in Django and Python. It is simple, easy-to-use, and very similar to StackOverflow. It is a powerful and highly-customizable software that allows you to create your own question and answer forum on the internet. Many companies, such as Fedora, OpenStack, and LibreOffice use Askbot for their Q&A sections.

Askbot comes with a rich set of features, including Q&A knowledge management, Customizable Email notifications, Tagging and categorization systems, Focused on-topic discussions, as well as supporting login via LinkedIn, Twitter, Facebook, and Google, to name a few. Let’s get started with the installation.

Prerequisites

  • A fresh CentOS 7 VPS with root access enabled or a user with sudo privileges.
  • A valid domain name pointed to VPS IP address. In this tutorial, we will use forum.mydomain.com.

Step 1: Log in and Update Packages

First, we’re going to need to log into our server using SSH. You can do that by entering this command:

ssh root@IP_Address -p Port_Number

Remember to replace “root” with your username if you are not using the root user. Change “IP_Address” and “Port_Number” according to your server’s IP address and SSH port number.

Once you are logged in, you should update all of your packages to their latest available versions.

yum update -y

Step 2: Getting Started

Before we begin, we will need to install all the dependencies required by Askbot.

First, install the “Development Tools” group of packages with the following command:

yum group install 'Development Tools'

Next, install the EPEL repository using the following command:

yum install epel-release

Finally, install Python packages by running the following command:

yum install python-pip python-devel python-six

Next, we will need to create a separate user for the Askbot installation. To create an Askbot user, run the following command:

useradd -m -s /bin/bash askbot

Next, set the user’s password with the following command:

passwd askbot

Next, we will need to add the askbot user to the wheel group for sudo command access. You can do this with the following command:

usermod -a -G wheel askbot

Step 3: Install and Configure PostgreSQL Database

Next, we will need to install PostgreSQL database server. Askbot uses PostgreSQL database to store their data. You can install the PostgreSQL database server along with other required packages by just running the following command:

yum install postgresql-server postgresql-devel postgresql-contrib

After installing PostgreSQL, initialize the database with the following command:

postgresql-setup initdb

Next, start the PostgreSQL service and enable it to start after system reboot with the following command:

systemctl start postgresql
systemctl enable postgresql

You can also verify the status of PostgreSQL with the following command:

systemctl status postgresql

You should get the following output:

● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-08-21 13:54:07 UTC; 8s ago
  Process: 15983 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 15978 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 15986 (postgres)
   CGroup: /system.slice/postgresql.service
           ├─15986 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
           ├─15987 postgres: logger process   
           ├─15989 postgres: checkpointer process   
           ├─15990 postgres: writer process   
           ├─15991 postgres: wal writer process   
           ├─15992 postgres: autovacuum launcher process   
           └─15993 postgres: stats collector process   

Aug 21 13:54:05 centos systemd[1]: Starting PostgreSQL database server...
Aug 21 13:54:07 centos systemd[1]: Started PostgreSQL database server

Next, we will need to create a new PostgreSQL database and user for the Askbot instance. To do so, first log in to PostgreSQL with the following command:

su - postgres
-bash-4.2$ psql
Ouput:
psql (9.2.24)
Type "help" for help.

Once logged in, create a database and user with the following command:

postgres=# create database askbot;
postgres=# create user askbot with password 'password';

Make sure you replace “password” with a unique, good password.

Next, grant all the privileges to the askbot database and exit from the PostgreSQL shell with the following command::

postgres=# grant all privileges on database askbot to askbot;
postgres=# \q

Next, we will need to configure local user authentication. You can achieve this by editing the pg_hba.conf configuration file:

nano /var/lib/pgsql/data/pg_hba.conf

Replace peer with md5 to activate password authentication as shown below:

# "local" is for Unix domain socket connections only
local   all             all                                     md5 
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5  
# IPv6 local connections:
host    all             all             ::1/128                 md5

Save and close the file, then restart the PostgreSQL service to apply configuration changes:

systemctl restart postgresql

Once you have done, you can proceed to the next step.

Step 4: Install and Configure Askbot

Before installing Askbot, we will need to upgrade the python-pip package to the latest version. Run the following command to upgrade python-pip:

pip install --upgrade pip

Next, run the following command to install python virtualenv:

pip install virtualenv six

Once installed, log in with the askbot user and create a new python virtual environment named my-askbot using the following command:

su - askbot
virtualenv my-askbot
You should get the following output:
No LICENSE.txt / LICENSE found in source
New python executable in /home/askbot/my-askbot/bin/python2
Also creating executable in /home/askbot/my-askbot/bin/python
Installing setuptools, pip, wheel...
done.

Next, change the directory to my-askbot and activate the virtual environment with the following command:

cd my-askbot/
[[email protected] my-askbot]$ source bin/activate
Output:
(my-askbot) [[email protected] my-askbot]$

Next, let’s start to install Askbot with other dependencies:

pip install six==1.10.0
pip install askbot psycopg2

Once installed, create a new directory for your project:

mkdir testapp

Next, change the directory to testapp and set up AskBot with the following commands:

cd testapp
askbot-setup

You will be asked to provide the directory path you want to deploy AskBot to, as shown below:

Deploying Askbot - Django Q&A forum application
Problems installing? -> please email [email protected]

To CANCEL - hit Ctr-C at any time

Enter directory path (absolute or relative) to deploy
askbot. To choose current directory - enter "."
> .

Type “.” and hit [Enter] to continue. You will be asked to select a database engine:

Please select database engine:
1 - for postgresql, 2 - for sqlite, 3 - for mysql, 4 - oracle
type 1/2/3/4: 1

Type “1” and hit [Enter] for PostgreSQL database. Then, provide a database name, username, and password as shown below:

Please enter database name (required)
> askbot

Please enter database user (required)
> askbot

Please enter database password (required)
> password

Once the installation has been finished, you should see the following output:

Copying files: 
* __init__.py 
* manage.py 
* urls.py 
* django.wsgi 
Creating settings file
settings file created

copying directories: * doc
* cron
* upfiles
Done. Please find further instructions at Askbot documentation.

Next, we will need to generate Askbot Django static files. You can do this using the following command:

python manage.py collectstatic

Generate the database using the following command:

python manage.py syncdb

You will need to provide your admin user name, password and email as shown below, as well as replacing mydomain.com with your domain name:

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'askbot'): 
Email address: [email protected]mydomain.com
Password: 
Password (again): 
Superuser created successfully.

Askbot is now installed! You can test it with the following command:

python manage.py runserver 0.0.0.0:8080

Now, open your web browser and type the URL http://your-server-ip:8080. You will be redirected to the Askbot dashboard as shown in the following screen:

Step 5: Install and Configure uWSGI

Next, we will need to install and configure uWSGI with Nginx to serve your Askbot application. uWSGI is a software tool that supports applications written in Python, Perl, and Ruby. It is typically used for running Python web applications.

You can install uWSGI using the pip command as a root user:

pip install uwsgi

Once installed, create a new directory for uWSGI:

mkdir -p /etc/uwsgi/sites

Next, create a new uWSGI configuration file using the following command:

nano /etc/uwsgi/sites/askbot.ini

Add the following lines:

[uwsgi]

chdir = /home/askbot/my-askbot/testapp
home = /home/askbot/my-askbot
static-map = /m=/home/askbot/my-askbot/testapp/static
wsgi-file = /home/askbot/my-askbot/testapp/django.wsgi
master = true
processes = 5
# Askbot will running under the sock file
socket = /run/uwsgi/askbot.sock
chmod-socket = 664
uid = askbot
gid = nginx
vacuum = true
# uWSGI Log file
ogto = /var/log/uwsgi.log

Save and close the file, when you are finished.

Next, create a systemd service file to manage uWSGI service.

nano /etc/systemd/system/uwsgi.service

Add the following lines:

[Unit]
Description=uWSGI service

[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown askbot:nginx /run/uwsgi'
ExecStart=/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Save and close the file. Then, reload the systemd services with the following command:

systemctl daemon-reload

Install and Configure Nginx as a reverse Proxy for Askbot

Next, we will need to install and configure Nginx as a reverse proxy for the uWSGI application and Askbot.

First, install the Nginx webserver with the following command:

yum install nginx -y

Once installed, create a new virtual host configuration file for Askbot:

nano /etc/nginx/conf.d/askbot.conf

Add the following lines:

server {
         listen 80;
         server_name forum.mydomain.com;
         location / {
         include         uwsgi_params;
         uwsgi_pass	 unix:/run/uwsgi/askbot.sock;
    }
 }

Make sure to replace mydomain.com with your registered domain name.

Save and close the file, when you are finished.

Start Nginx and uWSGI services, and enable them to start after system reboot with the following command:

systemctl start nginx
systemctl enable nginx
systemctl start uwsgi
systemctl enable uwsgi

You can now check the status of uWSGI service with the following command:

systemctl status uwsgi

If everything goes fine, you should get the following output:

● uwsgi.service - uWSGI Emperor service
   Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-08-21 14:34:03 UTC; 16s ago
  Process: 28557 ExecStartPre=/bin/bash -c mkdir -p /run/uwsgi; chown askbot:nginx /run/uwsgi (code=exited, status=0/SUCCESS)
 Main PID: 28560 (uwsgi)
   Status: "The Emperor is governing 1 vassals"
   CGroup: /system.slice/uwsgi.service
           ├─28560 /bin/uwsgi --emperor /etc/uwsgi/sites
           ├─28562 /usr/bin/uwsgi --ini askbot.ini
           ├─28570 /usr/bin/uwsgi --ini askbot.ini
           ├─28571 /usr/bin/uwsgi --ini askbot.ini
           ├─28572 /usr/bin/uwsgi --ini askbot.ini
           ├─28573 /usr/bin/uwsgi --ini askbot.ini
           └─28574 /usr/bin/uwsgi --ini askbot.ini

Aug 21 14:34:03 centos uwsgi[28560]: your processes number limit is 3854
Aug 21 14:34:03 centos uwsgi[28560]: your memory page size is 4096 bytes
Aug 21 14:34:03 centos uwsgi[28560]: detected max file descriptor number: 1024
Aug 21 14:34:03 centos uwsgi[28560]: *** starting uWSGI Emperor ***
Aug 21 14:34:03 centos systemd[1]: Started uWSGI Emperor service.
Aug 21 14:34:03 centos uwsgi[28560]: *** has_emperor mode detected (fd: 7) ***
Aug 21 14:34:03 centos uwsgi[28560]: [uWSGI] getting INI configuration from askbot.ini
Aug 21 14:34:03 centos uwsgi[28560]: [uwsgi-static] added mapping for /m => /home/askbot/my-askbot/testapp/static
Aug 21 14:34:04 centos uwsgi[28560]: Wed Aug 21 14:34:04 2019 - [emperor] vassal askbot.ini has been spawned
Aug 21 14:34:04 centos uwsgi[28560]: Wed Aug 21 14:34:04 2019 - [emperor] vassal askbot.ini is ready to accept requests

Access Askbot Web Interface

Askbot is now installed and configured with Nginx and uWSGI support. Next, open your web browser and visit the URL http://forum.mydomain.com. You will be redirected to the Askbot dashboard page, as shown in the following image:

Congratulations! You have successfully installed Askbot on your CentOS 7 VPS. You have also configured uWSGI to run Askbot, as well as configuring Nginx to serve as a reverse proxy for the uWSGI application and Askbot. For more information, you can visit the Askbot official documentation at Askbot Doc.


Of course, you don’t have to install Askbot on CentOS 7 if you have a Managed CentOS VPS with us. In that case, you can simply ask our support team to install Askbot on CentOS 7 for you. They are available 24/7, and they will be able to help you with the installation.

PS. If you enjoyed reading this blog post on how to install Askbot on CentOS 7, feel free to share it on social networks by using the shortcuts below, or simply leave a comment in the comments section. Thank you.