Doesn't Nginx support Django admin static files
Asked Answered
S

3

6

My django site user-end is running good with the static files but don't know why all the admin panel static files is not working. While it's working normally but not with linux any idea ??

nginx .conf file

 upstream sample_project_server {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).
  server unix:/home/me/SPEnv/run/gunicorn.sock fail_timeout=0;
}
server {

listen   800;
server_name <your domain name>;

client_max_body_size 4G;
access_log /home/me/logs/nginx-access.log;
error_log /home/me/logs/nginx-error.log;

location /static {
    root   /home/me/DjangoProjects/SP/SP;
}

location / {

    # an HTTP header important enough to have its own Wikipedia entry:
    #   http://en.wikipedia.org/wiki/X-Forwarded-For
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    # enable this if and only if you use HTTPS, this helps Rack
    # set the proper protocol for doing redirects:
    # proxy_set_header X-Forwarded-Proto https;

    # pass the Host: header from the client right along so redirects
    # can be set properly within the Rack application
    proxy_set_header Host $http_host;

    # we don't want nginx trying to do something clever with
    # redirects, we set the Host: header above already.
    proxy_redirect off;

    # set "proxy_buffering off" *only* for Rainbows! when doing
    # Comet/long-poll stuff.  It's also safe to set if you're
    # using only serving fast clients with Unicorn + nginx.
    # Otherwise you _want_ nginx to buffer responses to slow
    # clients, really.
    # proxy_buffering off;

    # Try to serve static files from nginx, no point in making an
    # *application* server like Unicorn/Rainbows! serve static files.
    if (!-f $request_filename) {
        proxy_pass http://sample_project_server;
        break;
    }
}

# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
    root   /home/me/DjangoProjects/SP/SP;
}

}

and settings.py

Static files (CSS, JavaScript, Images)

https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = '/home/me/DjangoProjects/SP/SP/static/'
STATICFILES_DIRS = (
    # os.path.join(BASE_DIR, 'SP','static/admin'),
        '/home/me/DjangoProjects/SP/SP/static/',
        '/home/me/SPEnv/lib/python2.7/site-packages/django/contrib/admin/static'
    )                                                                       
Stacystadholder answered 10/11, 2017 at 15:4 Comment(8)
STATIC_URL should be /static/ hereFloatation
And STATICFILES_DIRS should not contain STATIC_ROOT.Ferocious
I tried it STATIC_URL as /static/ still didn't work @FloatationStacystadholder
WHAT should it containt ? @DanielRosemanStacystadholder
As the docs say, STATICFILES_DIRS is a list of source directories containing files that will be copied by collectstatic. STATIC_ROOT is the directory they are copied to, and the one that you put into the nginx configuration.Ferocious
But how my user side working perfect than. Only admin site is not getting files.Stacystadholder
And what the changes if i make it will work for django panel do you thinkStacystadholder
How about os.path.join(BASE_DIR, 'SP','static'), for static_dirsStacystadholder
U
9

You need to add the directory for the admin static files to your STATICFILES_DIRS list before you run collectstatic. Something like this:

STATICFILES_DIRS = [
    '/project/src/static',
    '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static',
]

Where the first entry is the path to your app's static files and the second is the location of the django admin package.

Upstretched answered 10/11, 2017 at 22:3 Comment(7)
Well but after i change the directory whenever i am trying to run collectstatic i am getting this error OSError: [Errno 13] Permission denied: '/home/SocialAuthExceptionMiddlewareime'Stacystadholder
can you post your entire settings.py file?Upstretched
Well after giving permission it creates a folder inside my home directry and put the the admin static file there still not working.Stacystadholder
I have updated my question with my current settings.py file. And now it's saying when i am running collectstatic **django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting **Stacystadholder
You're getting that error because STATIC_ROOT is the destination where all the files collected by collectstatic) will be stored. It should be a different directory than where collectstatic is getting the original files from. Think about it like this: STATIC_URL is a URL that points to the STATIC_ROOT directory. The STATIC_ROOT directory is filled with the various static files that are copied by collectstatic from all of the directories listed in STATICFILES_DIR. STATIC_ROOT should NOT be in STATICFILES_DIR- you need to setup a separate STATIC_ROOT directory.Upstretched
Great. Now i understand what's the real case. THanks a lot for you answers.Stacystadholder
for me it was /usr/local/lib/python3.6/dist-packages/django/contrib/admin/static/adminLees
S
1

To resolve this problem, you can use whitenose

install it with pip :

pip install whitenose

Then add this line “whitenoise.runserver_nostatic”, into your Installed_apps of setting file.

INSTALLED_APPS = [
     ...
     'whitenoise.runserver_nostatic',
     ... 
]

Add also ‘whitenoise.middleware.WhiteNoiseMiddleware’, into MiddleWare of your setting File.

MIDDLEWARE = [
     ...
     'whitenoise.middleware.WhiteNoiseMiddleware',
     ... 
]

After this run :

python manage.py collectstatic

Now you can restart nginx, gunicor ...

sudo systemctl restart nginx
sudo service gunicorn restart
sudo service nginx restart
Selfsustaining answered 21/5, 2023 at 22:5 Comment(0)
I
-1

I have the same problem. My nginx server on Centos 7.6 can't access to static folder in path /home/user/app/mysyte/static/. In /var/log/nginx/error.log same error

open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)

For solving and understanding this problem :=*

  1. run command getenforce
  2. if enforcing - cat /var/log/audit/audit.log | grep nginx

for me string with errrors looks like

type=AVC msg=audit(1558033633.723:201): avc:  denied  { read } for  pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1558033633.723:201): arch=c000003e syscall=2 success=no exit=-13 a0=564f710dd55d a1=800 a2=0 a3=68632f656d6f682f items=0 ppid=7757 pid=7758 auid=4294967295 uid=998 gid=996 euid=998 suid=998 fsuid=998 egid=996 sgid=996 fsgid=996 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)

copy id of audit msg 1558033633.723:201

  1. run command grep yours_audit_id /var/log/audit/audit.log | audit2why

output for me

[root@uwsgi ~]# grep 1558034479.384:221 /var/log/audit/audit.log | audit2why
type=AVC msg=audit(1558034479.384:221): avc:  denied  { read } for  pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

        Was caused by:
        The boolean httpd_read_user_content was set incorrectly.
        Description:
        Allow httpd to read user content

        Allow access by executing:
        # setsebool -P httpd_read_user_content 1

So as you can see answer here setsebool -P httpd_read_user_content 1 when you run this command you see your static content

Islington answered 16/5, 2019 at 10:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.