services:
# Main API: polls oref.org.il, persists to SQLite, serves REST + SSE
alert-poller:
build:
context: ..
dockerfile: docker/Dockerfile
ports:
- "${PORT:-8000}:${PORT:-8000}"
env_file: ../.env
environment:
- PYTHONUNBUFFERED=1
- DATABASE_PATH=/app/data/alerts.db
- PORT=${PORT:-8000}
volumes:
- alert-data:/app/data
container_name: poha-alert-poller
restart: unless-stopped
# MCP server: exposes alert tools for LLMs via streamable-http
mcp-tools:
build:
context: ..
dockerfile: docker/mcp.Dockerfile
ports:
- "${MCP_PORT:-8001}:${MCP_PORT:-8001}"
env_file: ../.env
environment:
- PYTHONUNBUFFERED=1
- PYTHONPATH=/app
- PORT=${MCP_PORT:-8001}
- WEBHOOK_URL=http://alert-poller:${PORT:-8000}/api/webhook/alerts
- DATABASE_PATH=/app/data/alerts.db
volumes:
- alert-data:/app/data
container_name: poha-mcp-tools
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:${MCP_PORT:-8001}/mcp')"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
depends_on:
alert-poller:
condition: service_healthy
# SSE relay: forwards alerts to VS Code extension and other SSE clients
sse-relay:
build:
context: ..
dockerfile: docker/sse.Dockerfile
ports:
- "${SSE_PORT:-8002}:${SSE_PORT:-8002}"
env_file: ../.env
environment:
- PYTHONUNBUFFERED=1
- PYTHONPATH=/app
- PORT=${SSE_PORT:-8002}
- WEBHOOK_URL=http://alert-poller:${PORT:-8000}/api/alerts-stream
container_name: poha-sse-relay
restart: unless-stopped
command: uvicorn src.api.sse_gateway:app --host 0.0.0.0 --port ${SSE_PORT:-8002}
depends_on:
alert-poller:
condition: service_healthy
volumes:
alert-data:
name: poha-alert-data