Почему /static/ не отображается для /admin в проекте Django?

Итак, я перепробовал кучу вещей. Настройки выглядят хорошо, но, возможно, я что-то упускаю.

Я использую: PostegreySQL, Reddis, Celery beat, nginx, gunicorn.

Я не могу понять, в чем проблема: может быть, дело в правах, может быть, в директориях...

Я просто не могу понять, что не получается.

введите описание изображения здесь

[error] 280897#280897: *40433 open() "/app/crm_market/collected_static/grappelli/js/grappelli.min.js" failed (2: No such file or directory), client: 31.128.32.152, server: my_domen.com, request: "GET /static/grappelli/js/grappelli.min.js HTTP/1.1", host: "my_domen.com", referrer: "https://my_domen.com/admin/login/?next=/admin/"

(venv) root@fuvscqxzga://root/CRM-WB# docker compose exec web ls -l /app/crm_market/collected_static/ total 12 drwxr-xr-x 6 www-data www-data 4096 Jun 25 09:15 admin drwxr-xr-x 4 www-data www-data 4096 Jun 25 09:15 debug_toolbar drwxr-xr-x 9 www-data www-data 4096 Jun 25 09:15 grappelli

структура проекта:

введите описание изображения здесь

settings.py:

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

/etc/nginx/sites-enabled/default

server {
    server_name my_domen.com;

    location /static/ {
        alias /app/crm_market/collected_static/;
    }
    location /admin/ {
        proxy_pass http://127.0.0.1:8000;
    }

    location / {
        proxy_pass http://127.0.0.1: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;
    }

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    listen 443 ssl; 

Dockerfile

FROM python:3.9-slim

WORKDIR /app/crm_market

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "CRM-WB.wsgi:application"]

docker-compose.yml

services:
  db:
    image: postgres:latest
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - db_data:/var/lib/postgresql/data

  redis:
    image: redis:latest
    command: redis-server --requirepass $REDIS_PASSWORD
    ports:
      - '6379:6379'
    volumes:
      - redisdata:/data
    env_file:
      - .env

  web:
    build: .
    command: >
      sh -c "python manage.py migrate --noinput &&
             python manage.py collectstatic --noinput &&
             gunicorn crm_market.wsgi:application --bind 0.0.0.0:8000"
    volumes:
      - .:/app
      - static_volume:/app/crm_market/collected_static
    ports:
      - "8000:8000"
    depends_on:
      - db
      - redis
    working_dir: /app/crm_market

  worker:
    build: .
    command: celery -A crm_market worker -l info
    volumes:
      - .:/app
    depends_on:
      - db
      - redis
    environment:
      - DJANGO_SETTINGS_MODULE=crm_market.settings
      - PYTHONPATH=/app/crm_market
    working_dir: /app/crm_market

  beat:
    build: .
    command: celery -A crm_market beat -l info
    volumes:
      - .:/app
    depends_on:
      - db
      - redis
    environment:
      - DJANGO_SETTINGS_MODULE=crm_market.settings
      - PYTHONPATH=/app/crm_market
    working_dir: /app/crm_market

volumes:
  db_data:
  redisdata:
  static_volume:

Я хочу, чтобы admin/ видел collected_static. Я пробовал разные варианты nginx, Dockerfile, docker-compose:

Пытался настроить доступ с помощью этих команд:

docker compose exec web chown -R www-data:www-data /app/crm_market/collected_static
docker compose exec web chmod -R 755 /app/crm_market/collected_static
docker compose exec web ls -ld /app/crm_market/collected_static
docker compose exec web ls -l /app/crm_market/collected_static/admin/css/base.css
docker compose down
docker compose up -d --build
curl -I https://handonpulse.ru/static/admin/css/base.css

результат: введите описание изображения здесь

Я пробовал собирать статику вручную, но она не применяется докером: docker compose exec web python manage.py collectstatic --noinput

Вернуться на верх