Spaces:
Running
Running
Deployment Guide
This guide defines a minimal production deployment baseline.
1) Required environment variables
API_KEYSAPI_KEY_TENANT_CONFIGPROMOTION_GATE_POLICYRUNTIME_STATE_BACKEND(fileorpostgres)SESSION_TTL_SECONDS(auth session TTL, minimum300, default86400)SESSION_RENEW_WINDOW_SECONDS(sliding renew window in seconds, minimum60, default1800)SESSION_COOKIE_SECURE(trueto addSecureflag on session cookie; defaults totruein production)CHECKOUT_RATE_LIMIT_WINDOW_SECONDS(window length for checkout creation attempts, default300)CHECKOUT_RATE_LIMIT_MAX_PER_WINDOW(max checkout create attempts per tenant in window, default5)FREE_SIGNUP_RATE_LIMIT_WINDOW_SECONDS(window length for free-signup attempts per source IP, default3600)FREE_SIGNUP_RATE_LIMIT_MAX_PER_WINDOW(max free-signup attempts per source IP in window, default3)DATABASE_URL(required when backend ispostgres)COST_AWARE_DECISION_ENABLED(trueto let/api/v1/optimizeapply decision pre-gate; defaultfalse)BILLING_OVERAGE_CAP_USD(monthly pay-as-you-go cap in USD for over-quota usage; default5, set<=0to disable)BILLING_RECOVERY_MIN_STARTED_SAMPLES(minimum recovery-started sample size before readiness success-rate blockers are enforced; default5)BILLING_RECOVERY_GO_MIN_SUCCESS_RATE_PCT(GO target for recovery success rate; default40)BILLING_RECOVERY_NO_GO_CRITICAL_SUCCESS_RATE_PCT(critical NO-GO threshold when payment-failure risk exists; default25)FREE_PLAN_DAILY_QUOTA_USD(default daily quota for auto-created free tenants, in USD; default1)PRO_PLAN_EARLY_BIRD_PRICE_USD(default9)PRO_PLAN_STANDARD_PRICE_USD(default15)PRO_PLAN_EARLY_BIRD_START_AT(ISO datetime, inclusive)PRO_PLAN_EARLY_BIRD_END_AT(ISO datetime, exclusive)STRIPE_PRICE_PRO_EARLY_BIRD_MONTHLY(Stripe Price ID for early-bird monthly subscription)STRIPE_PRICE_PRO_STANDARD_MONTHLY(Stripe Price ID for standard monthly subscription)STRIPE_SECRET_KEY(required forPOST /api/v1/billing/checkout/sessionin non-test environments)PRO_PLAN_GRANDFATHERING_ENABLED(truefor plan A: existing subscribers keep original price ID)REFERRAL_WEBHOOK_SECRET(HMAC secret for/api/v1/referral/webhooksignature verification)REFERRAL_RISK_ALERT_THRESHOLD(0-100 score threshold for referral risk warning alerts; default60)REFERRAL_RISK_WEIGHT_IGNORED_RATE(default0.4)REFERRAL_RISK_WEIGHT_SELF_REFERRAL(default15)REFERRAL_RISK_WEIGHT_DUPLICATE_REFEREE(default10)REFERRAL_RISK_WEIGHT_REWARD_REVERSED(default8)
Operational note:
- Referral risk APIs now support time range and aggregation controls:
GET /api/v1/referral/risk-trend?days=30&granularity=dayGET /api/v1/referral/risk-trend?from=<iso>&to=<iso>&granularity=weekGET /api/v1/referral/high-risk-summary?...for high-risk bucket summaries.
Optional but recommended:
ALERT_WEBHOOK_URLALERT_WEBHOOK_RETRIESALERT_WEBHOOK_TIMEOUT_MS
2) Build and run
npm install
npm run build
NODE_ENV=production START_SERVER=true npm run start
Service default bind:
- Host:
0.0.0.0 - Port:
3000
3) Reverse proxy expectations
- Forward
x-forwarded-forcorrectly. - Keep health probe on
GET /api/v1/health. - Ensure request body size supports current limit (
5mb).
4) First deployment checks
GET /api/v1/healthreturnsstatus=ok.GET /api/v1/metricsreturns Prometheus text.GET /api/v1/ops/metricsis reachable with admin key.- Trigger one test alert and verify webhook delivery or dead-letter behavior.
5) Runtime state strategy
- For single-node:
filebackend is acceptable for MVP. - For multi-node/high-availability: prefer
postgresbackend. - Backup/restore procedures should include runtime state store.
6) Security baseline
- Never expose API keys in frontend.
- Rotate keys on suspicious traffic.
- Keep admin keys separate from operator keys.
- Restrict
/api/v1/ops/*and dead-letter replay endpoints to admin role. - Browser checkout flow should use session auth endpoints:
POST /api/v1/auth/session(create session via API key; server setsHttpOnlycookie)GET /api/v1/auth/session(check login state)DELETE /api/v1/auth/session(logout)
7) Google Cloud staging
- See
docs/gcp-staging.mdfor Cloud Run staging deployment. - Recommended script:
scripts/deploy-gcp-staging.sh.