Skip to main content
Condo can be deployed using Docker Compose (the recommended method) or via Dokku on a PaaS-style server. Both approaches rely on the same container image built from the project’s Dockerfile.

Requirements

Before deploying, make sure the following services are available:
ServiceVersionNotes
PostgreSQL16.xPrimary data store
Redis6.2Session storage, async tasks, caching
Node.js24.x (LTS)Bundled in the Docker image
S3-compatible storageanyOptional; required for file uploads
Valkey (a Redis-compatible alternative) is also supported for caching and key-value workloads. The Valkey cluster runs on ports 7001, 7002, and 7003.

Deployment options

Docker Compose

Build and run the full application stack with a single docker-compose build command. The recommended method for self-hosted production deployments.

Dokku

Deploy to a Dokku PaaS server. Supports Let’s Encrypt TLS, managed Postgres and Redis plugins, and tag-based deploys.

Production vs development mode

ModeCommandUse case
Developmentyarn workspace @app/condo devLocal iteration with hot reload
Production (build)yarn workspace @app/condo buildCompile assets and prepare static files
Production (start)yarn workspace @app/condo startServe the compiled application
In production, the application is built once during the Docker image build stage. The runtime container starts the pre-compiled app via the DOCKER_COMPOSE_START_APP_COMMAND environment variable.

Worker process

The worker is a separate process that must run alongside the web server. It handles asynchronous tasks including:
  • Sending notifications
  • Importing and exporting data
  • Background jobs powered by Bull (Redis-backed)
Without the worker running, async operations will queue but never execute.
yarn workspace @app/condo worker
In a Docker Compose setup, run the worker as a separate container or service using its own START_WORKER_COMMAND.

Default port assignments

Ports are assigned automatically when running bin/prepare.js during local development. In production, configure ports explicitly via environment variables.
ServiceDefault port
Condo web app (Keystone)4006
Next.js frontend3000
PostgreSQL master5432
PostgreSQL replica5433
Redis6379
Valkey nodes7001, 7002, 7003
The PORT and SERVER_URL environment variables control which port the app listens on and what URL it uses for internal API calls from the frontend.

Next steps

Docker deployment

Step-by-step guide to building and running Condo with Docker Compose or Dokku.

Environment variables

Complete reference for all environment variables required and supported by Condo.

Build docs developers (and LLMs) love