# 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 ## 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" - No prefix (e.g. `POSTGRES_PASSWORD`, `PUBLIC_HOST`) — shared infrastructure, consumed by multiple components