Даже если бы я следил за официальные инструкции, когда я запускаю тестовый сайт Django с помощью uWSGI, файлы CSS для интерфейса администратора не загружаются. Если я открою URL-адрес файла CSS, например http://localhost:8443/static/admin/css/base.css
, Я получаю ошибку 404. Я искал локальный файл и думаю, его путь /usr/local/lib/python3.3/dist-packages/django/contrib/admin/static/admin/css/base.css
; поэтому я также попытался запустить uwsgi от имени root, но ничего не изменилось.
У меня нет проблем с использованием python3 manage.py runserver
. Если я открою http://localhost:8000/static/admin/css/base.css
, файл загружается в браузер, и стиль применяется к странице администратора.
Это команда, которую я выполняю в bash:
uwsgi --ini ~/.uwsgi/conf/django.ini --set-placeholder project_name=mysite --set-placeholder port=8443
и это содержимое django.ini:
[uwsgi]
module = %(project_name).wsgi:application
https = :%(port),/usr/local/nginx/conf/server.crt,/usr/local/nginx/conf/server.key,HIGH
strict = true
chdir = /home/marco/django-projects/%(project_name)
env = DJANGO_SETTINGS_MODULE=%(project_name).settings
socket = /home/marco/.uwsgi/%(project_name).socket
pidfile = /home/marco/.uwsgi/%(project_name).pid
daemonize = /home/marco/.uwsgi/%(project_name).log
master = true
enable-threads = true
harakiri = 20
max-requests = 5000
vacuum = true
Официальные документы по развертыванию (независимо от сервера WSGI) не охватывают обслуживание статических файлов (которые обычно управляются веб-сервером). Нужные документы здесь:
https://docs.djangoproject.com/en/dev/howto/static-files/deployment/
в конечном итоге обслуживание статических файлов с uWSGI довольно просто:
http://uwsgi-docs.readthedocs.org/en/latest/StaticFiles.html
но если вы можете сделать это в nginx, лучше
У меня та же проблема. Мой сервер nginx на Centos 7.6 не может получить доступ к статической папке в пути /home/user/app/mysyte/static/
. В /var/log/nginx/error.log
та же ошибка
open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)
Для решения и понимания этой проблемы :=*
getenforce
cat /var/log/audit/audit.log | grep nginx
для меня строка с ошибками выглядит как
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)
Копировать идентификатор сообщения аудита 1558033633.723:201
grep yours_audit_id /var/log/audit/audit.log | audit2why
вывод для меня
[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
Итак, как вы можете видеть ответ здесь setsebool -P httpd_read_user_content 1
когда вы запускаете эту команду, вы видите свой статический контент