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

or 

$ 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 manage.py. 

$ sudo python3 manage.py startapp website


Migrate the changes to create db instances.

$ sudo python3 manage.py migrate

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

$ sudo python3 manage.py migrate --run-syncdb


Run the django server.

$ sudo python3 manage.py 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

Configuration:

<VirtualHost *:80>


ServerName neptuneworld.in


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/wsgi.py 

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>

     <Files wsgi.py> 

      Require all granted

</Files> 

</Directory>


<Directory /var/www/mysite/static> 

   Require all granted 

</Directory>


<Directory /var/www/mysite/media>

    Require all granted

</Directory> 

</VirtualHost>



<Directory /var/www/mysite>

        WSGIApplicationGroup %{GLOBAL}

        Order deny,allow

        Allow from all

</Directory>


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 neptuneworld.in.


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 

or

$ 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 https://github.com/Neptune998/repository.git


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==0.8.11.6

$ sudo apt install Pillow==8.1.0

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

$ sudo python3 manage.py 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
#Python
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
#Python
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
#Python
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
#Python
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 fast.ai 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
Python have different types of datatypes like Numbers, Strings, Lists, Tuples, Dictionary, Set, Frozenset, Bool, Mutable, and Immutable...

View More