services: census-mcp-db: image: postgres:16 environment: POSTGRES_DB: mcp_db POSTGRES_USER: mcp_user POSTGRES_PASSWORD: mcp_pass volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U mcp_user -d mcp_db"] interval: 5s timeout: 5s retries: 5 profiles: [prod] census-mcp-db-init: build: context: ./mcp-db dockerfile: Dockerfile target: prod environment: DATABASE_URL: postgresql://mcp_user:mcp_pass@census-mcp-db:5432/mcp_db NODE_ENV: production SEED_MODE: ${SEED_MODE} depends_on: census-mcp-db: condition: service_healthy restart: "no" profiles: [prod] mcp-server: build: context: ./mcp-server dockerfile: Dockerfile container_name: mcp-server environment: POSTGRES_HOST: census-mcp-db POSTGRES_PORT: 5432 POSTGRES_DB: mcp_db POSTGRES_USER: mcp_user POSTGRES_PASSWORD: mcp_pass NODE_ENV: production DATABASE_URL: postgresql://mcp_user:mcp_pass@census-mcp-db:5432/mcp_db depends_on: census-mcp-db: condition: service_healthy census-mcp-db-init: condition: service_completed_successfully volumes: - ./shared:/app/shared:ro stdin_open: true tty: true restart: unless-stopped profiles: [prod] # Development services census-mcp-db-dev: image: postgres:16 environment: POSTGRES_DB: mcp_db_dev POSTGRES_USER: mcp_user_dev POSTGRES_PASSWORD: mcp_pass_dev ports: - "5433:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U mcp_user_dev -d mcp_db_dev"] interval: 5s timeout: 5s retries: 5 profiles: [dev] census-mcp-db-dev-init: build: context: ./mcp-db dockerfile: Dockerfile target: dev # Dev stage - includes vitest/eslint environment: DATABASE_URL: postgresql://mcp_user_dev:mcp_pass_dev@census-mcp-db-dev:5432/mcp_db_dev command: sh -c " echo 'Running migrations...' && npm run migrate:up && echo 'Development environment ready. You can run:' && echo ' docker compose --profile dev exec census-mcp-db-dev-init npm run lint' && echo ' docker compose --profile dev exec census-mcp-db-dev-init npm run test' && tail -f /dev/null" depends_on: census-mcp-db-dev: condition: service_healthy stdin_open: true tty: true profiles: [dev] # Test services census-mcp-db-test: image: postgres:16 environment: POSTGRES_DB: mcp_db_test POSTGRES_USER: mcp_user_test POSTGRES_PASSWORD: mcp_pass_test ports: - "5434:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U mcp_user_test -d mcp_db_test"] interval: 5s timeout: 5s retries: 5 profiles: [test] census-mcp-db-test-init: build: context: ./mcp-db dockerfile: Dockerfile target: dev # Dev stage - includes vitest/eslint for testing environment: DATABASE_URL: postgresql://mcp_user_test:mcp_pass_test@census-mcp-db-test:5432/mcp_db_test depends_on: census-mcp-db-test: condition: service_healthy profiles: [test] restart: "no" volumes: postgres_data: networks: default: name: census-mcp-network