Как я могу подать Django stati c файлы через nginx Docker контейнер? - PullRequest
0 голосов
/ 05 марта 2020

Во время разработки мне нравится развертывать файлы Django stati c в максимально приближенной к работе настройке. Для этого я обертываю Django бэкэнд в изображение (Dockerfile), а также JS и бэкэнд Django stati c файлов в другое изображение вместе с nginx, настроенным как веб-сервер (Dockerfile_nginx). Настройка выглядит следующим образом:

Структура файловой системы:

<projekt-repo>
  /frontend
  /backend
    /static (generated with python manage.py collectstatic)
    settings.py
  manage.py
  nginx.conf
  Dockerfile
  Dockerfile_nginx

settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, "backend/static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

nginx.conf:

server {
  listen 0.0.0.0:8080;
  root /var/www;
  location / {
    try_files $uri $uri/ /index.html;
  }
}

server {
  listen 0.0.0.0:8000;
  root /var/www/django;
  location /static/ {
    autoindex on;
    alias /var/www/django/static/;
  }
}

Dockerfile_nginx:

FROM nginx:1.17.8-alpine
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
COPY edge_frontend/www /var/www
COPY edge_backend/static /var/www/django/static

Если я запускаю приложение и пытаюсь войти через администраторский сайт Django (localhost:8000/admin), сайт не оформлен должным образом, и выходные данные журнала отображаются

backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico
backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico

Очевидно, что есть некоторые несоответствия в настройке, которые я не могу определить прямо сейчас? Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Вы должны установить BASE_DIR, STATIC_URL и STATIC_ROOT в settings.py, как показано ниже ...

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_URL = '/static/'

И запустить python manage.py collectstatic

0 голосов
/ 05 марта 2020

создайте папку в своем проекте с именем "stati c", а затем

добавьте в ваши settings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

или вам нужен другой путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...