Skip to main content
Celum ships as two container images — the dashboard (app) and the API (backend) — alongside a PostgreSQL database. This guide deploys all three with Docker Compose and connects your first supervisor.

Prerequisites

Docker + Compose

A host with Docker Engine and the Compose plugin.

Registry access

Credentials for the registry that hosts the Celum images.

OIDC application

A client registration with your identity provider (client ID, secret, issuer).

TLS + DNS

Two hostnames (app + API) terminating TLS at a reverse proxy.
You also need at least one kubeconfig for each Cluster API supervisor you want to manage.
Celum sets the session cookie with the Secure flag, so authentication only works over HTTPS. Run Celum behind a TLS-terminating reverse proxy and use https:// URLs throughout — plain HTTP will fail to log in.
Angle-bracket values below are placeholders — <tenant-id>, <version>, <registry>, and so on. Substitute the values for your deployment; nothing here is a working default.

1. Configure environment

Create a .env file next to your docker-compose.yml. Compose interpolates these values into the stack.
.env
Register OIDC_REDIRECT_URL (https://<your-api-host>/auth/callback) as a redirect URI on your OIDC application.
Every variable the backend reads is listed in Environment variables.

2. Add supervisor kubeconfigs

Place one kubeconfig per supervisor in a kubeconfigs/ directory next to the compose file. The filename becomes the supervisor name shown in the UI.

3. Define the stack

docker-compose.yml
Pin the image tag to the version you were provided. Route your reverse proxy so that FRONTEND_URL reaches the app service on port 3000 and BACKEND_PUBLIC_URL reaches the backend service on port 8080.

4. Start the stack

The backend applies database migrations automatically on startup. Once the reverse proxy is routing both hostnames, open your dashboard URL:

What happens on first load

1

Sign in

Unauthenticated requests are redirected to sign in through your OIDC provider. On return, the backend issues a signed session cookie.
2

Default supervisor

The root route resolves the first supervisor you can access and redirects to /s/{supervisor}/. If you can access none, you land on /no-access.
3

Grant access

With IAM_ENABLED=true, access is governed by IAM. A fresh database ships an Administrators group carrying the K8sGateAdmin policy, mapped to the OIDC claim value krn:vks:admin — assign that claim to yourself, or edit the group to match a claim you already have. See Authentication & IAM.

What commonly goes wrong

Next steps

Authentication & IAM

Configure OIDC mapping and policies in depth.

Supervisors & clusters

How Celum discovers supervisors and what it reads from them.

Create a cluster

Provision a tenant cluster from a template.

Environment variables

Every variable the backend and dashboard read.