version: '3.8' services: etpgrf-backend: build: . # Запускаем collectstatic перед стартом сервера, чтобы обновить статику в volume command: sh -c "python etpgrf_site/manage.py collectstatic --noinput && gunicorn --bind 0.0.0.0:8000 --chdir /app/etpgrf_site etpgrf_site.wsgi" volumes: # Монтируем папку с базой данных - ./data:/app/data # Монтируем статику в именованный том, чтобы Nginx мог её читать - static_volume:/app/public/static_collected # Монтируем медиа в /app/media (унификация путей) - ./media:/app/media env_file: - .env # Настройка ротации логов (чтобы не забить диск) logging: driver: "json-file" options: max-size: "10m" max-file: "3" etpgrf-nginx: image: nginx:1.25-alpine volumes: - ./config/nginx/etpgrf--internal-nginx.conf:/etc/nginx/nginx.conf:ro - static_volume:/app/public/static_collected # Nginx тоже должен видеть медиа - ./media:/app/media ports: - "8000:80" # Слушаем 8000 снаружи, проксируем на 80 внутри depends_on: - etpgrf-backend # Настройка ротации логов logging: driver: "json-file" options: max-size: "10m" max-file: "3" volumes: static_volume: