Files
cameleer-saas/installer/CLAUDE.md
hsiegeln 9ed2cedc98
All checks were successful
CI / build (push) Successful in 1m14s
CI / docker (push) Successful in 1m15s
feat: self-service sign-up with email verification and onboarding
Complete sign-up pipeline: email registration via Logto Experience API,
SMTP email verification, and self-service trial tenant creation.

Layer 1 — Logto config:
- Bootstrap Phase 8b: SMTP email connector with branded HTML templates
- Bootstrap Phase 8c: enable SignInAndRegister (email+password sign-up)
- Dockerfile installs official Logto connectors (ensures SMTP available)
- SMTP env vars in docker-compose, installer templates, .env.example

Layer 2 — Experience API (ui/sign-in/experience-api.ts):
- Registration flow: initRegistration → sendVerificationCode → verifyCode
  → addProfile (password) → identifyUser → submit
- Sign-in auto-detects email vs username identifier

Layer 3 — Custom sign-in UI (ui/sign-in/SignInPage.tsx):
- Three-mode state machine: signIn / register / verifyCode
- Reads first_screen=register from URL query params
- Toggle links between sign-in and register views

Layer 4 — Post-registration onboarding:
- OnboardingService: reuses VendorTenantService.createAndProvision(),
  adds calling user to Logto org as owner, enforces one trial per user
- OnboardingController: POST /api/onboarding/tenant (authenticated only)
- OnboardingPage.tsx: org name + auto-slug form
- LandingRedirect: detects zero orgs → redirects to /onboarding
- RegisterPage.tsx: /platform/register initiates OIDC with firstScreen

Installers (install.sh + install.ps1):
- Both prompt for SMTP config in SaaS mode
- CLI args, env var capture, cameleer.conf persistence

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-25 00:21:07 +02:00

2.8 KiB

Installer

Deployment Modes

The installer (installer/install.sh) supports two deployment modes:

Multi-tenant SaaS (DEPLOYMENT_MODE=saas) Standalone (DEPLOYMENT_MODE=standalone)
Containers traefik, postgres, clickhouse, logto, cameleer-saas traefik, postgres, clickhouse, server, server-ui
Auth Logto OIDC (SaaS admin + tenant users) Local auth (built-in admin, no identity provider)
Tenant management SaaS admin creates/manages tenants via UI Single server instance, no fleet management
PostgreSQL cameleer-postgres image (multi-DB init) Stock postgres:16-alpine (server creates schema via Flyway)
Use case Platform vendor managing multiple customers Single customer running the product directly

Standalone mode generates a simpler compose with the server running directly. No Logto, no SaaS management plane, no bootstrap. The admin logs in with local credentials at /.

Compose templates

The installer uses static docker-compose templates in installer/templates/. Templates are copied to the install directory and composed via COMPOSE_FILE in .env:

  • docker-compose.yml — shared infrastructure (traefik, postgres, clickhouse)
  • docker-compose.saas.yml — SaaS mode (logto, cameleer-saas)
  • docker-compose.server.yml — standalone mode (server, server-ui)
  • docker-compose.tls.yml — overlay: custom TLS cert volume
  • docker-compose.monitoring.yml — overlay: external monitoring network

SMTP configuration

Both installers (install.sh and install.ps1) prompt for SMTP settings in SaaS mode when the user opts in ("Configure SMTP for email verification?"). SMTP is required for self-service sign-up — without it, only admin-created users can sign in.

Env vars: SMTP_HOST, SMTP_PORT (default 587), SMTP_USER, SMTP_PASS, SMTP_FROM_EMAIL (default noreply@<PUBLIC_HOST>). Passed to the cameleer-logto container. The bootstrap script (Phase 8b) discovers the SMTP connector factory and creates the connector with Cameleer-branded email templates.

CLI args: --smtp-host, --smtp-port, --smtp-user, --smtp-pass, --smtp-from-email (bash) / -SmtpHost, -SmtpPort, -SmtpUser, -SmtpPass, -SmtpFromEmail (PS1). Persisted in cameleer.conf for upgrades/reconfigure.

Env var naming convention

  • CAMELEER_AGENT_* — agent config (consumed by the Java agent)
  • CAMELEER_SERVER_* — server config (consumed by cameleer-server)
  • CAMELEER_SAAS_* — SaaS management plane config
  • CAMELEER_SAAS_PROVISIONING_* — "SaaS forwards this to provisioned tenant servers"
  • SMTP_* — email delivery config for Logto (consumed by bootstrap, SaaS mode only)
  • No prefix (e.g. POSTGRES_PASSWORD, PUBLIC_HOST) — shared infrastructure, consumed by multiple components