Deployment overview
This page introduces the supported ways to run and self-host Chorus, lists what each form needs, and helps you pick one. Once you have chosen, the Docker, production, and operations guides take you the rest of the way.
Deployment forms
Section titled “Deployment forms”Chorus runs the same application in two forms, local and production. The difference is where its data lives and how many people use it.
Local single-machine
Section titled “Local single-machine”One process on one machine for a single user. Chorus bundles an embedded PostgreSQL database
(PGlite), so there is nothing external to install: the command creates
its own database, applies migrations, and serves the web app on port 8637. This is the
fastest way to try Chorus and the right choice for individual, local use.
The Get started guide walks through this path end to end: install the global package, set an administrator account, and sign in. This page does not repeat those steps.
You can also run the local form in Docker as a standalone container: the same embedded database, with its data kept in a Docker volume. See Standalone (embedded database).
Production
Section titled “Production”A shared installation for a team, backed by an external PostgreSQL 16 database that you manage and back up, and served by one or more application instances. Redis 7 is optional for a single instance and required when you run more than one, because instances propagate live updates (Server-Sent Events) to each other through Redis. Without Redis, Chorus falls back to in-memory eventing, which only works for a single instance.
You can run the production form as a container (see Deploy with Docker), from the global npm package against your own PostgreSQL and Redis, or on the bundled AWS CDK stack (see Deploy in production).
Prerequisites
Section titled “Prerequisites”- Node.js 22 or later — Chorus targets the Node.js 22 runtime (the Docker image is built on
node:22-alpine). - Port
8637— the application listens here. Publish or proxy this port to reach the UI and the MCP endpoint. - Database — nothing to provision for the local form (embedded PGlite). For production, an external PostgreSQL 16 database reachable over a connection string.
- Cache — none required for a single instance. For multi-instance production, a Redis 7 endpoint for cross-instance event propagation.
How to choose
Section titled “How to choose”| If you want to… | Use | Database | Cache |
|---|---|---|---|
| Try Chorus or work solo on one machine | Local single-machine | Embedded PGlite | None |
| Run a shared instance with the least moving parts | Local form in a standalone container | Embedded PGlite (in a volume) | None |
| Run a shared, resilient, or multi-instance install | Production (Docker, npm, or AWS CDK) | External PostgreSQL 16 | Redis 7 (required for 2+ instances) |
Continue
Section titled “Continue”- Deploy with Docker — the published
chorusaidlc/chorus-appimage: standalone and production Compose files, adocker runexample, the full environment-variable reference, and startup behaviour. - Deploy in production — running against your own PostgreSQL and Redis, multi-instance requirements, and the full AWS CDK walkthrough.
- Operate a self-hosted Chorus — first-login bootstrap, deployment-side authentication, automatic migrations, and backing up before you upgrade.