Skip to main content
OVR runs as two containers, web and worker, plus a migrate container that applies schema migrations and exits. It needs Postgres, Redis, and an S3-compatible bucket, either bundled alongside it or running elsewhere.

Requirements

  • Docker Compose v2.20+. Podman works too: podman compose (Podman 4.7+) or podman-compose 1.3.0+.
  • CPU and memory scale with concurrent captures, not total build volume. Each capture group in flight runs its own browser instance. OVR_CAPTURE_GROUP_CONCURRENCY (default 2) caps how many a worker runs at once, and docker compose up -d --scale worker=3 adds more workers.

Quick start

Runs everything in containers, including Postgres, Valkey, and object storage. No external accounts. Create docker-compose.yml:
Create .env next to it:
Then start it:
Visit BASE_URL (http://localhost:3000 by default). First run creates your organization and admin account.
If docker compose up fails with service_completed_successfully is an invalid type, it should be a service_started, or a service_healthy, your Compose is older than v2.20, see Requirements above.

Environment variables

Required

Database

Redis

Object storage

Any S3-compatible service works: AWS S3, Cloudflare R2, Backblaze B2, RustFS, MinIO, and others.

Optional tuning

Ports

Add any of these to .env if a default collides with something else on your machine.

Using external services

To use a dependency you already run, remove its container from docker-compose.yml and point the matching variable at it: Also drop the removed service from depends_on on migrate, web, and worker, and drop its volume. createbuckets works against any S3-compatible endpoint. Point its --endpoint-url and credentials at your provider to keep it, or remove it and create the bucket yourself. Ready-made Compose files for each combination:

Update

Set IMAGE_TAG in .env to pin a release instead of tracking latest.

Back up your data

State lives in named volumes: pgdata, valkeydata, rustfsdata. Back them up like any container volume.