Deploy Django project on AWS with Apache2 and mod_wsgi module.

Author: neptune | 22nd-May-2022 | Views: 688
#Python #Django

Steps to Deploy Django Project on Apache2 Server and Ubuntu OS.

In this blog, I use the AWS Ubuntu 18.22 instance as a Hosting platform and used an Apache2 server with mod_wsgi for configurations.

Step 1. Run these below cmd's to get the latest updates.

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install -y python3-pip

$ sudo python3 -m pip install --upgrade pip

Step2. Now let's make a new directory for our project.

$ mkdir /var/www

Move into the directory:

$ cd /var/www

Step 3. Now, Create a quick project or Import or clone an existing django project.

I will prefer to create a small project and then import or clone your existing project to make sure other things are working as expected.

Check that the Python is installed 

$ python3 --version

$ sudo python3 -m pip install django


$ sudo python3 -m pip uninstall django==2.2

Check the Django version.

$ python3 -m django --version

Create a project using django admin.

$ sudo django-admin startproject mysite

Change directory into that project:

$ cd mysite/

Create an app using 

$ sudo python3 startapp website

Migrate the changes to create db instances.

$ sudo python3 migrate

If you face any issue in migration run the below cmd:

$ sudo python3 migrate --run-syncdb

Run the django server.

$ sudo python3 runserver

Step 4. Now install apache2 and mod_wsgi for Python3.

$ sudo apt-get install -y apache2 libapache2-mod-wsgi-py3

Now let's setup the apache config file for our website:

$ sudo nano /etc/apache2/sites-available/mysite.conf


<VirtualHost *:80>


ErrorLog ${APACHE_LOG_DIR}/mysite-error.log 

CustomLog ${APACHE_LOG_DIR)/mysite-access.log combined

WSGIDaemonProcess mysite processes=2 threads=25 python-path=/var/www/mysite 

WSGIProcessGroup mysite

WSGIScriptAlias / /var/www/mysite/mysite/ 

Alias /robots.txt /var/www/mysite/static/robots.txt

Alias /favicon.ico /var/www/mysite/static/favicon.ico

Alias /static/ /var/www/mysite/static/

Alias /static/ /var/www/mysite/media/

<Directory /var/www/mysite/mysite>


      Require all granted



<Directory /var/www/mysite/static> 

   Require all granted 


<Directory /var/www/mysite/media>

    Require all granted



<Directory /var/www/mysite>

        WSGIApplicationGroup %{GLOBAL}

        Order deny,allow

        Allow from all


ServerName, WSGIProcessGroup and also change Directory as per the project.


Remove the default site if you wish to remove it.

$ sudo rm /etc/apache2/sites-available/000-default.conf

Now enable our new site “mysite.conf” and reload the Apache server.

$ sudo a2ensite mysite

$ sudo systemctl reload apache2

Check the status using below cmd.

$ sudo systemctl status apache2.service

Finally, we can try the url or IP that we configured in “mysite.conf” in ServerName. 

Example: ServerName

But we find that we can't access the Images and not able to login to application because our database is read-only for our user.

In this case, using apache, our "user" is www-data. We need to give this user permission to edit these files for us. 

$ cd /var/www/

$ sudo chown www-data mysite/

$ sudo chown www-data mysite/db.sqlite3

$ sudo chown www-data mysite/*

$ sudo chown www-data mysite/media/*

$ sudo chown www-data mysite/static/*

Then reload server:

$ sudo service apache2 reload 


$ sudo systemctl reload apache2

You can check the users using:

$ ls -l

You can check the status of your apache server:

$ sudo systemctl status apache2.service

To start or stop apache service use below cmds:

$sudo systemctl start apache2.service

$sudo systemctl stop apache2.service

After successful run now you can import your existing project.

$ sudo git clone

Then install all the required applications like:

$ sudo pip install django-taggit==1.3.0

$ sudo pip install django-crispy-forms==1.10.0

$ sudo pip install django-summernote==

$ sudo apt install Pillow==8.1.0

Run this cmd to get all the static files in a path that you configured in so that django can use them.

$ sudo python3 collectstatic

To check the logs use below cmds:

$ cd /var/log/apache2

Move to the directory or directly access using below nano cmd:

$ sudo nano /var/log/apache2/mysite-error.log

$ sudo nano /var/log/apache2/mysite-access.log

Thanks for Reading !!!

anonymous | Nov. 30, 2022, 1:20 a.m.

This helped me lot 👍

anonymous | July 17, 2022, 5:43 p.m.


anonymous | May 13, 2022, 4:22 p.m.

I was looking Apache2 and Flask but this also worked

Related Blogs
How to extract Speech from Video using Python?
Author: neptune | 01st-Dec-2022 | Views: 3101
Simple and easy way to convert video into audio then text using Google Speech Recognition API...

How to download video from youtube using python module ?
Author: neptune | 22nd-May-2022 | Views: 1851
We will let you know how you can easily download the Youtube high quality videos along with subtitle, thumbnail, description using python package..

Mostly asked Python Interview Questions - 2022.
Author: neptune | 25th-May-2022 | Views: 1059
#Python #Interview
Python interview questions for freshers. These questions asked in 2022 Python interviews...

How to reverse string in Python ?
Author: neptune | 16th-May-2022 | Views: 909
We are going to explore different ways to reverse string in Python...

Python Built-in functions lambda, map, filter, reduce.
Author: neptune | 22nd-May-2022 | Views: 883
We are going to explore in deep some important Python build-in functions lambda, map, filter and reduce with examples...

Best Python package manager and package for virtual environment ?
Author: neptune | 15th-Apr-2022 | Views: 832
#Python #Anaconda #Virtualenv #Pip
Which is the best package manager for python and Virtual environment management using Virtualenv and Anaconda...

Will, AI kills Developer's jobs?
Author: neptune | 22nd-May-2022 | Views: 634
#Python #Machine learning #AI
GPT-3’s performance has convinced that Artificial intelligence is closer or at least AI-generated code is closer than we think. It generates imaginative, insightful, deep, and even excellent content...

Do you know Jupyter is now full-fledged IDE?
Author: neptune | 15th-Apr-2022 | Views: 582
#Python #Jupyter
Jupyter is a widely used tool by Data scientists. So developers from institutions like Two Sigma, Bloomberg and convert it into IDE lets see..

Core Python Syllabus for Interviews
Author: neptune | 11th-Jun-2022 | Views: 569
#Python #Interview
STRING MANIPULATION : Introduction to Python String, Accessing Individual Elements, String Operators, String Slices, String Functions and Methods...

Datatypes in Python.
Author: neptune | 22nd-May-2022 | Views: 340
Python have different types of datatypes like Numbers, Strings, Lists, Tuples, Dictionary, Set, Frozenset, Bool, Mutable, and Immutable...

View More