services: # Local development database. This is the ONLY database local dev and the # test suite should ever touch — never point DATABASE_URL at the production # Neon instance for local work (see the guard in scripts/guard-dev-db.mjs). postgres: # Pinned to match the production Neon major version (17), so pg_dump/restore # from prod (see `pnpm db:pull`) works without version mismatches. image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_USER: teqo POSTGRES_PASSWORD: teqo POSTGRES_DB: teqo ports: - '5432:5432' # Default max_connections=100 is tight for vitest forks (≈CPUs × pg pool) # plus a leftover `next start` from local repro. Raise the ceiling so the # int gate fails on real assertions, not "too many clients already". command: ['postgres', '-c', 'max_connections=200'] volumes: - pgdata:/var/lib/postgresql/data # Runs only on first initialization of the volume. Creates the dedicated # teqo_test database so automated tests never share state with dev data. - ./docker/postgres/init:/docker-entrypoint-initdb.d:ro healthcheck: test: ['CMD-SHELL', 'pg_isready -U teqo -d teqo'] interval: 5s timeout: 5s retries: 10 volumes: pgdata: