Files
cameleer-saas/installer/CLAUDE.md
hsiegeln e1a9f6d225
All checks were successful
CI / build (push) Successful in 1m21s
CI / docker (push) Successful in 15s
feat(installer): add --registry, --registry-user, --registry-token
Both installers (bash + PS1) now support pulling images from a
custom Docker registry. Writes *_IMAGE env vars to .env so compose
templates use the configured registry. Runs docker login before
pull when credentials are provided. Persisted in cameleer.conf
for upgrades/reconfigure.

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

3.5 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.

Registry configuration

Both installers support pulling images from a custom Docker registry via --registry (bash) / -Registry (PS1). Default: gitea.siegeln.net/cameleer.

When a registry is configured, the installer writes *_IMAGE env vars to .env (e.g. TRAEFIK_IMAGE, POSTGRES_IMAGE, CAMELEER_IMAGE) which override the defaults baked into the compose templates. In SaaS mode, provisioning image refs (CAMELEER_SAAS_PROVISIONING_*IMAGE) are also set from the registry.

For private registries, pass --registry-user / --registry-token (bash) or -RegistryUser / -RegistryToken (PS1). The installer runs docker login before pulling images. Credentials are 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