Set FAJITA_DEPLOYMENT_MODE=self_hosted first. All configuration flows through environment variables.
Required variables
| Variable | Purpose |
|---|---|
FAJITA_DEPLOYMENT_MODE | Must be self_hosted |
NEXT_PUBLIC_APP_URL | Public URL for links, heartbeats, status pages |
NEXT_PUBLIC_SUPABASE_URL | PostgREST API base URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Anon JWT for client reads |
SUPABASE_SERVICE_ROLE_KEY | Service role for server mutations |
DATABASE_URL | Postgres connection string |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | Your Clerk application |
CLERK_SECRET_KEY | Your Clerk application |
MONITOR_SECRET_KEYRING | AES-256-GCM keyring for monitor secrets |
CRON_SECRET | Bearer token for cron routes |
Email (optional)
Use Resend (RESEND_API_KEY) or SMTP (SMTP_HOST, SMTP_PORT, SMTP_FROM, and auth variables).
Validate configuration
npm run selfhost:doctor