chore: rename cameleer3 to cameleer
Rename Java packages from net.siegeln.cameleer3 to net.siegeln.cameleer, update all references in workflows, Docker configs, docs, and bootstrap. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -30,7 +30,7 @@ This spec redesigns the platform around two personas — **vendor** (us) and **c
|
||||
| ID | Story | Acceptance Criteria |
|
||||
|----|-------|-------------------|
|
||||
| V1 | As a vendor, I want to create a tenant so I can onboard a new customer | Form collects name, slug, tier. Creates DB record + Logto org. Status = PROVISIONING. |
|
||||
| V2 | As a vendor, I want to provision a server for a tenant so they have a running Cameleer instance | After tenant creation, SaaS creates a cameleer3-server container via Docker API with correct env vars, network, and Traefik labels. Health check passes → status = ACTIVE. |
|
||||
| V2 | As a vendor, I want to provision a server for a tenant so they have a running Cameleer instance | After tenant creation, SaaS creates a cameleer-server container via Docker API with correct env vars, network, and Traefik labels. Health check passes → status = ACTIVE. |
|
||||
| V3 | As a vendor, I want to generate and assign a license to a tenant | License created with tier-appropriate features/limits/expiry. Token pushed to tenant's server via M2M API. |
|
||||
| V4 | As a vendor, I want to suspend a tenant who hasn't paid | Suspend stops the server container and marks tenant SUSPENDED. Reactivation restarts it. |
|
||||
| V5 | As a vendor, I want to view fleet health at a glance | Tenant list shows each tenant's server status (running/stopped/error), agent count vs limit, license expiry. |
|
||||
@@ -135,7 +135,7 @@ public class TenantProvisionerAutoConfig {
|
||||
|
||||
| Config | Value | Source |
|
||||
|--------|-------|--------|
|
||||
| Image | `gitea.siegeln.net/cameleer/cameleer3-server:${VERSION}` | Global config |
|
||||
| Image | `gitea.siegeln.net/cameleer/cameleer-server:${VERSION}` | Global config |
|
||||
| Name | `cameleer-server-${tenant.slug}` | Derived from tenant |
|
||||
| Network | `cameleer` + `cameleer-traefik` | Fixed networks from compose |
|
||||
| DNS alias | `cameleer-server-${tenant.slug}` | For SaaS→server M2M calls |
|
||||
@@ -146,7 +146,7 @@ public class TenantProvisionerAutoConfig {
|
||||
|
||||
| Env var | Value | Purpose |
|
||||
|---------|-------|---------|
|
||||
| `SPRING_DATASOURCE_URL` | `jdbc:postgresql://postgres:5432/cameleer3` | Shared PostgreSQL |
|
||||
| `SPRING_DATASOURCE_URL` | `jdbc:postgresql://postgres:5432/cameleer` | Shared PostgreSQL |
|
||||
| `CAMELEER_TENANT_ID` | `${tenant.slug}` | Tenant isolation key |
|
||||
| `CAMELEER_OIDC_ISSUER_URI` | `${PUBLIC_PROTOCOL}://${PUBLIC_HOST}/oidc` | Logto as initial OIDC |
|
||||
| `CAMELEER_OIDC_JWK_SET_URI` | `http://logto:3001/oidc/jwks` | Docker-internal JWK |
|
||||
@@ -168,12 +168,12 @@ traefik.http.services.server-${slug}.loadbalancer.server.port=8081
|
||||
|
||||
**Server UI container per tenant:**
|
||||
|
||||
Each tenant also gets a `cameleer3-server-ui` container:
|
||||
Each tenant also gets a `cameleer-server-ui` container:
|
||||
|
||||
| Config | Value |
|
||||
|--------|-------|
|
||||
| Name | `cameleer-server-ui-${tenant.slug}` |
|
||||
| Image | `gitea.siegeln.net/cameleer/cameleer3-server-ui:${VERSION}` |
|
||||
| Image | `gitea.siegeln.net/cameleer/cameleer-server-ui:${VERSION}` |
|
||||
| Env | `BASE_PATH=/t/${slug}` |
|
||||
| Traefik | `PathPrefix(/t/${slug})` with `priority=2` (higher than API) |
|
||||
|
||||
@@ -467,11 +467,11 @@ New migration `V011`:
|
||||
|
||||
## 8. Existing Compose Stack Changes
|
||||
|
||||
The default `cameleer3-server` and `cameleer3-server-ui` containers in docker-compose.yml become the "bootstrap" server for the `default` tenant. When provisioning is enabled, new tenants get their own dynamically-created containers.
|
||||
The default `cameleer-server` and `cameleer-server-ui` containers in docker-compose.yml become the "bootstrap" server for the `default` tenant. When provisioning is enabled, new tenants get their own dynamically-created containers.
|
||||
|
||||
The existing compose stack continues to work as-is for development. The provisioner creates additional containers alongside the compose-managed ones.
|
||||
|
||||
For the `default` tenant (created by bootstrap), the SaaS recognizes the existing compose-managed server and doesn't try to provision a new one. This is detected by checking if a container named `cameleer-server-default` (or the compose-managed `cameleer3-server`) already exists.
|
||||
For the `default` tenant (created by bootstrap), the SaaS recognizes the existing compose-managed server and doesn't try to provision a new one. This is detected by checking if a container named `cameleer-server-default` (or the compose-managed `cameleer-server`) already exists.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user