Django на докере; Статические файлы исчезают - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь развернуть мой django проект, используя docker nginx и gunicorn.
Моя проблема заключается в том, что статические файлы, которые я использую для своего проекта, отсутствуют в контейнере.

, когда в проекте:

ls staticfiles/
css  disconnected.html  images  lib  nothing.css

после входа в контейнер с docker exec -it foo_web_1 /bin/sh

ls staticfiles/
admin

мой docker -компонентный файл:

version: '3.7'

services:
  web:
    build:
      context: ./foo-app
      dockerfile: Dockerfile.prod
    command: gunicorn foo-app.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/home/foo-app/web/staticfiles
      - media_volume:/home/foo-app/web/mediafiles
    expose:
      - 8000
    env_file:
      - ./.env.prod
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/home/foo-app/web/staticfiles
      - media_volume:/home/foo-app/web/mediafiles
    ports:
      - 2375:80
    depends_on:
      - web
volumes:
  postgres_data:
  static_volume:
  media_volume:

the nginx .conf file:

upstream foo-app {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass http://foo-app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /staticfiles/ {
        alias /home/foo-app/web/staticfiles/;
    }

    location /mediafiles/ {
        alias /home/foo-app/web/mediafiles/;
    }

}

часть файла settings.py, которая относится к статическим файлам:

STATIC_URL = "/staticfiles/"
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "staticfiles")
]

Внутри моего dockerfile я определяю следующее:

ENV HOME=/home/foo-app
ENV APP_HOME=/home/foo-app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

и позже я просто копирую весь проект, используя

COPY . $APP_HOME

Все остальные файлы отображаются совершенно нормально, и я попытался удалить и перестроить весь проект, чтобы избежать артефактов безрезультатно.

1 Ответ

0 голосов
/ 24 февраля 2020

Проблема была решена путем отделения STATIC_ROOT от расположения моих статических файлов, а затем добавления python manage.py collectstatic --no-input --clear в мой стартовый скрипт.

...