- a small Caddy gateway that owns the public origin and routes paths
- the api, private
- the console, private
- a Postgres with the pgvector extension
deploy/paas, a Caddy
that listens on the injected PORT with auto_https off and proxies /mcp,
/auth, /api, and /.well-known to the api and /dashboard to the
console over the private network.
Whatever the platform, MOB_BASE_URL must be the gateway’s public origin.
It is the OAuth issuer, so attach your final domain before inviting members;
changing it later disconnects every agent.
Render
The repo root contains a Blueprint (render.yaml) that defines the whole stack: the gateway as the public web
service, the api and console as private services, and a managed Postgres.
The api’s first migration runs CREATE EXTENSION IF NOT EXISTS vector,
which Render permits on its managed databases.
1
Create your Discord and Slack apps
Follow Discord setup and Slack setup.
A deployment using one platform leaves the other platform’s credentials
blank.
2
Launch the Blueprint
In the Render dashboard, create a new Blueprint instance from your fork
of this repository, or open
render.com/deploy?repo=https://github.com/promptrotator/mob.so.
Render prompts for the credentials and generates
MOB_SECRET_KEY and
MOB_CREDENTIAL_ENCRYPTION_KEY itself.3
Set the public origin
Attach your domain to the
mob-gateway service (or keep its
onrender.com URL), then set MOB_BASE_URL on mob-api to that origin.Railway
Railway translates a compose file into one service per entry rather than running it directly. Create a project with these services:
Railway’s private network
is IPv6, and services are reachable at
<service>.railway.internal on the
port the process binds. Two variables make the stack listen on IPv6:
MOB_HOST=:: on the api and HOSTNAME=:: on the console.
Variables to set:
gateway:MOB_API_UPSTREAM=api.railway.internal:8000,MOB_CONSOLE_UPSTREAM=console.railway.internal:3000api: everything from.env.exampleexceptCADDY_DOMAIN, plusMOB_HOST=::andMOB_DATABASE_URL=postgresql://<user>:<password>@postgres.railway.internal:5432/<db>console:HOSTNAME=::
Coolify, Dokploy, and other compose-native platforms
These platforms run the repository’sdocker-compose.yml as is: point them
at the repo and supply the .env values. The stack’s Caddy expects to own
ports 80 and 443. When the platform’s own proxy holds those ports, stop
publishing them and route the platform proxy at the caddy service instead,
with CADDY_DOMAIN=localhost so Caddy skips certificate fetching.