services: postgres: image: postgres:16-alpine container_name: umni_postgres restart: unless-stopped env_file: - ./env_config/.env environment: TZ: Europe/Moscow POSTGRES_DB: ${DB_NAME:-umni} POSTGRES_USER: ${DB_USER:-postgres} POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres} volumes: - postgres_data:/var/lib/postgresql/data networks: - app-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./umni-ecosystem-backend dockerfile: Dockerfile container_name: umni_backend restart: unless-stopped expose: - "8000" depends_on: postgres: condition: service_healthy env_file: - ./env_config/.env environment: DB_HOST: postgres DB_USER: ${DB_USER:-postgres} DB_PASSWORD: ${DB_PASSWORD:-postgres} DB_NAME: ${DB_NAME:-umni} DB_PORT: ${DB_PORT:-5432} LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_DIR: /app/logs STORAGE_HOST_BASE: ${STORAGE_HOST_BASE:-/host} TZ: Europe/Moscow volumes: - ./logs:/app/logs # .env монтируется на запись: приложение само генерирует и сохраняет # ENCRYPTION_KEY при первом запуске (или он задается в env ПК / .env). - ./env_config:/app/env_config - ./storage:/app/storage - ./plugins/custom:/app/plugins/custom # Доступ к хранилищам хоста (папки носителей). Список у каждого свой — # раскомментируйте/добавьте нужные маунты. # # Путь в storages задаётся ХОСТОВЫЙ (например "D:\CameraData"), # backend сам переведёт его в контейнерный: "/D/CameraData". # # Windows-хост (Docker Desktop): монтируем весь диск в /host/<буква>. # - type: bind # source: 'D:\' # target: /host/D # - type: bind # source: 'C:\' # target: /host/C # # Linux-хост: путь в storages задаётся контейнерный, как в маунте ниже. # - type: bind # source: /mnt/rec # target: /mnt/rec networks: - app-network frontend: build: context: ./umni-ecosystem-frontend dockerfile: Dockerfile container_name: umni_frontend restart: unless-stopped # Порт наружу. По умолчанию 80; чтобы изменить без правки файла: # PowerShell: $env:WEB_PORT=8080; docker compose up -d # ВНИМАНИЕ: WEB_PORT нельзя класть в .env — бэкенд строго парсит .env # (pydantic Settings) и упадёт на неизвестных ключах. ports: - "${WEB_PORT:-80}:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: backend: condition: service_healthy networks: - app-network volumes: postgres_data: networks: app-network: driver: bridge