Prerequisites
- A Scout repo set up locally (setup)
- A Railway account
- The Railway CLI installed and authenticated (
railway login)
Step 1: Provision the project
Use.env.production to keep production credentials separate from local dev. Copy your local .env as the starting point:
DB_* in .env.production. The deploy script points Scout at the Railway Postgres service automatically. Setting DB_HOST here would break the deploy when env vars sync.
Then run:
- Creates a Railway project called
scout. - Adds a
pgvectorservice with a persistent volume at/var/lib/postgresql. - Creates the
scoutapplication service and forwards a starter set of env vars from your shell or.env.production. - Deploys the app and assigns a public domain.
Step 2: Sync the rest of your env vars
The first deploy only forwards the variables inup.sh. To push everything in .env.production (Slack credentials, MCP secrets, anything you’ve added):
.env.production by default. Pass a path to use a different file:
Step 3: Verify
Once the domain resolves:- Open os.agno.com.
- Click Add OS, choose Live, paste your Railway URL.
- Click Connect.
Update Slack to point at production
If you set up Slack against an ngrok URL, swap it for your Railway domain:- Open your Slack app at api.slack.com/apps.
- Go to Event Subscriptions.
- Update the Request URL to
https://your-scout.up.railway.app/slack/events. - Wait for the green Verified check, then Save Changes.
Redeploys
Code changes:What you get
| Resource | Purpose |
|---|---|
scout service | The Scout app, FastAPI on port 8000 |
pgvector service | Postgres with the pgvector extension, used for the CRM context and learnings |
/var/lib/postgresql volume | Persistent database storage |
| Railway-issued domain | Public HTTPS endpoint |
Operations
| Task | Command |
|---|---|
| Tail logs | railway logs --service scout |
| Open the dashboard | railway open |
| Run a command in the container | railway ssh --service scout |
| Scale CPU, memory, replicas | Edit railway.json |