Core environment variables are centralized in api/constants.py. Variables marked Required in the description must be explicitly set — the application will either fail to boot or behave insecurely without them.

Deployment Modes

Peachdesk supports two deployment modes, set via DEPLOYMENT_MODE:
  • OSS: The default mode. Designed for self-hosted deployments using Docker Compose — the fastest way to get Peachdesk running. Uses local JWT authentication and MinIO for storage.
  • SaaS: Intended for customised deployments outside of Docker. Authentication and API key management are handled through Peachdesk Managed Platform Services (MPS), allowing greater flexibility in how the platform is hosted and integrated.
The relevant required variables for each mode are noted in the descriptions below.

Application


Database


Authentication (OSS)

Never use the placeholder OSS_JWT_SECRET in a production deployment. Generate a strong random secret and store it securely.

URLs


Storage

Peachdesk uses MinIO by default, which is bundled with the self-hosted deployment and requires no external setup. Set ENABLE_AWS_S3=true to switch to AWS S3 — typically used for cloud or managed deployments where S3 is already part of the infrastructure.

MinIO (OSS default)

AWS S3 (alternative)


WebRTC


Tracing (Langfuse)

Tracing activates automatically as soon as credentials are available — either via these environment variables (applied to all organizations) or per-organization in the UI under Platform Settings. If neither is set, spans are dropped silently. See the Tracing guide for setup instructions.

Monitoring


Logging


Campaigns


Billing & Credits (Stripe)

Billing is opt-in and SaaS-only. Leave it off for OSS / on-premises / Enterprise self-host deployments — usage is then unlimited, the billing routes return 404, and no Stripe client is constructed.
To enable billing in a non-saas deployment (for example DEPLOYMENT_MODE=enterprise), set ENABLE_BILLING=true and populate STRIPE_SECRET_KEY (plus the webhook signing secret and at least one Price ID). With ENABLE_BILLING=true but no Stripe key, free-tier credit limiting still applies and exhausted users can add their own provider keys (BYOK), but the purchase and subscribe routes stay disabled until the Stripe secret is configured.
A superadmin (is_superuser) can view every organization’s token usage and balances, and grant credits manually, at /admin/credits (API: GET /api/v1/admin/credits/overview, POST /api/v1/admin/credits/grant).

Further Customisation

The variables documented here cover the standard configuration surface. For advanced customisation — such as integrating additional services or tuning internal behaviour — consult the relevant module alongside api/constants.py to understand how each variable is consumed.