Skip to main content
For a packaged deployment use Docker Compose, Kubernetes or Helm instead. This page is the source install, and the settings below apply to all four. Configuration is environment variables prefixed TUNEPLANE_, or a .env at the repository root. .env.example there is the annotated template.

The settings every deployment needs

Object storage (MinIO / S3)

Datasets, job package distribution (required for kubernetes), 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

deploy/nginx.conf.example is the template. Three things it has to get right:

Migrations

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

The first administrator

On a fresh deployment the first user is created through the console’s first-visit onboarding at /api/auth/setup, or with tp admin user-add. For single sign-on, see setting up sign-in.

Check it worked

Answers with the console version and the JobSpec dialect it speaks. Then run the smoke test once before going live: one command verifies the whole submit, schedule, container and ingest chain is configured, without needing a GPU.

Next

Choose a backend · Fleets · Configuration reference

Moving an existing SQLite installation

Stop the API and workers and keep a backup of the SQLite database and the original secret keys. Create an empty PostgreSQL database, set TUNEPLANE_DB_URL, then run:
The importer opens the source read-only and refuses a populated destination. Both schemas must match this release’s migration head; an older source must first be upgraded with a SQLite-capable release. The import preserves IDs, resets sequences, checks row counts and verifies existing audit hashes before committing. An invalid row rolls back the entire copy. Keep the source backup until the PostgreSQL console has been checked; do not run both databases as writable instances of one deployment. The scripts above are checkout tools; packaged deployments can use a matching checkout for the one-time import. PostgreSQL backups remain the normal upgrade path afterwards.