Epic: Tenant Provisioning & Lifecycle #3

Open
opened 2026-03-29 23:16:46 +02:00 by claude · 1 comment
Owner

Overview

Automated tenant provisioning pipeline. Docker deployments have 1 pre-configured tenant. K8s deployments get full automated provisioning.

Architecture decision (2026-04-04): Docker-first. Application is always multi-tenant (Docker = 1 tenant). K8s provisioning (Flux HelmRelease, namespaces, NetworkPolicies) deferred to Phase 5. Docker provisioning is simple: create tenant record + Logto org. See docs/superpowers/specs/2026-04-04-dual-deployment-architecture.md.

Provisioning by Deployment Mode

Docker Compose (Phase 2)

  1. Create tenant record in platform DB
  2. Create Logto organization via Management API
  3. Generate Ed25519-signed license token
  4. Tenant status → ACTIVE
  5. (Single cameleer3-server instance, shared)

Kubernetes (Phase 5)

  1. All Docker steps, plus:
  2. Generate Flux HelmRelease CR
  3. Flux reconciles: namespace, ResourceQuota, NetworkPolicies, cameleer3-server
  4. Provision per-tenant ClickHouse partitioning
  5. Health check: server up, data flowing
  6. Generate bootstrap tokens, present onboarding

Tenant Lifecycle

  • PROVISIONINGACTIVESUSPENDEDDELETED
  • Suspend: stop customer app containers, retain data
  • Delete: remove containers, archive data per retention policy

Implemented In

  • Phase 2 (#24 — Tenant CRUD + Logto org, Docker provisioning)
  • Phase 5 (#25 — K8s namespace provisioning, Flux, NetworkPolicies)
## Overview Automated tenant provisioning pipeline. Docker deployments have 1 pre-configured tenant. K8s deployments get full automated provisioning. > **Architecture decision (2026-04-04):** Docker-first. Application is always multi-tenant (Docker = 1 tenant). K8s provisioning (Flux HelmRelease, namespaces, NetworkPolicies) deferred to Phase 5. Docker provisioning is simple: create tenant record + Logto org. See `docs/superpowers/specs/2026-04-04-dual-deployment-architecture.md`. ## Provisioning by Deployment Mode ### Docker Compose (Phase 2) 1. Create tenant record in platform DB 2. Create Logto organization via Management API 3. Generate Ed25519-signed license token 4. Tenant status → ACTIVE 5. (Single cameleer3-server instance, shared) ### Kubernetes (Phase 5) 1. All Docker steps, plus: 2. Generate Flux HelmRelease CR 3. Flux reconciles: namespace, ResourceQuota, NetworkPolicies, cameleer3-server 4. Provision per-tenant ClickHouse partitioning 5. Health check: server up, data flowing 6. Generate bootstrap tokens, present onboarding ## Tenant Lifecycle - **PROVISIONING** → **ACTIVE** → **SUSPENDED** → **DELETED** - Suspend: stop customer app containers, retain data - Delete: remove containers, archive data per retention policy ## Implemented In - Phase 2 (#24 — Tenant CRUD + Logto org, Docker provisioning) - Phase 5 (#25 — K8s namespace provisioning, Flux, NetworkPolicies)
claude added the epicinfra labels 2026-03-29 23:17:58 +02:00
Author
Owner

Status Update (2026-04-07)

Bootstrap tenant provisioning works:

  • logto-bootstrap.sh creates Logto organization + assigns users with org roles
  • BootstrapDataSeeder.java creates DB tenant, default environment, license
  • TenantService.create() calls LogtoManagementClient.createOrganization()
  • POST /api/tenants endpoint exists with @PreAuthorize("SCOPE_platform:admin")

Remaining:

  • Self-service tenant creation UI (admin page is read-only)
  • Tenant suspension/deletion UI
  • Tenant settings (custom domains, branding)
  • Multi-tenant org switcher in frontend
## Status Update (2026-04-07) ### Bootstrap tenant provisioning works: - `logto-bootstrap.sh` creates Logto organization + assigns users with org roles - `BootstrapDataSeeder.java` creates DB tenant, default environment, license - `TenantService.create()` calls `LogtoManagementClient.createOrganization()` - `POST /api/tenants` endpoint exists with `@PreAuthorize("SCOPE_platform:admin")` ### Remaining: - Self-service tenant creation UI (admin page is read-only) - Tenant suspension/deletion UI - Tenant settings (custom domains, branding) - Multi-tenant org switcher in frontend
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cameleer/cameleer-saas#3