Skip to main content
Shared foundation for every executor. Backend-specific knobs live on each backend page.

Starting the Console

All configuration goes through environment variables (prefixed TUNEPLANE_) or a .env at the repo root (the root .env.example is the fully annotated template).

Core configuration

Object storage (MinIO / S3)

Datasets, job package distribution (required for kuberay), and artifact archiving share one setup:
The job side only ever receives presigned URLs and never holds storage credentials. The console uploads datasets and volume files the same way — the browser PUTs straight to the endpoint above — so the bucket needs CORS allowing PUT and GET from the console’s origin, with ETag exposed. Without it those uploads fail in the browser while tp dataset push, which does not run in one, keeps working:

Reverse proxy (nginx)

deploy/nginx.conf.example provides a template. Key points:
  • Disable proxy buffering for /api (SSE log streaming);
  • Reverse-proxy /docs to the Mintlify-hosted site (see mintlify/README.md);
  • Relax WebSocket / long-connection timeouts.

Database migrations

Alembic migrations run automatically at service startup; to run them manually:

First administrator

On a fresh deployment, the first user is created via /api/auth/setup (the console’s first-visit onboarding), or added by the CLI tp admin user-add under the local account system. For OIDC integration, see Authentication and Accounts.
Before going live, run the E2E closed loop once: a single command verifies the full “submit → schedule → container → ingest” chain is configured correctly.