Skip to content

Choose a Deployment Profile

Choose a profile from requirements you can verify. Caracal ships deployment mechanics; it does not certify capacity, high availability, multi-region operation, or a cloud service.

RequirementUseDo not infer
Local development from sourcecaracal up with development ComposeProduction hardening
One Docker host with bundled storesInstalled runtime and packaged ComposeHost redundancy or zero downtime
Kubernetes 1.30+ with operator dependenciesHelm chartA tested SLO or managed stores
A managed runtime with no cluster to operateinfra/containerPlatform render targetsNetwork policy, disruption budgets, or container hardening
Declarative chart installationcaracalStack OpenTofu moduleResources beyond namespace, optional Secret, and Helm release
Provider-neutral VM bootstrapcaracalHost OpenTofu moduleVM, firewall, TLS, backup, or monitoring creation

Define ingress, recovery objectives, storage ownership, secret delivery, monitoring, and maintenance policy. If availability matters, prove it in your environment; replicas, PDBs, HPAs, and atomic upgrades are mechanisms, not guarantees.

Decide these before provisioning anything. The STS origin becomes the iss claim in every mandate and is configured in every resource verifier and SDK that validates one, so changing it later invalidates that configuration everywhere, silently. Choose it once and keep it for the life of the deployment.

Which shape is right depends on whether the domain belongs to Caracal or to you.

DomainShapeExample
Dedicated to this deploymentFlat service namessts.caracal.example
Your organisation’s existing domainNested under a product labelsts.caracal.example.com

Nest on an organisation domain because api, console, and gateway are almost certainly already in use there. A product label keeps every Caracal name inside one delegable subtree, so a platform team can hand out caracal.example.com once instead of reviewing four records. Nest deeper only for environment or region, such as sts.caracal.staging.example.com.

ServicePublicNotes
Web consoleYesThe only origin that holds session cookies
STSYesResource verifiers and SDKs outside the deployment resolve the issuer
GatewayYesOnly when clients outside the network call protected resources
APIOptionalOnly when automation outside the network uses the Admin API
Audit, CoordinatorNeverInternal by design

Two consequences worth planning for. A wildcard certificate covers one label, so *.caracal.example.com covers sts.caracal.example.com but not sts.caracal.staging.example.com; each extra level needs its own certificate. And the console must set host-only cookies: a cookie scoped to the parent domain would also be sent to the STS and Gateway origins.

  1. Use dev only on a local development host.
  2. Pin a release and use stable for production evaluation.
  3. Keep Compose ports loopback-bound; add an operator-owned TLS proxy for remote access.
  4. For Helm, provide Postgres, Redis, runtime Secret, ingress, and network egress explicitly.
  5. Establish backup, restore, metrics, alerts, and incident ownership before production traffic.

Confirm assets render, secrets resolve, migrations finish, and /ready passes. Run a canary token exchange and Gateway request, then locate its audit evidence.

Keep the prior release and values. Restore data only from a tested backup and restore secrets separately. Helm rollback never reverses database migrations.

Use Deploy with Docker Compose, Deploy with Helm, or Deploy on a Managed Container Platform.