NGINX обслуживает статические файлы - проект django не имеет стилизации
Мне удалось развернуть мое приложение Django, но я не могу передать статические файлы с помощью Nginx. Я выполнил все инструкции по развертыванию в продакшен. Когда я проверяю страницу, все, что я вижу, это пустую папку static. Может ли кто-нибудь заметить ошибку?
Спасибо большое
nginx.conf
10 upstream app_upstream {
9 server app:8080;
8 }
7
6 server {
5 listen 80;
4 listen 443;
1 server_name #######;
2
3 location /static/ {
4 alias /static/;
5 }
6
7 location /media/ {
8 alias /media/;
9 }
10
11 location / {
12 proxy_set_header Host $host;
13 proxy_pass http://app_upstream;
14 }
15 }
settings.py
14
13 STATIC_URL = '/static/'
12 STATIC_ROOT = '/static/'
docker-compose.yml
....
12 app:
13 build: .
14 ports:
15 - 8000:8000
16 - 8080:8080
17 env_file:
18 - db_${RTE}.env
19 volumes:
20 - .:/app/
21 - static:/static/
22 - media:/media/
23 depends_on:
24 - db
25
26 nginx:
27 build: nginx/
28 ports:
29 - 443:443
30 - 80:80
31 volumes:
32 - ./nginx/${RTE}/conf.d/:/etc/nginx/conf.d/
34 - static:/static/
35 - media:/media/
36 depends_on:
37 - app
38
39 volumes:
40 static:
...
Сообщение об ошибке при использовании docker-compose:
nginx_1 | 2022/01/10 16:26:17 [error] 10#10: *8 open() "/static/custom.css" failed (2: No such--More
--More--
Имея аналогичную проблему (но НЕ используя Docker), возможно, это может помочь.
Если у вас есть папка static в корневом проекте для статических файлов уровня проекта, и если у вас также есть команда для запуска python manage.py collectstatic --noinput
в вашем docker-compose или Dockerfile, которая, не понимая Docker слишком хорошо, я думаю, вам все равно понадобится в production, то, возможно, переименование STATIC_URL и STATIC_ROOT в settings.py может помочь, поскольку эта команда будет пытаться собрать все статические файлы из всех ваших приложений в одну папку. Попробуйте сделать что-то вроде этого:
STATIC_URL = '/staticfiles/'
STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))
STATICFILES_DIRS = [str(BASE_DIR.joinpath('static'))]
Обратите внимание, что вам также придется обновить файл Nginx, т.е.
server {
...
location /staticfiles/ {
...
}