[Solved]-Run multiple django project with nginx and gunicorn

8👍

You use a proxy_pass with two different sockets. Setup gunicorn on the first project to listen on a socket called first_project.sock, and setup gunicorn on the second project to listen on a socket called second_project.sock.

gunicorn for first project
[Unit] Description=gunicorn for firstProject Requires=gunicorn.socket After=network.target [Service] User=rfr Group=www-data WorkingDirectory=/home/rfr/first_project/first_project ExecStart=/home/rfr/first_project/env/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/first_project.sock \ first_project.wsgi:application [Install] WantedBy=multi-user.target
gunicorn for second project
[Unit] Description=gunicorn for secondProject Requires=gunicorn.socket After=network.target [Service] User=rfr Group=www-data WorkingDirectory=/home/rfr/second_project/second_project ExecStart=/home/rfr/second_project/env/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/second_project.sock \ second_project.wsgi:application [Install] WantedBy=multi-user.target
nginx configuration
server { listen 80; server_name 192.168.11.252; location = /favicon.ico { access_log off; log_not_found off; } location /firstProject/assets/ { root /home/rfr/first_project/first_project; } location /secondProject/assets/ { root /home/rfr/second_project/second_project; } location /firstProject { include proxy_params; rewrite /firstProject(.*) $1; proxy_pass http://unix:/run/first_project.sock; } location /secondProject { include proxy_params; rewrite /secondProject(.*) $1; proxy_pass http://unix:/run/second_project.sock; } }

The heavy lifting here is by the nginx rewrite directive which will let your app think of the url as everything after firstProject or secondProject in the url.

👤2ps

2👍

It worked for me with this config:

1. sudo nano /etc/systemd/system/firstsite.socket

    [Unit]
    Description=firstsite socket
    
    [Socket]
    ListenStream=/run/firstsite.sock
    
    [Install]
    WantedBy=sockets.target

2. sudo nano /etc/systemd/system/secondsite.socket

    [Unit]
    Description=secondsite socket
    
    [Socket]
    ListenStream=/run/secondsite.sock
    
    [Install]
    WantedBy=sockets.target

3. sudo nano /etc/systemd/system/firstsite.service

    [Unit]
    Description=gunicorn daemon
    Requires=firstsite.socket
    After=network.target
    
    [Service]
    User=non-root-user
    Group=www-data
    WorkingDirectory=/home/non-root-user/firstsite/
    ExecStart=/home/non-root-user/firstsite/env/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/run/firstsite.sock \
    firstsite.wsgi:application
    
    [Install]
    WantedBy=multi-user.target

4. sudo nano /etc/systemd/system/secondsite.service
    [Unit]
    Description=gunicorn daemon
    Requires=secondsite.socket
    After=network.target
    
    [Service]
    User=non-root-user
    Group=www-data
    WorkingDirectory=/home/non-root-user/secondsite/
    ExecStart=/home/non-root-user/secondsite/env/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/run/secondsite.sock \
    secondsite.wsgi:application
    
    [Install]
    WantedBy=multi-user.target

5. NGINX firstsite.ru

        location / {
            proxy_pass http://unix:/run/firstsite.sock; 
            include proxy_params;
        }


6. NGINX secondsite.ru


        location / {
            proxy_pass http://unix:/run/secondsite.sock; 
            include proxy_params;
        }


sudo systemctl start firstsite.socket
sudo systemctl enable firstsite.socket
sudo systemctl status firstsite.socket
sudo systemctl restart firstsite

sudo systemctl start secondsite.socket
sudo systemctl enable secondsite.socket
sudo systemctl status secondsite.socket
sudo systemctl restart secondsite

Leave a comment