skip to Main Content

Everything worked very well before gunicorn and nginx, static files were served to the website.
But now, it doesn’t work anymore.

Settings.py

STATICFILES_DIRS = [
'/root/vcrm/vcrm1/static/'
]

STATIC_ROOT = os.path.join(BASE_DIR, 'vcrm/static')
STATIC_URL = '/static/'

MEDIA_ROOT = '/root/vcrm/vcrm1/vcrm/media/'
MEDIA_URL = '/media/'

/etc/nginx/sites-available/vcrm

server {
listen 80;
server_name 195.110.58.168;

location = /favicon.ico { access_log off; log_not_found off; }
location /static {
    root /root/vcrm/vcrm1/vcrm;
}

location = /media {
    root /root/vcrm/vcrm1/vcrm;
}

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

}

When I run collectstatic:

You have requested to collect static files at the destination
location as specified in your settings:

/root/vcrm/vcrm1/vcrm/static

This will overwrite existing files!
Are you sure you want to do this?

and then:

Found another file with the destination path 'admin/js/vendor/jquery/jquery.min.js'. It will be 
ignored since only the first encountered file is collected. If this is not what you want, make sure 
every static file has a unique path.

0 static files copied to '/root/vcrm/vcrm1/vcrm/static', 251 unmodified.

2

Answers


  1. NGINX + Gunicorn + Django

    Django project:

     djangoapp
     - ...
     - database
     - djangoapp
       - settings.py
       - urls.py
       - ...
     - media
     - static
     - manage.py
     - requirements.txt
    

    Server: install venv, requirements.txt:

    sudo apt-get update
    sudo apt-get install -y git python3-dev python3-venv python3-pip supervisor nginx vim libpq-dev
    --> cd djangoapp
    pathon3 -m venv venv
    source venv/bin/activate
    (venv) pip3 install -r requirements.txt 
    

    Server: install NGINX:

    sudo apt-get install nginx
    sudo vim /etc/nginx/sites-enabled/default
    

    Server: NGINX config:

       server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
    
            location /static/ {
                alias /home/ubuntu/djangoapp/static/; 
            }
    
    
            location /media/ {
                alias /home/ubuntu/djangoapp/media/; 
            }
    
    
            location / {
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect off;
                add_header P3P 'CP="ALL DSP COR PSAa OUR NOR ONL UNI COM NAV"';
                add_header Access-Control-Allow-Origin *;
            }
    }
    

    Server: setup supervisor:

    cd /etc/supervisor/conf.d/
    sudo vim djangoapp.conf
    

    Server: supervisor config:

    [program:djangoapp]
    command = /home/ubuntu/djangoapp/venv/bin/gunicorn djangoapp.wsgi  -b 127.0.0.1:8000 -w 4 --timeout 90
    autostart=true
    autorestart=true
    directory=/home/ubuntu/djangoapp 
    stderr_logfile=/var/log/game_muster.err.log
    stdout_logfile=/var/log/game_muster.out.log
    

    Server: update supervisor with the new process:

    sudo supervisorctl reread
    sudo supervisorctl update
    
    sudo supervisorctl restart djangoapp
    
    Login or Signup to reply.
    1. Run python manage.py collectstatic from your project directory.
    2. Access nginx’s webserver config file and add a location in your config file.
    3. Reload nginx server with sudo systemctl reload nginx.
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search