Skip to main content
The server ships with a Docker Compose file that bundles Postgres, MinIO (S3-compatible), and the BlindCast server.

Quick start

The stack is healthy when all three services are running:
Open http://localhost:4100/admin to access the admin dashboard.

Environment variables

Required

Database

S3 / Storage

Authentication

Optional

Bring your own Postgres

To use an external Postgres instance, set DATABASE_URL and remove the postgres service from docker-compose.yml:
The server creates tables automatically on startup (CREATE TABLE IF NOT EXISTS).

Bring your own S3

Replace MinIO with any S3-compatible storage (AWS S3, Cloudflare R2, Backblaze B2):

Production considerations

The default docker-compose.yml uses dev-only passwords. For production:
  1. Set strong POSTGRES_PASSWORD and AWS_SECRET_ACCESS_KEY values
  2. Use a managed Postgres instance (RDS, Cloud SQL, etc.)
  3. Set CORS_ORIGINS to your specific domain(s)
  4. Configure viewer auth (AUTH_JWT_SECRET or AUTH_JWKS_URL)
  5. Put a reverse proxy in front of BlindCast for TLS and admin protection. See Reverse Proxy.

Persistent data

The Compose file defines three named volumes:

Health checks

All services include health checks:
  • Postgres: pg_isready
  • MinIO: GET /minio/health/live
  • BlindCast: GET /health

Building from source

The multi-stage Dockerfile builds @blindcast/crypto, @blindcast/keys, @blindcast/storage, and @blindcast/server in sequence, then creates a minimal production image.

Next steps