Не удается обслуживать статические файлы с помощью nginx на ec2 с django и gunicorn, запущенными внутри контейнера docker

Я использую нижеприведенный docker compose 'local.yml' для запуска django на сервере ec2

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: name_docker
    container_name: django
    depends_on:
      - mariadb
      - mailhog
    volumes:
      - .:/app:z
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.mariadb
    oom_kill_disable: True
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: '3G'
    ports:
      - "8000:8000"
    command: /start

начинается со сценария start.sh, который записывается как

#!/bin/bash

set -o errexit
set -o pipefail
set -o nounset


# python /app/manage.py collectstatic --noinput


/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:8000 --timeout 10000 --workers 5 --threads 5 --chdir=/app

На ec2 после развертывания сервер работает нормально с gunicorn.

Теперь я добавил конфигурацию nginx как

server {
    listen 3000;
    server_name domain_name.in;
    access_log /var/log/nginx/django_project-access.log;
    error_log /var/log/nginx/django_project-error.log info;
    add_header 'Access-Control-Allow-Origin' '*';

    keepalive_timeout 5;

    # path for staticfiles
    location /static {
            autoindex on;
            alias /static;
    }

    location / {
        proxy_set_header Host $http_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;
        proxy_pass http://0.0.0.0:8000;
    }


}

Эта конфигурация также работает нормально, и я могу получить к ней доступ локально на example.in:3000.

Но когда я пытаюсь открыть страницу администратора, я не могу увидеть там статические файлы.

Также я попытался собрать статику с помощью следующей команды

docker-compose -f local.yml run --rm django python manange.py collectstatic --no-input

Файлы собраны успешно.

Что я должен сделать для обслуживания статических файлов?

Переместите папку /app/static/ из контейнера в папку на хосте, допустим: /home/ec2/static/ и убедитесь, что ваш nginx имеет к ней доступ.

volumes:
  - /home/ec2/static/:/app/static

nginx.conf

...
location /home/ec2/static/ {
        autoindex on;
        alias /static/;
    }
...
Вернуться на верх