services: seen-frontend: build: context: ./frontend args: VITE_ENABLE_MOCK_API: "false" VITE_API_BASE_URL: "" container_name: seen-frontend ports: - '8080:80' depends_on: seen-backend: condition: service_healthy deploy: resources: limits: cpus: '1.0' memory: 512M reservations: cpus: '0.25' memory: 128M restart: unless-stopped healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:80/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s seen-backend: build: context: ./backend container_name: seen-backend env_file: - ./backend/.env.example environment: - SEEN_ENV=production ports: - '8081:8081' depends_on: postgres: condition: service_healthy dragonfly: condition: service_healthy deploy: resources: limits: cpus: '2.0' memory: 1G reservations: cpus: '0.5' memory: 256M restart: unless-stopped healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8081/api/v1/health/live"] interval: 10s timeout: 5s retries: 5 start_period: 10s postgres: image: postgres:16-alpine container_name: seen-postgres environment: POSTGRES_DB: seen POSTGRES_USER: seen POSTGRES_PASSWORD: seen volumes: - seen_postgres_data:/var/lib/postgresql/data - ./backend/migrations/000001_init_auth.up.sql:/docker-entrypoint-initdb.d/000001_init_auth.sql:ro - ./backend/migrations/000002_init_catalog.up.sql:/docker-entrypoint-initdb.d/000002_init_catalog.sql:ro - ./backend/migrations/000003_init_user_watch_later.up.sql:/docker-entrypoint-initdb.d/000003_init_user_watch_later.sql:ro - ./backend/migrations/000004_init_user_progress.up.sql:/docker-entrypoint-initdb.d/000004_init_user_progress.sql:ro - ./backend/migrations/000005_init_downloads.up.sql:/docker-entrypoint-initdb.d/000005_init_downloads.sql:ro deploy: resources: limits: cpus: '2.0' memory: 2G reservations: cpus: '0.5' memory: 512M restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U seen -d seen"] interval: 5s timeout: 5s retries: 10 command: - "postgres" - "-c" - "max_connections=100" - "-c" - "shared_buffers=256MB" - "-c" - "effective_cache_size=1GB" - "-c" - "maintenance_work_mem=64MB" - "-c" - "checkpoint_completion_target=0.9" - "-c" - "wal_buffers=16MB" - "-c" - "default_statistics_target=100" - "-c" - "random_page_cost=1.1" - "-c" - "effective_io_concurrency=200" - "-c" - "work_mem=2621kB" - "-c" - "min_wal_size=1GB" - "-c" - "max_wal_size=4GB" dragonfly: image: docker.dragonflydb.io/dragonflydb/dragonfly:latest container_name: seen-dragonfly command: - "--logtostderr" - "--proactor_threads=2" - "--maxmemory=512mb" deploy: resources: limits: cpus: '1.0' memory: 768M reservations: cpus: '0.25' memory: 256M restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 10 volumes: seen_postgres_data: driver: local