- Scaling your web app is essential for success.
- Django is great, but Gunicorn and Nginx are needed for true scalability.
- This post shows you how to build a scalable Django app with Gunicorn and Nginx.
- This post follows in "Kali Linux". You can use any Linux based OS.
Introduction:
- Building a web application that can handle a growing number of users and requests is crucial for any successful project.
- Django, a powerful Python framework, provides a solid foundation, but for true scalability, you need to leverage the power of tools like Gunicorn and Nginx.
- This post will guide you through the process of setting up a scalable Django application using Gunicorn and Nginx, ensuring your website can handle the demands of a growing user base.
⚙️ Setting up -
- I am doing this in Linux.
- First check python3, pip, nginx Installed or not.
- To install use this command (install in home/Desktop or new terminal)
sudo apt install python3 python3-pip nginx
- Now create a Virtual environment (create new folder 📂 for this)
- Activate the environment
source environment_name/bin/activate # use name created above "environment_name"
- Now Install packages 📦 in environment
- django, gunicorn
pip install django
pip install gunicorn
// or directly install both
pip install django gunicorn
Creating Django Project
- Use this command to create Django project
django-admin startproject myproject # use any name "myproject"
Create a Gunicorn Configuration File
- Use this command
nano gunicorn_conf.py # use any name but using same better "gunicorn_conf.py"
- Add the following code in "gunicorn_config.py"
import multiprocessing
bind = '127.0.0.1:8000' # Django running port/link
workers = multiprocessing.cpu_count() * 2 + 1
- Save file using "CTRL + o"(to save), press ENTER, "CTRL + X"(to exit)
- This will create workers and also we should add our Django running link. ### Run the Django project/application with gunicorn
- First navigate to project folder
cd myproject # navigate to Django Project "myproject"
- Now run this command
gunicorn myapp.wsgi:application -c ../gunicorn_conf.py # here myapp is myproject
# here "myapp" is a Django project name, and at last gunicorn_conf.py is a gunicorn configuration file which created above/before.
- Now make some changes in Django project
- First change some code in
settings.py
in project folder. Directorymyproject/myproject/settings.py
> Django project - For this use any code editor like VS Code. To open from terminal use this command
code- oss
# to open vs code from terminal
- Add this code
# example code
ALLOWED_HOSTS = ['localhost', '0.0.0.0', '127.0.0.1'] # use IP address here
- In above command we used IP address, to get that open another new terminal and run this command to get all about network.
ifconfig
Create a Nginx Configuration File
- Open another new terminal, run this command
sudo nano /etc/nginx/sites-available/myapp # use any name "myapp"
# better use vs code instead of nano
sudo code- oss /etc/nginx/sites-available/myapp # check code-oss
- Add code in that nginx file
server {
listen 80;
server_name your_domain.com; # Replace with your domain or IP address
# example for aboveline: server_name 'ipaddress' 'another domain' ;
location / {
proxy_pass http://127.0.0.1:8000; # Gunicorn's default address
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- save the file
- create a Symbolic Link to enable Nginx Configuration, run this command
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled
# change "myapp" to nginx config file name used above
- That's it. ## Testing:
- First check Nginx configuration file for any syntax error.
sudo nginx -t
- If you don't have any errors, first restart the Nginx using this command
sudo systemctl restart nginx
Setting up Firewall for Nginx
- Open new terminal, and install this package
sudo apt install ufw
- Now allow Nginx through Firewall
sudo ufw allow 'Nginx Full'
Using Instructions -
- First start Nginx by opening new terminal
sudo systemctl start nginx
- Now to start complete project open a terminal and go to virtualenv created and activate
gunicorn myapp.wsgi:application -c ../gunicorn_conf.py
# in above code "myapp" is a Django project name
# last gunicorn_conf.py is a gunicorn configuration file name
- Now the complete project started.
- Now you can open your django project with your IP address.
- Navigate to browser and search with your IP address.
- To stop Nginx, use this command
sudo systemctl stop nginx
Happy Coding 😴 - Be Lazy
Contact DM - Twitter(X)
Contact Mail - sanya.san@myyahoo.com
Top comments (0)