Deployment
Roster ships as a single Docker image for the platform app. The image starts
the server, runs SQLite migrations before startup, and stores runtime state
under /data.
Docker
Section titled “Docker”Run with a persistent data volume:
docker run --rm \ -p 3000:3000 \ -e ROSTER_AUTH_URL=https://roster.example.com \ -e ROSTER_AUTH_SECRET=<generated-secret> \ -e ROSTER_MCP_AUTH_MODE=oauth \ -e ROSTER_MCP_RESOURCE_URI=https://roster.example.com/mcp \ -v roster_data:/data \ advantys/rosterThe image defaults to:
NODE_ENV=productionHOST=0.0.0.0PORT=3000ROSTER_DATA_DIR=/dataWith ROSTER_DATA_DIR=/data and no ROSTER_DATABASE_URL, the runtime uses
/data/roster.db for startup migrations and the platform database. Set
ROSTER_DATABASE_URL only when you need a custom SQLite path.
Production Minimums
Section titled “Production Minimums”Set at least:
NODE_ENV=productionROSTER_AUTH_URL=https://your-roster-host.exampleROSTER_AUTH_SECRET=<long-random-secret>ROSTER_MCP_AUTH_MODE=oauthROSTER_MCP_RESOURCE_URI=https://your-roster-host.example/mcpSet ROSTER_PROVIDER_SECRET_ENCRYPTION_KEY when provider secrets use encrypted
storage.
Fly.io
Section titled “Fly.io”The root fly.toml deploys the platform app, serves HTTP internally on port
3000, mounts /data, and uses docker/Dockerfile.
flyctl volumes create roster_data -a roster-alpha -r cdg -s 1flyctl secrets set ROSTER_AUTH_SECRET=...flyctl deploy -c fly.tomlKeep production data initialization under an approved operational runbook.