- 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
Copy after login
- Now create a Virtual environment (create new folder ? for this)
- Activate the environment
source environment_name/bin/activate # use name created above "environment_name"
Copy after login
- Now Install packages ? in environment
pip install django
pip install gunicorn
// or directly install both
pip install django gunicorn
Copy after login
Creating Django Project
- Use this command to create Django project
django-admin startproject myproject # use any name "myproject"
Copy after login
Create a Gunicorn Configuration File
nano gunicorn_conf.py # use any name but using same better "gunicorn_conf.py"
Copy after login
- 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
Copy after login
- 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"
Copy after login
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.
Copy after login
- Now make some changes in Django project
- First change some code in settings.py in project folder. Directory myproject/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
Copy after login
# example code
ALLOWED_HOSTS = ['localhost', '0.0.0.0', '127.0.0.1'] # use IP address here
Copy after login
- In above command we used IP address, to get that open another new terminal and run this command to get all about network.
ifconfig
Copy after login
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
Copy after login
- 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;
}
}
Copy after login
- 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
Copy after login
- That's it.
## Testing:
- First check Nginx configuration file for any syntax error.
sudo nginx -t
Copy after login
- If you don't have any errors, first restart the Nginx using this command
sudo systemctl restart nginx
Copy after login
Setting up Firewall for Nginx
- Open new terminal, and install this package
sudo apt install ufw
Copy after login
- Now allow Nginx through Firewall
sudo ufw allow 'Nginx Full'
Copy after login
Using Instructions -
- First start Nginx by opening new terminal
sudo systemctl start nginx
Copy after login
- 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
Copy after login
- 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
Copy after login
Happy Coding ? - Be Lazy
Contact DM - Twitter(X)
Contact Mail - sanya.san@myyahoo.com
The above is the detailed content of Building a Scalable Django Application with Gunicorn and Nginx. For more information, please follow other related articles on the PHP Chinese website!