services: postgres: image: pgvector/pgvector:pg16 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: dominode ports: - "${POSTGRES_PORT:-5433}:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d dominode"] interval: 5s timeout: 5s retries: 20 redis: image: redis:7-alpine ports: - "${REDIS_PORT:-6380}:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 20 api: build: context: . dockerfile: apps/api/Dockerfile env_file: - .env environment: API_PORT: 3014 DATABASE_URL: postgres://postgres:postgres@postgres:5432/dominode REDIS_URL: redis://redis:6379 UPLOAD_DIR: /data/uploads CORS_ORIGIN: http://localhost:3000 OPENAI_CHAT_MODEL: ${OPENAI_CHAT_MODEL:-gpt-5.4} OPENAI_EMBEDDING_MODEL: ${OPENAI_EMBEDDING_MODEL:-text-embedding-3-small} EMBEDDING_DIM: ${EMBEDDING_DIM:-1536} ports: - "3014:3014" volumes: - api-uploads:/data/uploads depends_on: postgres: condition: service_healthy redis: condition: service_healthy web: build: context: . dockerfile: apps/web/Dockerfile environment: NEXT_PUBLIC_API_BASE_URL: http://localhost:3014/v1 ports: - "${WEB_PORT:-3000}:3000" depends_on: - api volumes: postgres-data: api-uploads: