Skip to content

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.

Chorus runs the same application in two forms, local and production. The difference is where its data lives and how many people use it.

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).

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).

  • 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.
If you want to…UseDatabaseCache
Try Chorus or work solo on one machineLocal single-machineEmbedded PGliteNone
Run a shared instance with the least moving partsLocal form in a standalone containerEmbedded PGlite (in a volume)None
Run a shared, resilient, or multi-instance installProduction (Docker, npm, or AWS CDK)External PostgreSQL 16Redis 7 (required for 2+ instances)
  • Deploy with Docker — the published chorusaidlc/chorus-app image: standalone and production Compose files, a docker run example, 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.