Support separate auth domain (e.g. auth.cameleer.io) for Logto while
keeping the SaaS app on PUBLIC_HOST (e.g. app.cameleer.io). AUTH_HOST
defaults to PUBLIC_HOST for backward-compatible single-domain setups.
- Logto routing: Host(AUTH_HOST) replaces PathPrefix('/') catch-all
- Root redirect moved from traefik-dynamic.yml to Docker labels with
Host(PUBLIC_HOST) scope so it doesn't intercept auth domain
- Self-signed cert generates SANs for both domains
- Bootstrap Host header uses AUTH_HOST for Logto endpoint validation
- Spring issuer-uri and oidcissueruri use new authhost property
- Both installers (sh + ps1) prompt for AUTH_HOST in expert mode
Local dev: AUTH_HOST=auth.localhost (resolves to 127.0.0.1, no hosts file)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
81 lines
2.4 KiB
YAML
81 lines
2.4 KiB
YAML
# Cameleer Infrastructure
|
|
# Shared base — always loaded. Mode-specific services in separate compose files.
|
|
|
|
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_BIND:-127.0.0.1}:${LOGTO_CONSOLE_PORT:-3002}:3002"
|
|
environment:
|
|
PUBLIC_HOST: ${PUBLIC_HOST:-localhost}
|
|
AUTH_HOST: ${AUTH_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
|
|
labels:
|
|
- "prometheus.io/scrape=true"
|
|
- "prometheus.io/port=8082"
|
|
- "prometheus.io/path=/metrics"
|
|
networks:
|
|
- cameleer
|
|
- cameleer-traefik
|
|
- monitoring
|
|
|
|
cameleer-postgres:
|
|
image: ${POSTGRES_IMAGE:-gitea.siegeln.net/cameleer/cameleer-postgres}:${VERSION:-latest}
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: ${POSTGRES_DB:-cameleer_saas}
|
|
POSTGRES_USER: ${POSTGRES_USER:-cameleer}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set in .env}
|
|
volumes:
|
|
- cameleer-pgdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-cameleer} -d $${POSTGRES_DB:-cameleer_saas}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- cameleer
|
|
- monitoring
|
|
|
|
cameleer-clickhouse:
|
|
image: ${CLICKHOUSE_IMAGE:-gitea.siegeln.net/cameleer/cameleer-clickhouse}:${VERSION:-latest}
|
|
restart: unless-stopped
|
|
environment:
|
|
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:?CLICKHOUSE_PASSWORD must be set in .env}
|
|
volumes:
|
|
- cameleer-chdata:/var/lib/clickhouse
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "clickhouse-client --password $${CLICKHOUSE_PASSWORD} --query 'SELECT 1'"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
labels:
|
|
- "prometheus.io/scrape=true"
|
|
- "prometheus.io/port=9363"
|
|
- "prometheus.io/path=/metrics"
|
|
networks:
|
|
- cameleer
|
|
- monitoring
|
|
|
|
volumes:
|
|
cameleer-pgdata:
|
|
cameleer-chdata:
|
|
cameleer-certs:
|
|
|
|
networks:
|
|
cameleer:
|
|
driver: bridge
|
|
cameleer-traefik:
|
|
name: cameleer-traefik
|
|
driver: bridge
|
|
monitoring:
|
|
name: cameleer-monitoring-noop
|