[SOLVED] Static files only served when debug = True and does not when it is False in production for nginx ubuntu 22.04


This Content is from Stack Overflow. Question asked by YoungE

I have followed the setup procedures here https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04 and my Django app is running but whenever I turn debug = False it will not load my static files.

Below is my nginx configuration:

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/sammy/myprojectdir;

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

and my settings.py:

STATIC_URL = 'static/'

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

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'etal/static')]

I have tried my best, researched a lot online, and followed many links but still fruitless.


I think this is due to the fact that in your project url.py there is a line:

if settings.DEBUG:
    urlpatterns += static(....)

I also recommend that you replace root with alias:

location /static/ {
        alias /home/sammy/myprojectdir;

and execute the statiс collection command:

python3 manage.py collectstatic

and lastly, make sure that you do not have the conditions for checking the debug mode anywhere

Make sure nginx looks for static where you have STATIC_ROOT:

location /static/ {
        alias /home/sammy/myprojectdir/static/;

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

This Question was asked in StackOverflow by YoungE and Answered by darl1ne It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?