Install and Configure Django | uWSGI | MariaDB on Centminmod


Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.

Install Centminmod

Install python3-devel

yum install python3-devel -y

Lets Install virtualenv and virtualenvwrapper

pip3 install virtualenv virtualenvwrapper

Lets add python3 path in

vi /usr/local/bin/


VIRTUALENVWRAPPER_PYTHON="$(command \which python)


VIRTUALENVWRAPPER_PYTHON="$(command \which python3)

Lets setup environment variables in .bashrc file

echo "export WORKON_HOME=/home/nginx/domains/python" >> ~/.bashrc
echo "source /usr/local/bin/" >> ~/.bashrc

Lets source our shell initialization script so that we can use this functionality in our present session

source ~/.bashrc

Lets create our first virtual host using and choosing option 2. In my case I am creating for domain name Once vhost is setup now its time to create our first project. I am creating project name “site_bullten_work”

mkvirtualenv site_bullten_work

Now lets install django under virtual environment of project site_bullten_work

pip3 install django

Lets create our first django project named “site_bullten_work”. You can change project name to your domain name you created. Navigate under the domain name path you setup using option 2. In my case its /home/nginx/domains/

First make executable permission of

chmod +x /home/nginx/domains/python/site_bullten_work/bin/

Create new project

cd /home/nginx/domains/ startproject site_bullten_work
chown -R nginx:nginx site_bullten_work

You will see a new project directory named site_bullten_work is created and it has all necessary files. Now Lets begin the database migration. By default SQLite is setup but we will be using MariaDB instead. Open your setting and change from SQLite to MariaDB.

First create your database to use with django project.

cd addons
./ setuserdb

Once database creation is done follow below steps. In my case I have created site_db as db name and db user and site@123 as password. You should change with your own db name and password.

vi site_bullten_work/site_bullten_work/


     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),


    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'site_db',
        'USER': 'site_db',
        'PASSWORD': 'site@123',
        'HOST': 'localhost',
        'PORT': '',

save file and lets start database migration

cd site_bullten_work
chmod +x
pip3 install mysqlclient
./ migrate

Now lets create administrative user

./ createsuperuser

As we are setting up Nginx to serve our site, we need to configure a directory which will hold our site’s static assets

vi site_bullten_work/

Add this line to the bottom of the file

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Now lets collect all static elements in static folder

./ collectstatic

Its time to test if our project is working. Lets run our project server at port 8080 and see. If you are running CSF then you need to enable port 8080 in TCP_IN.

./ runserver

Now open http://your-server-ip:8080 in your browser and check if your see below error then you need to add your server IP in allowed host in

vi site_bullten_work/




 ALLOWED_HOSTS = ['your-server-ip'] 

Now run ./ runserver again

You can also open admin using following


lets deactivate the environment and go back to our global environment shell


Install uWSGI globally through pip3

pip3 install uwsgi

Create configuration file. We are using site_bullten_work.ini as we created project name as “site_bullten_work”. You should replace it with your own. Below you should change project = site_bullten_work with your project name under chdir = %(base)/ we should change with your domain name.

mkdir -p /home/nginx/domains/uwsgi
cd /home/nginx/domains/uwsgi
vi site_bullten_work.ini
uid = nginx
gid = nginx

project = site_bullten_work
base = /home/nginx/domains

chdir = %(base)/
home = %(base)/python/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = /run/uwsgi/%(project).sock
chown-socket = nginx:nginx
chmod-socket = 660
vacuum = true

Create a Systemd Unit File for uWSGI

vi /etc/systemd/system/uwsgi.service
Description=uWSGI Emperor service

ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown nginx:nginx /run/uwsgi'
ExecStart=/usr/local/bin/uwsgi --emperor /home/nginx/domains/uwsgi


Now edit virtual host for your domain which you created above. You should replace with your domain configuration.

vi /usr/local/nginx/conf/conf.d/

In root add project name your created. See in the image below

In location tab add as below. Change site_bullten_work.sock with your project name socket.

location / {
   include uwsgi_params;
   uwsgi_pass unix:/run/uwsgi/site_bullten_work.sock;

Verify nginx configuration

nginx -t

Start services

systemctl start uwsgi
systemctl enable uwsgi

Lets open with the domain name we created. If we get below error then we need to add domain name in Allowed Host


Replace with your domain name

ALLOWED_HOSTS = ['', '']

Restart uwsgi

systemctl restart uwsgi

This way we setup django application on CentMinMod installation 🙂