--- title: "Deployment" slug: "deployment" description: "Deploy OpenSRE as a standard Python/FastAPI runtime" --- OpenSRE deploys as a standard Python/FastAPI runtime. Use the repo `Dockerfile`, Railway, EC2, ECS, Vercel, or another ASGI-capable host. ## Runtime environment Deploy this repository using your hosting provider's normal app workflow. Add `LLM_PROVIDER` as an environment variable (for example `anthropic`, `openai`, `openrouter`, or `gemini`). Use the API key that matches your provider: - `ANTHROPIC_API_KEY` for `LLM_PROVIDER=anthropic` - `OPENAI_API_KEY` for `LLM_PROVIDER=openai` - `OPENROUTER_API_KEY` for `LLM_PROVIDER=openrouter` - `DEEPSEEK_API_KEY` for `LLM_PROVIDER=deepseek` - `GEMINI_API_KEY` for `LLM_PROVIDER=gemini` Add any storage and integration environment variables required by your runtime, then deploy and verify health. Minimum LLM environment example: ```bash LLM_PROVIDER=anthropic ANTHROPIC_API_KEY=... ``` The complete list of provider keys and optional model overrides is documented in `.env.example`. ## Prebuilt Docker image Public images are published to GitHub Container Registry for every release (`linux/amd64` and `linux/arm64`), so you can skip building from source. | Tag | What it is | | --- | --- | | `ghcr.io/tracer-cloud/opensre:latest` | Most recent release | | `ghcr.io/tracer-cloud/opensre:` | A specific release, e.g. `0.1.2026.7.8` (matches the GitHub release tag without the `v`) | ```bash docker pull ghcr.io/tracer-cloud/opensre:latest # Web mode (FastAPI health app, default) docker run -p 8000:8000 --env-file .env ghcr.io/tracer-cloud/opensre:latest # Gateway mode (Telegram two-way messaging gateway) docker run -e MODE=gateway --env-file .env ghcr.io/tracer-cloud/opensre:latest ``` ## Run local gateway Use the built-in gateway command when you want a local HTTP server for investigations. | Command | What it does | | --- | --- | | `uv run opensre gateway start` | Starts the gateway daemon in the background (web app, Telegram chat, task scheduler). | | `uv run opensre gateway start --foreground` | Runs the gateway attached to this terminal. | | `uv run opensre gateway stop` | Stops the background daemon. | | `uv run opensre gateway status` | Shows daemon and component status. | The web app binds `0.0.0.0` on the port from the `PORT` environment variable (default `8000`). Quick local checks: ```bash curl http://127.0.0.1:8000/ok ``` Example investigation request: ```bash curl -X POST http://127.0.0.1:8000/investigate \ -H "Content-Type: application/json" \ -d '{ "raw_alert": { "alert_name": "etl-daily-orders-failure", "pipeline_name": "etl_daily_orders", "severity": "critical", "message": "Orders pipeline failed with timeout." } }' ``` By default, `/investigate` (like `/alerts`) accepts only loopback callers. Set `OPENSRE_ALERT_LISTENER_TOKEN` to allow remote callers with a bearer token: ```bash curl -X POST http://127.0.0.1:8000/investigate \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENSRE_ALERT_LISTENER_TOKEN" \ -d '{"raw_alert":{"alert_name":"test"}}' ``` ## Railway deployment Railway is still supported as a hosted runtime option. Before deploying on Railway, make sure your service has: - `DATABASE_URI` pointing to your Railway Postgres instance - `REDIS_URI` pointing to your Railway Redis instance Then deploy the service using your Railway project workflow.