infra/compose/docker-compose.prod.yml. It adds the infra/compose/docker-compose.prod.docker.yml overlay so bot computers run as Docker containers on the same machine, with no outside computer provider.
Before you start
- A Linux VM with Docker Engine 26 or newer and the Compose plugin.
- A domain name, for example
app.example.com, with anA(orAAAA) record pointing at the VM. - Inbound TCP 80 and 443, and UDP 443, open on the VM.
- At least one model account: an OpenRouter or Anthropic API key, or people can connect their own after sign-in.
1
Clone the repository
The default and supported location is If you clone it somewhere else, set
/srv/cadenceplus.CADENCE_PLUS_DEPLOY_DIR to that path in the next step.2
Create the .env file
Copy The
.env.example to .env and set at least these values. Generate every secret fresh, and use a different value for each..env file is excluded from Git and from the Docker build. Never commit it.3
Pick the browser for bot computers (optional)
Bot computers use Chromium by default. To give them Google Chrome instead, add:Google Chrome is available on amd64 servers.
4
Build and start
Pass both Compose files, in this order, on every command.The API applies database migrations before it starts serving.
5
Check it is up
https://app.example.com and sign up with an address on your allowlist.What the overlay adds
The overlay adds a supervisor that starts and stops bot computers, the computer image build, and a one-time fix for data folder ownership. It points the API and worker at the supervisor and makesdocker the computer provider.
The supervisor controls Docker on the host. It publishes no port and joins only the internal network. Each bot computer runs in its own container on its own network.
Without the overlay, the production file uses a remote computer provider (E2B by default). Set SANDBOX_PROVIDER and that provider’s API key instead.
Add a company
Each company gets its own organization with its own spaces, bots and usage. Create one with its owner:Upgrade
Pull the new code and rebuild:up --wait only reports success once the new API is healthy. When the computer image itself changes, rebuild it too:
Back up
The database, app data and HTTPS certificates live in named Docker volumes. The repository includesinfra/compose/backup-prod.sh, which writes a verified database dump and app data archive. Copy backups off the server, encrypted. docs/self-host.md covers backup, restore and the optional in-app updater in detail.