Css не работает после развертывания приложения django на aws с gunicorn nginx
Я развернул свой проект django на EC2, но css не работает после развертывания. Я также выполнил команду collcectstatic, но мне все равно не повезло, когда я проверил в nginx error.log, он показывает перед файлами css, что разрешение запрещено, вот так:
2022/07/18 17:38:01 [error] 2262#2262: *4 open() "/home/ubuntu/theoj/online_judge_project/staticindex.css" failed (13: Permission denied), клиент: 49.38.225.106, сервер: 13.126.144.76, запрос: "GET /static/index.css HTTP/1.1", host: "13.126.144.76",
.
структура каталога моего проекта:
online_judge_project/
account/
homesrc/
language/
media/
oj/ /*name of my project*/
settings.py
problempg/
static/ /* folder containing css files*/
staticfiles/ /* folder made after running command collectstatics*/
template/
manage.py
**settings.py: **
nginx congif file:
server {
listen 80;
server_name 13.126.144.76;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/theoj/online_judge_project;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Чтобы статические файлы загружались правильно, мне пришлось поместить их в каталог в папке /var/, а затем добавить location /static { autoindex on; root /var/WebApp_Static_Files/site_static; }
в конфигурацию nginx для сайта. Убедитесь, что каталог /var/WebApp_Static_Files имеет права доступа 777
Для уточнения, это копия всех статических файлов в этой директории, которая находится на сервере под управлением Nginx, структуру проекта менять не нужно
Вам нужно будет отправлять файлы на сервер каждый раз, когда вы вносите изменения в css, изображения и все остальное. Я настроил задание cron, чтобы делать это периодически, так что мне не нужно было делать это вручную
Также вы можете удалить секретный ключ из приведенного выше кода
При отсутствии STATICFILES_STORAGE, значение location в конфигурации nginx должно отражать имя папки, в которую вы помещаете файлы. В данном случае, в той же папке, что и ваш STATIC_ROOT.
location /static/ {
alias /home/ubuntu/theoj/online_judge_project/staticfiles/;
}
(Используя alias
, а не root
, так как конечные каталоги имеют разные имена)
В идеале, STATIC_ROOT - это загон перед развертыванием в другом месте (например, STATICFILES_STORAGE), но это должно заставить ваш сайт работать на данный момент.