Self-host
Environment variables
Production .env reference for the control plane.
Copy .env.production.example to .env on your VPS. For the public website on Vercel, use .env.website.example.
Edition
| Variable | Values |
|---|---|
CENTRAL_EDITION | control_plane (VPS default) or website (Vercel marketing site) |
Core
| Variable | Description |
|---|---|
CENTRAL_DATABASE_PROVIDER | postgresql (default) or sqlite (local trial) |
DATABASE_URL | PostgreSQL URL or file:./data/central.db |
NEXT_PUBLIC_APP_URL | Public origin (UI + auth) |
BETTER_AUTH_SECRET | Session signing (32+ chars) |
BETTER_AUTH_URL | Same as public URL in production |
ENCRYPTION_KEY | SSH private keys at rest |
REDIS_URL | BullMQ queue (required in production) |
Deployment mode
| Variable | Values |
|---|---|
DEPLOYMENT_MODE | self_hosted (control plane) or saas (optional hosted) |
ENABLE_CREDENTIAL_AUTH | true / false — email sign-up |
Control plane with GitHub-only login:
DEPLOYMENT_MODE=self_hosted
ENABLE_CREDENTIAL_AUTH=falseGitHub
Set GitHub App and OAuth variables for repo access, webhooks, and optional GitHub login. Webhook URL: POST /api/github/webhook.
Worker
Run deploy jobs in a separate process:
npm run worker:deploy
# or systemd: central-deploy-worker.serviceCLI
central-cli doctor
central-cli status