docker-compose.yml•2.04 kB
version: '3.8'
services:
mcp-server:
build:
context: .
dockerfile: Dockerfile
container_name: yt-postgres-mcp
ports:
- "${MCP_SSE_PORT:-3000}:3000"
- "6432:6432" # PgBouncer port (embedded)
environment:
# MCP Transport Configuration
- MCP_TRANSPORT=sse
- MCP_SSE_HOST=0.0.0.0
- MCP_SSE_PORT=3000
# PgBouncer Integration (embedded)
- PGBOUNCER_ENABLED=true
# PostgreSQL Connection (via embedded PgBouncer)
- POSTGRES_HOST=localhost
- POSTGRES_PORT=6432
- POSTGRES_DATABASE=${POSTGRES_DATABASE:-postgres}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
# Real PostgreSQL Connection (for PgBouncer to connect to)
- POSTGRES_REAL_HOST=${POSTGRES_REAL_HOST:-localhost}
- POSTGRES_REAL_PORT=${POSTGRES_REAL_PORT:-5432}
# AWS Configuration (for Secrets Manager)
- AWS_REGION=${AWS_REGION:-us-west-2}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_SECRET_NAME=${AWS_SECRET_NAME}
# Connection Pool Configuration
- POSTGRES_MAX_CONNECTIONS=${POSTGRES_MAX_CONNECTIONS:-15}
- POSTGRES_MIN_CONNECTIONS=${POSTGRES_MIN_CONNECTIONS:-2}
- POSTGRES_POOL_TIMEOUT=${POSTGRES_POOL_TIMEOUT:-30}
- POSTGRES_IDLE_TIMEOUT=${POSTGRES_IDLE_TIMEOUT:-300}
- POSTGRES_TIMEOUT=${POSTGRES_TIMEOUT:-900}
# Session Configuration
- SESSION_TIMEOUT_MINUTES=${SESSION_TIMEOUT_MINUTES:-10}
# Logging
- LOG_LEVEL=${LOG_LEVEL:-INFO}
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3000/health').read()"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- mcp-network
networks:
mcp-network:
driver: bridge