services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    # Postgres — внешний (не в compose), см. ConnectionStrings__Default в .env.
    env_file:
      - .env
    environment:
      ASPNETCORE_ENVIRONMENT: Production
      ASPNETCORE_HTTP_PORTS: '8085'
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:8085/health']
      interval: 15s
      timeout: 5s
      start_period: 20s
      retries: 5
    ports:
      - '8085:8085'
    # Медиахранилище: диск sdb смонтирован на хосте в /srv/telewave/media (см.
    # docs/server-storage-setup.md), пробрасывается как /media внутрь контейнера.
    volumes:
      - /srv/telewave/media:/media
    # Явный лимит памяти: RAM в VM динамическая, а .NET настраивает GC по видимой при старте —
    # детерминированный cgroup-лимит + предсказуемый выбор OOM-killer при транскоде.
    mem_limit: 3g
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: '10m'
        max-file: '3'
