Serving static files in production

26 views
Skip to first unread message

Brian Odhiambo

unread,
Apr 26, 2023, 11:00:35 AM4/26/23
to Django users
Hello everyone,
I am deploying a django project to a dedicated server.
I have set nginx to find static files in this file "staticfiles".

This is the setting in settings.py file:

STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = 'static/'

After running collectstatic command, my project can't still load the static files.
Could I get a general way of going about this, without having to rely on a third party library like whitenoise?

My appreciation in advance.

David Nugent

unread,
Apr 26, 2023, 7:37:04 PM4/26/23
to django...@googlegroups.com
Ensure that nginx is correctly configured, since from what you have provided the django configuration looks correct (although I generally use /static/ as STATIC_URL - with the leading / but should work as you have it). Check the nginx error log to try to discover the cause of the 404s. I suspect that the location blocks are defined in the wrong order or the directory pointing to the incorrect location.

In any case, whitenoise is not a bad solution tbh, and very flexible besides. I would solve the above - which should work - before investigating that further.

Regards,
David

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/eefed174-efad-4101-80c1-b0a589c64507n%40googlegroups.com.

Prosper Lekia

unread,
Apr 27, 2023, 1:12:06 AM4/27/23
to django...@googlegroups.com
Is whitenoise installed and added to MiddleWare?

Brian Odhiambo

unread,
Apr 27, 2023, 1:42:44 AM4/27/23
to django...@googlegroups.com
Thanks for your response @David. 
Here is my nginx configuration.
1c9b64ec-c74f-4004-8b8d-9a6e7a3d8069.png
Pointed it to staticfiles after running collectstatic files command.

Brian Odhiambo

unread,
Apr 27, 2023, 1:44:59 AM4/27/23
to django...@googlegroups.com
@Prosper, 
I installed whitenoise at some point, but later removed its configuration.

On Thu, Apr 27, 2023 at 8:11 AM Prosper Lekia <lekiap...@gmail.com> wrote:

David Nugent

unread,
Apr 27, 2023, 4:35:36 AM4/27/23
to django...@googlegroups.com
Don't think I ever used alias for this.

You could try something like this (works for me - this is a cut and paste of an existing working config) though you may be a little more constrained with names of directories:

server {
    [... elided]

    location / {

        location ~ /static/ {
            sendfile    on;
            tcp_nopush  on;
            root        /srv/approot;
        }

        location / {
            proxy_set_header    Host $http_host;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto $scheme;
            proxy_redirect      off;
            proxy_pass          http://<upstream-name>;
        }
    }
    [... elided]
}

Note that files being served are contained in the actual directory /srv/approot/static, and you can serve media here also from the "media" dir using

    location ~ /(media|static)/ { ...

HTH, David
Reply all
Reply to author
Forward
0 new messages