Adventures in Machine Learning

From Development to Deployment: A Comprehensive Guide to Django Apps

Development and Deployment: A Comprehensive Guide to Setting Up Your Django App

Are you planning to develop and deploy a Django app? If so, you’re in the right place.

In this article, we’ll guide you through the entire process of setting up your Django app for development and deployment. We’ll cover everything from setting up your database to configuring Nginx and Gunicorn.


Database Setup

The first thing you need to do is set up your database. For this, we recommend using Postgres as your database server.

Postgres is a powerful and open-source relational database management system that can handle large amounts of data. To install Postgres, follow the instructions on the official website.

Once you’ve installed Postgres, you can create a new database using the command line:


createdb mydatabase


Dependency Setup

Next, you need to set up your development environment by installing the necessary dependencies. We recommend using virtualenv to create an isolated Python environment for your app.

This way, you won’t have to worry about installing packages system-wide. To create a new virtual environment, run the following command:


virtualenv envname


After activating your virtual environment, you can install the necessary packages for your app using pip3 and a requirements.txt file. Here are some of the packages you’ll need:

– Pillow

– libtiff-devel

– libjpeg-devel

– libzip-devel

– freetype-devel

– lcms2-devel

– libwebp-devel

– tcl-devel

– tk-devel

Sanity Check

Before moving on to deployment, it’s important to perform a sanity check to make sure everything is working as expected. You should be able to run your app locally using the gunicorn server and test it in your browser.


Now that your app is ready for deployment, it’s time to set up your production environment. We’ll assume you’re running Fedora 24, but these instructions should work for other systems as well.

Fedora 24 Setup

First, create a non-root user with administrative privileges. You can do this using the adduser command:


adduser myuser


Then, give your user administrative privileges by adding them to the sudo group:


usermod -aG sudo myuser


Required Packages

Next, install the necessary packages for your app, including gunicorn:


sudo dnf install gunicorn


Postgres Setup

Create a new database and user in Postgres using the

psql command-line tool:




CREATE USER myuser WITH PASSWORD ‘mypassword’;



Project Setup

Now, clone your Django project from your development environment and set up your virtual environment on your production server:


git clone myproject.git

virtualenv envname


Then, activate your virtual environment and set the DJANGO_SETTINGS_MODULE variable to point to your production settings file:


source envname/bin/activate

export DJANGO_SETTINGS_MODULE=myproject.production


Gunicorn Setup

In your production settings file, add the following lines to configure Gunicorn:


import multiprocessing

bind = “”

workers = multiprocessing.cpu_count() * 2 +1

environment = {





Replace the ellipses with the appropriate values.

Nginx Config

Configure Nginx to serve your app by creating a new server block in your Nginx configuration file:


server {

listen 80;


location / {


proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;




Replace with your actual domain name.

Gunicorn Start Script

Create a new start script for Gunicorn using the following template:


sudo nano /etc/systemd/system/myproject.service


Description=Gunicorn Daemon













Replace myuser, /path/to/project/, envname, and myproject with your actual values.

Modifying SELinux Policy Rules

If you’re running SELinux (Security-Enhanced Linux), you may need to modify your policy rules to allow Nginx to connect to your app. To do this, use the following commands:


sudo dnf install policycoreutils-devel

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp



Finally, start your app using systemd:


sudo systemctl start myproject

sudo systemctl enable myproject


Congratulations! Your app is now live and ready to be used.

In conclusion, setting up a Django app for development and deployment can seem daunting, but with the right tools and knowledge, it can be relatively easy.

Follow these steps, and you’ll have your app up and running in no time. This comprehensive guide provides step-by-step instructions for setting up your Django app for development and deployment.

From setting up your database to configuring Nginx and Gunicorn, each step is covered in detail. By following these instructions, you’ll have your app up and running in no time.

The importance of setting up an appropriate development and deployment environment for your app cannot be overstated. With the right tools and knowledge, it can be a straightforward and relatively easy process to get your app up and running on the web.

Popular Posts