chore(installer): remove generated install output, add to gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -28,6 +28,9 @@ Thumbs.db
|
|||||||
.playwright-mcp/
|
.playwright-mcp/
|
||||||
.gitnexus
|
.gitnexus
|
||||||
|
|
||||||
|
# Installer output (generated by install.sh / install.ps1)
|
||||||
|
installer/cameleer/
|
||||||
|
|
||||||
# Generated by postinstall from @cameleer/design-system
|
# Generated by postinstall from @cameleer/design-system
|
||||||
ui/public/favicon.svg
|
ui/public/favicon.svg
|
||||||
docker/runtime-base/agent.jar
|
docker/runtime-base/agent.jar
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
# Cameleer SaaS Configuration
|
|
||||||
# Generated by installer v1.0.0 on 2026-04-15 08:55:30 UTC
|
|
||||||
|
|
||||||
VERSION=latest
|
|
||||||
|
|
||||||
PUBLIC_HOST=desktop-fb5vgj9.siegeln.internal
|
|
||||||
PUBLIC_PROTOCOL=https
|
|
||||||
|
|
||||||
HTTP_PORT=80
|
|
||||||
HTTPS_PORT=443
|
|
||||||
LOGTO_CONSOLE_PORT=3002
|
|
||||||
|
|
||||||
# PostgreSQL
|
|
||||||
POSTGRES_USER=cameleer
|
|
||||||
POSTGRES_PASSWORD=dwnyYXj3bVe6kFcOHERr57SkrkD9476a
|
|
||||||
POSTGRES_DB=cameleer_saas
|
|
||||||
|
|
||||||
# ClickHouse
|
|
||||||
CLICKHOUSE_PASSWORD=SshXE61qZqB1kVoZpQLbr2mDYokw1ZgJ
|
|
||||||
|
|
||||||
# Admin user
|
|
||||||
SAAS_ADMIN_USER=admin
|
|
||||||
SAAS_ADMIN_PASS=1J3TrbgIYZbxjav1K14uy5DX8nil6Bdi
|
|
||||||
|
|
||||||
# TLS
|
|
||||||
NODE_TLS_REJECT=0
|
|
||||||
# Docker
|
|
||||||
DOCKER_SOCKET=/var/run/docker.sock
|
|
||||||
DOCKER_GID=0
|
|
||||||
|
|
||||||
# Provisioning images
|
|
||||||
CAMELEER_SAAS_PROVISIONING_SERVERIMAGE=gitea.siegeln.net/cameleer/cameleer-server:latest
|
|
||||||
CAMELEER_SAAS_PROVISIONING_SERVERUIIMAGE=gitea.siegeln.net/cameleer/cameleer-server-ui:latest
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
# Cameleer SaaS -- Installation Documentation
|
|
||||||
|
|
||||||
## Installation Summary
|
|
||||||
|
|
||||||
| | |
|
|
||||||
|---|---|
|
|
||||||
| **Version** | latest |
|
|
||||||
| **Date** | 2026-04-15 08:55:55 UTC |
|
|
||||||
| **Installer** | v1.0.0 |
|
|
||||||
| **Install Directory** | C:\Users\Hendrik\Documents\projects\cameleer-saas\installer\cameleer |
|
|
||||||
| **Hostname** | desktop-fb5vgj9.siegeln.internal |
|
|
||||||
| **TLS** | Self-signed (auto-generated) |
|
|
||||||
|
|
||||||
## Service URLs
|
|
||||||
|
|
||||||
- **Platform UI:** https://desktop-fb5vgj9.siegeln.internal/platform/
|
|
||||||
- **API Endpoint:** https://desktop-fb5vgj9.siegeln.internal/platform/api/
|
|
||||||
- **Logto Admin Console:** https://desktop-fb5vgj9.siegeln.internal:3002
|
|
||||||
|
|
||||||
## First Steps
|
|
||||||
|
|
||||||
1. Open the Platform UI in your browser
|
|
||||||
2. Log in as admin with the credentials from `credentials.txt`
|
|
||||||
3. Create tenants from the admin console
|
|
||||||
4. The platform will provision a dedicated server instance for each tenant
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
| Container | Purpose |
|
|
||||||
|---|---|
|
|
||||||
| `traefik` | Reverse proxy, TLS termination, routing |
|
|
||||||
| `postgres` | PostgreSQL database (SaaS + Logto + tenant schemas) |
|
|
||||||
| `clickhouse` | Time-series storage (traces, metrics, logs) |
|
|
||||||
| `logto` | OIDC identity provider + bootstrap |
|
|
||||||
| `cameleer-saas` | SaaS platform (Spring Boot + React) |
|
|
||||||
|
|
||||||
Per-tenant `cameleer-server` and `cameleer-server-ui` containers are provisioned dynamically.
|
|
||||||
|
|
||||||
## Networking
|
|
||||||
|
|
||||||
| Port | Service |
|
|
||||||
|---|---|
|
|
||||||
| 80 | HTTP (redirects to HTTPS) |
|
|
||||||
| 443 | HTTPS (main entry point) |
|
|
||||||
| 3002 | Logto Admin Console |
|
|
||||||
|
|
||||||
|
|
||||||
## TLS
|
|
||||||
|
|
||||||
**Mode:** Self-signed (auto-generated)
|
|
||||||
|
|
||||||
The platform generated a self-signed certificate on first boot. To replace it:
|
|
||||||
1. Log in as admin and navigate to **Certificates** in the admin console
|
|
||||||
2. Upload your certificate and key via the UI
|
|
||||||
3. Activate the new certificate (zero-downtime swap)
|
|
||||||
|
|
||||||
## Data & Backups
|
|
||||||
|
|
||||||
| Docker Volume | Contains |
|
|
||||||
|---|---|
|
|
||||||
| `cameleer-pgdata` | PostgreSQL data (tenants, licenses, audit) |
|
|
||||||
| `cameleer-chdata` | ClickHouse data (traces, metrics, logs) |
|
|
||||||
| `cameleer-certs` | TLS certificates |
|
|
||||||
| `cameleer-bootstrapdata` | Logto bootstrap results |
|
|
||||||
|
|
||||||
### Backup Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose -p cameleer-saas exec cameleer-postgres pg_dump -U cameleer cameleer_saas > backup.sql
|
|
||||||
docker compose -p cameleer-saas exec cameleer-clickhouse clickhouse-client --query "SELECT * FROM cameleer.traces FORMAT Native" > traces.native
|
|
||||||
```
|
|
||||||
|
|
||||||
## Upgrading
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
.\install.ps1 -InstallDir C:\Users\Hendrik\Documents\projects\cameleer-saas\installer\cameleer -Version NEW_VERSION
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
| Issue | Command |
|
|
||||||
|---|---|
|
|
||||||
| Service not starting | `docker compose -p cameleer-saas logs SERVICE_NAME` |
|
|
||||||
| Bootstrap failed | `docker compose -p cameleer-saas logs cameleer-logto` |
|
|
||||||
| Routing issues | `docker compose -p cameleer-saas logs cameleer-traefik` |
|
|
||||||
| Database issues | `docker compose -p cameleer-saas exec cameleer-postgres psql -U cameleer -d cameleer_saas` |
|
|
||||||
|
|
||||||
## Uninstalling
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
Set-Location C:\Users\Hendrik\Documents\projects\cameleer-saas\installer\cameleer
|
|
||||||
docker compose -p cameleer-saas down
|
|
||||||
docker compose -p cameleer-saas down -v
|
|
||||||
Remove-Item -Recurse -Force C:\Users\Hendrik\Documents\projects\cameleer-saas\installer\cameleer
|
|
||||||
```
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# Cameleer installation config
|
|
||||||
# Generated by installer v1.0.0 on 2026-04-15 08:55:30 UTC
|
|
||||||
|
|
||||||
install_dir=C:\Users\Hendrik\Documents\projects\cameleer-saas\installer\cameleer
|
|
||||||
public_host=desktop-fb5vgj9.siegeln.internal
|
|
||||||
public_protocol=https
|
|
||||||
admin_user=admin
|
|
||||||
tls_mode=self-signed
|
|
||||||
http_port=80
|
|
||||||
https_port=443
|
|
||||||
logto_console_port=3002
|
|
||||||
logto_console_exposed=true
|
|
||||||
monitoring_network=
|
|
||||||
version=latest
|
|
||||||
compose_project=cameleer-saas
|
|
||||||
docker_socket=/var/run/docker.sock
|
|
||||||
node_tls_reject=0
|
|
||||||
deployment_mode=saas
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
===========================================
|
|
||||||
CAMELEER PLATFORM CREDENTIALS
|
|
||||||
Generated: 2026-04-15 08:55:55 UTC
|
|
||||||
|
|
||||||
SECURE THIS FILE AND DELETE AFTER NOTING
|
|
||||||
THESE CREDENTIALS CANNOT BE RECOVERED
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
Admin Console: https://desktop-fb5vgj9.siegeln.internal/platform/
|
|
||||||
Admin User: admin
|
|
||||||
Admin Password: 1J3TrbgIYZbxjav1K14uy5DX8nil6Bdi
|
|
||||||
|
|
||||||
PostgreSQL: cameleer / dwnyYXj3bVe6kFcOHERr57SkrkD9476a
|
|
||||||
ClickHouse: default / SshXE61qZqB1kVoZpQLbr2mDYokw1ZgJ
|
|
||||||
|
|
||||||
Logto Console: https://desktop-fb5vgj9.siegeln.internal:3002
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
# Cameleer SaaS Platform
|
|
||||||
# Generated by Cameleer installer -- do not edit manually
|
|
||||||
|
|
||||||
services:
|
|
||||||
cameleer-traefik:
|
|
||||||
image: ${TRAEFIK_IMAGE:-gitea.siegeln.net/cameleer/cameleer-traefik}:${VERSION:-latest}
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "${HTTP_PORT:-80}:80"
|
|
||||||
- "${HTTPS_PORT:-443}:443"
|
|
||||||
- "${LOGTO_CONSOLE_PORT:-3002}:3002"
|
|
||||||
environment:
|
|
||||||
PUBLIC_HOST: ${PUBLIC_HOST:-localhost}
|
|
||||||
CERT_FILE: ${CERT_FILE:-}
|
|
||||||
KEY_FILE: ${KEY_FILE:-}
|
|
||||||
CA_FILE: ${CA_FILE:-}
|
|
||||||
volumes:
|
|
||||||
- cameleer-certs:/certs
|
|
||||||
- ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro
|
|
||||||
networks:
|
|
||||||
- cameleer
|
|
||||||
- cameleer-traefik
|
|
||||||
|
|
||||||
cameleer-postgres:
|
|
||||||
image: ${POSTGRES_IMAGE:-gitea.siegeln.net/cameleer/cameleer-postgres}:${VERSION:-latest}
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: cameleer_saas
|
|
||||||
POSTGRES_USER: ${POSTGRES_USER:-cameleer}
|
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
||||||
volumes:
|
|
||||||
- cameleer-pgdata:/var/lib/postgresql/data
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-cameleer} -d cameleer_saas"]
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 5
|
|
||||||
networks:
|
|
||||||
- cameleer
|
|
||||||
|
|
||||||
cameleer-clickhouse:
|
|
||||||
image: ${CLICKHOUSE_IMAGE:-gitea.siegeln.net/cameleer/cameleer-clickhouse}:${VERSION:-latest}
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
|
|
||||||
volumes:
|
|
||||||
- cameleer-chdata:/var/lib/clickhouse
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD-SHELL", "clickhouse-client --password $${CLICKHOUSE_PASSWORD} --query 'SELECT 1'"]
|
|
||||||
interval: 10s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 3
|
|
||||||
networks:
|
|
||||||
- cameleer
|
|
||||||
|
|
||||||
cameleer-logto:
|
|
||||||
image: ${LOGTO_IMAGE:-gitea.siegeln.net/cameleer/cameleer-logto}:${VERSION:-latest}
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
cameleer-postgres:
|
|
||||||
condition: service_healthy
|
|
||||||
environment:
|
|
||||||
DB_URL: postgres://${POSTGRES_USER:-cameleer}:${POSTGRES_PASSWORD}@cameleer-postgres:5432/logto
|
|
||||||
ENDPOINT: ${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost}
|
|
||||||
ADMIN_ENDPOINT: ${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost}:${LOGTO_CONSOLE_PORT:-3002}
|
|
||||||
TRUST_PROXY_HEADER: 1
|
|
||||||
NODE_TLS_REJECT_UNAUTHORIZED: "${NODE_TLS_REJECT:-0}"
|
|
||||||
LOGTO_ENDPOINT: http://cameleer-logto:3001
|
|
||||||
LOGTO_ADMIN_ENDPOINT: http://cameleer-logto:3002
|
|
||||||
LOGTO_PUBLIC_ENDPOINT: ${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost}
|
|
||||||
PUBLIC_HOST: ${PUBLIC_HOST:-localhost}
|
|
||||||
PUBLIC_PROTOCOL: ${PUBLIC_PROTOCOL:-https}
|
|
||||||
PG_HOST: cameleer-postgres
|
|
||||||
PG_USER: ${POSTGRES_USER:-cameleer}
|
|
||||||
PG_PASSWORD: ${POSTGRES_PASSWORD}
|
|
||||||
PG_DB_SAAS: cameleer_saas
|
|
||||||
SAAS_ADMIN_USER: ${SAAS_ADMIN_USER:-admin}
|
|
||||||
SAAS_ADMIN_PASS: ${SAAS_ADMIN_PASS:?SAAS_ADMIN_PASS must be set in .env}
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD-SHELL", "node -e \"require('http').get('http://localhost:3001/oidc/.well-known/openid-configuration', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))\" && test -f /data/logto-bootstrap.json"]
|
|
||||||
interval: 10s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 60
|
|
||||||
start_period: 30s
|
|
||||||
labels:
|
|
||||||
- traefik.enable=true
|
|
||||||
- traefik.http.routers.cameleer-logto.rule=PathPrefix(`/`)
|
|
||||||
- traefik.http.routers.cameleer-logto.priority=1
|
|
||||||
- traefik.http.routers.cameleer-logto.entrypoints=websecure
|
|
||||||
- traefik.http.routers.cameleer-logto.tls=true
|
|
||||||
- traefik.http.routers.cameleer-logto.service=cameleer-logto
|
|
||||||
- traefik.http.routers.cameleer-logto.middlewares=cameleer-logto-cors
|
|
||||||
- "traefik.http.middlewares.cameleer-logto-cors.headers.accessControlAllowOriginList=${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost}:${LOGTO_CONSOLE_PORT:-3002}"
|
|
||||||
- traefik.http.middlewares.cameleer-logto-cors.headers.accessControlAllowMethods=GET,POST,PUT,PATCH,DELETE,OPTIONS
|
|
||||||
- traefik.http.middlewares.cameleer-logto-cors.headers.accessControlAllowHeaders=Authorization,Content-Type
|
|
||||||
- traefik.http.middlewares.cameleer-logto-cors.headers.accessControlAllowCredentials=true
|
|
||||||
- traefik.http.services.cameleer-logto.loadbalancer.server.port=3001
|
|
||||||
- traefik.http.routers.cameleer-logto-console.rule=PathPrefix(`/`)
|
|
||||||
- traefik.http.routers.cameleer-logto-console.entrypoints=admin-console
|
|
||||||
- traefik.http.routers.cameleer-logto-console.tls=true
|
|
||||||
- traefik.http.routers.cameleer-logto-console.service=cameleer-logto-console
|
|
||||||
- traefik.http.services.cameleer-logto-console.loadbalancer.server.port=3002
|
|
||||||
volumes:
|
|
||||||
- cameleer-bootstrapdata:/data
|
|
||||||
networks:
|
|
||||||
- cameleer
|
|
||||||
|
|
||||||
cameleer-saas:
|
|
||||||
image: ${CAMELEER_IMAGE:-gitea.siegeln.net/cameleer/cameleer-saas}:${VERSION:-latest}
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
cameleer-logto:
|
|
||||||
condition: service_healthy
|
|
||||||
environment:
|
|
||||||
SPRING_DATASOURCE_URL: jdbc:postgresql://cameleer-postgres:5432/cameleer_saas
|
|
||||||
SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER:-cameleer}
|
|
||||||
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
|
|
||||||
CAMELEER_SAAS_IDENTITY_LOGTOENDPOINT: http://cameleer-logto:3001
|
|
||||||
CAMELEER_SAAS_IDENTITY_LOGTOPUBLICENDPOINT: ${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_PUBLICHOST: ${PUBLIC_HOST:-localhost}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_PUBLICPROTOCOL: ${PUBLIC_PROTOCOL:-https}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_NETWORKNAME: ${COMPOSE_PROJECT_NAME:-cameleer-saas}_cameleer
|
|
||||||
CAMELEER_SAAS_PROVISIONING_TRAEFIKNETWORK: cameleer-traefik
|
|
||||||
CAMELEER_SAAS_PROVISIONING_DATASOURCEUSERNAME: ${POSTGRES_USER:-cameleer}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_DATASOURCEPASSWORD: ${POSTGRES_PASSWORD}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_CLICKHOUSEPASSWORD: ${CLICKHOUSE_PASSWORD}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_SERVERIMAGE: ${CAMELEER_SAAS_PROVISIONING_SERVERIMAGE:-gitea.siegeln.net/cameleer/cameleer-server:latest}
|
|
||||||
CAMELEER_SAAS_PROVISIONING_SERVERUIIMAGE: ${CAMELEER_SAAS_PROVISIONING_SERVERUIIMAGE:-gitea.siegeln.net/cameleer/cameleer-server-ui:latest}
|
|
||||||
labels:
|
|
||||||
- traefik.enable=true
|
|
||||||
- traefik.http.routers.saas.rule=PathPrefix(`/platform`)
|
|
||||||
- traefik.http.routers.saas.entrypoints=websecure
|
|
||||||
- traefik.http.routers.saas.tls=true
|
|
||||||
- traefik.http.services.saas.loadbalancer.server.port=8080
|
|
||||||
volumes:
|
|
||||||
- cameleer-bootstrapdata:/data/bootstrap:ro
|
|
||||||
- cameleer-certs:/certs
|
|
||||||
- ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock
|
|
||||||
networks:
|
|
||||||
- cameleer
|
|
||||||
group_add:
|
|
||||||
- "0"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
cameleer-pgdata:
|
|
||||||
cameleer-chdata:
|
|
||||||
cameleer-certs:
|
|
||||||
cameleer-bootstrapdata:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
cameleer:
|
|
||||||
driver: bridge
|
|
||||||
cameleer-traefik:
|
|
||||||
name: cameleer-traefik
|
|
||||||
driver: bridge
|
|
||||||
Reference in New Issue
Block a user