Control plane (Vercel)
| Variable | Required | Description |
|---|
DATABASE_URL | Yes | PostgreSQL connection string (via PgBouncer, port 6432) |
CLERK_SECRET_KEY | Yes | Clerk server-side API key |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | Yes | Clerk client-side key |
NEXT_PUBLIC_CLERK_SIGN_IN_URL | Yes | Sign-in page path (/sign-in) |
NEXT_PUBLIC_CLERK_SIGN_UP_URL | Yes | Sign-up page path (/sign-up) |
VPS_AGENT_URL | Yes | Agent base URL (https://agent.dbhost.app) |
VPS_AGENT_API_KEY | Yes | Shared secret for agent authentication |
CLERK_WEBHOOK_SECRET | Yes | Svix webhook secret from Clerk dashboard |
STRIPE_SECRET_KEY | Yes | Stripe API secret key |
STRIPE_WEBHOOK_SECRET | Yes | Stripe webhook signing secret |
Managing Vercel env vars
# Pull env vars to .env.local
vercel env pull
# Add a new variable
vercel env add VARIABLE_NAME
# List all variables
vercel env ls
VPS agent (/opt/dbhost/agent/.env)
The agent only requires three environment variables. Other settings use sensible defaults defined in config.py.
| Variable | Required | Description |
|---|
API_KEY | Yes | Bearer token for API authentication (must match VPS_AGENT_API_KEY on Vercel) |
POSTGRES_SUPERUSER_PASSWORD | Yes | PostgreSQL admin password |
BACKUP_DIR | No | Backup storage directory (default: /var/backups/postgresql) |
The agent’s config.py (Pydantic Settings) also supports these optional overrides, but they rarely need changing:
| Variable | Default | Description |
|---|
POSTGRES_HOST | localhost | PostgreSQL host |
POSTGRES_PORT | 5432 | PostgreSQL port |
POSTGRES_SUPERUSER | postgres | PostgreSQL admin user |
PGBOUNCER_CONFIG_PATH | /etc/pgbouncer/pgbouncer.ini | PgBouncer config file |
PGBOUNCER_USERLIST_PATH | /etc/pgbouncer/userlist.txt | PgBouncer credentials file |
PGBOUNCER_PORT | 6432 | PgBouncer listen port |
CORS_ORIGINS | ["*"] | CORS allowed origins |
After changing agent environment variables, restart the service: sudo systemctl restart db-agent