docker compose up -d command brings up the complete production stack: the Volta application (backend API and frontend dashboard bundled together), PostgreSQL 17 for persistent data, Redis 7 for caching and rate limiting, Temporal for durable workflow scheduling, and the Temporal UI for workflow monitoring. No managed cloud services are required.
Prerequisites
Before you begin, make sure the following are available on your server:The Docker Compose path handles PostgreSQL, Redis, and Temporal for you — you only need Docker itself installed on the host. The Node.js and pnpm requirements apply only if you are running a local development setup outside of Docker.
| Requirement | Minimum version |
|---|---|
| Docker (with Compose v2) | Latest stable |
| Node.js (local dev only) | >= 20.17 |
| pnpm (local dev only) | >= 10.6 |
| PostgreSQL (local dev only) | >= 15 |
| Redis (local dev only) | >= 7 |
Deploy with Docker Compose
Clone the repository and start the stack
Clone the Volta repository, then bring up all services in detached mode:Docker will pull all required images — Volta, PostgreSQL 17, Redis 7, Temporal, and the Temporal UI — and start them in the correct dependency order. The first pull may take a couple of minutes depending on your connection.To follow the startup logs and confirm everything is healthy:
Open the dashboard and complete bootstrap
Once the On first launch, Volta detects that no admin account exists and runs the bootstrap flow automatically. This creates a placeholder admin account and prints a one-time password to the container logs. You’ll use that password to complete your initial sign-in in the next step.
postsider container is healthy, open your browser and navigate to:First login — set your real credentials
Sign in with the bootstrap credentials:After signing in, Volta immediately redirects you to the /setup screen. Enter your real name, email address, and a strong password. Once saved, you’re logged in as the permanent administrator — the
- Email:
admin@setup.local - Password: the one-time password printed in the terminal during bootstrap
admin@setup.local placeholder is replaced and can no longer be used.Public registration is disabled by default (
DISABLE_REGISTRATION=true in the Docker Compose environment). Additional users join via Settings → Users → Invite from inside the dashboard.Environment variables
Thedocker-compose.yaml ships with sensible defaults for a local setup. For any internet-facing deployment you must update the variables below. Edit them directly in the environment: block of the postsider service in docker-compose.yaml.
| Variable | Description | Example |
|---|---|---|
JWT_SECRET | Random string used to sign session tokens. Generate with openssl rand -base64 32. | s3cr3t... |
DATABASE_URL | PostgreSQL connection string. | postgresql://postsider-user:password@postsider-postgres:5432/postsider-db-local |
REDIS_URL | Redis connection string. | redis://postsider-redis:6379 |
FRONTEND_URL | The public URL where the dashboard is accessible. Must match exactly what users type in the browser. | https://volta.yourcompany.com |
NEXT_PUBLIC_BACKEND_URL | The public URL of the backend API, reachable from users’ browsers. In the default single-container setup this is FRONTEND_URL + /api. | https://volta.yourcompany.com/api |
.env.example in the repository for a full annotated reference.
Updating Volta
Pull the latest images and restart the stack. Volta applies any pending database migrations automatically on startup.Backups
All persistent state lives in thepostsider-postgres volume. Back up the database regularly using pg_dump:
backup.sql in a safe off-host location. To restore, pipe the dump back through psql:
postsider-uploads volume holds user-uploaded media files when STORAGE_PROVIDER=local. Back up this volume separately, or switch to Cloudflare R2 (STORAGE_PROVIDER=cloudflare) to store uploads in object storage instead.