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/ {
            ...
           }
Вернуться на верх