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>
59 lines
1.5 KiB
Plaintext
59 lines
1.5 KiB
Plaintext
# Cameleer SaaS — Environment Configuration
|
|
# Copy to .env and fill in values for production
|
|
|
|
# Image version
|
|
VERSION=latest
|
|
|
|
# Public access
|
|
PUBLIC_HOST=localhost
|
|
PUBLIC_PROTOCOL=https
|
|
# Auth domain (Logto). Defaults to PUBLIC_HOST for single-domain setups.
|
|
# Set to a separate subdomain (e.g. auth.cameleer.io) to split auth from the app.
|
|
# AUTH_HOST=localhost
|
|
|
|
# Ports
|
|
HTTP_PORT=80
|
|
HTTPS_PORT=443
|
|
LOGTO_CONSOLE_PORT=3002
|
|
|
|
# PostgreSQL
|
|
POSTGRES_USER=cameleer
|
|
POSTGRES_PASSWORD=change_me_in_production
|
|
POSTGRES_DB=cameleer_saas
|
|
|
|
# ClickHouse
|
|
CLICKHOUSE_PASSWORD=change_me_in_production
|
|
|
|
# Admin user (created by bootstrap)
|
|
SAAS_ADMIN_USER=admin
|
|
SAAS_ADMIN_PASS=change_me_in_production
|
|
|
|
# SMTP (for email verification during registration)
|
|
# Required for self-service sign-up. Without SMTP, only admin-created users can sign in.
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASS=
|
|
SMTP_FROM_EMAIL=noreply@cameleer.io
|
|
|
|
# TLS (leave empty for self-signed)
|
|
# NODE_TLS_REJECT=0 # Set to 1 when using real certificates
|
|
# CERT_FILE=
|
|
# KEY_FILE=
|
|
# CA_FILE=
|
|
|
|
# Vendor account (optional)
|
|
VENDOR_SEED_ENABLED=false
|
|
# VENDOR_USER=vendor
|
|
# VENDOR_PASS=change_me
|
|
|
|
# Docker socket GID (run: stat -c '%g' /var/run/docker.sock)
|
|
# DOCKER_GID=0
|
|
|
|
# Docker images (override for custom registries)
|
|
# TRAEFIK_IMAGE=gitea.siegeln.net/cameleer/cameleer-traefik
|
|
# POSTGRES_IMAGE=gitea.siegeln.net/cameleer/cameleer-postgres
|
|
# CLICKHOUSE_IMAGE=gitea.siegeln.net/cameleer/cameleer-clickhouse
|
|
# LOGTO_IMAGE=gitea.siegeln.net/cameleer/cameleer-logto
|
|
# CAMELEER_IMAGE=gitea.siegeln.net/cameleer/cameleer-saas
|