Отсутствие статических файлов после развертывания приложения Django

Я развернул многоконтейнерное Django-приложение на AWS EB с платформой ECS running on 64bit Amazon Linux 2/3.2.3. Вот Dockerrun.aws.json файл.

{
    "AWSEBDockerrunVersion": "2",
    "containerDefinitions": [
      {
        "essential": true,
        "image": "${AWS_ACOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_NAME}:${IMAGE_TAG}",
        "mountPoints": [
          {
            "containerPath": "/code/static",
            "sourceVolume": "web"
          }
        ],
        "name": "web",
        "hostname": "web",
        "memoryReservation": 1200,
        "portMappings": [
          {
            "containerPort": 8000,
            "hostPort": 8000
          }
        ]
      },
      {
        "name": "nginx-proxy",
        "image": "nginx",
        "essential": true,
        "memoryReservation": 128,
        "portMappings": [
          {
            "containerPort": 80,
            "hostPort": 80
          }
        ],
        "mountPoints": [
          {
            "sourceVolume": "nginx-proxy-conf",
            "containerPath": "/etc/nginx/nginx.conf"
          }
        ],
        "links": ["web"]
      }

    ],
    "volumes": [
      {
        "name": "web"
      },
      {
        "name": "nginx-proxy-conf",
        "host": {
          "sourcePath": "/var/app/current/nginx.conf"
      }
    }
    ]
}

Вот nginx.conf

user                    nginx;
events {
    worker_connections        1024;
}
http {
    server {
        listen 80;
        location /static/ {
            alias /static/;
        }

        location / {
            proxy_pass http://web:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Это Dockerfile.

FROM python:3.10

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update
RUN apt-get upgrade -y

COPY ./requirements.txt requirements.txt
RUN apt-get install -y realmd
RUN pip install -r requirements.txt

WORKDIR /code

EXPOSE 8000

COPY . .

RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

и entrypoint.sh

#!/bin/bash
python manage.py migrate --noinput >/tmp/migrate 2> /tmp/migrate_err

python manage.py collectstatic --no-input

yum install realmd

gunicorn \
    --bind 0.0.0.0:8000 \
    pos.wsgi:application

Итак, CodePipieline создает образ и развертывает на EB (с t3.small EC2). После развертывания статус "OK", когда я ввожу ссылку, сгенерированную EB и добавляю /admin в конце, я вижу панель администратора, но без стилей.[![введите описание изображения здесь][1]][1]][1]. Теперь приложение django подключено к базе данных RDS, и когда я пытаюсь войти в админ панель, я получаю 504 Gateway Time-out или 502 Bad Gateway. Я пытался добавить или удалить некоторые настройки из nginx.conf, но все равно не могу увидеть статические файлы. Когда я подключаюсь к контейнеру Docker после ssh ing к экземпляру EC2, я вижу каталог /static/.
. У меня есть эти строки в моем settings.py

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

Дайте мне знать, если есть чем поделиться. [1]: https://i.stack.imgur.com/cyA3z.png

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

Есть два варианта, как это исправить.

  • отображение static папки между контейнерами (аналогично nginx.conf)
  • .
  • Удалите расположение /static/ из nginx.conf, передайте запросы статических файлов проксированному восходящему потоку (django контейнеру).

Мне кажется, что вы не собрали файл статистики Django defaults

Setps:

 - run command python manage.py collectstatic

 - urlpatterns = [
    path("", include("myapp.urls")),
    path('admin/', admin.site.urls),

]

urlpatterns+=static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns+=static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Вернуться на верх