← Atlas Journey · Docs

Frozen document. Dates and status refer to its original source. Private resources and unreviewed images are unavailable.

Cloud deployment with a local UI

Historical alternative with the UI local and original MuleSoft assumptions. ADR 0010 now governs local certification followed by hosted UI, cloud VPS and Contentful SaaS. The proposal below remains research, not the current deployment plan.

Status: recommendation for owner review, 2026-09-23. Research cloud hosting for all Atlas services except the local UI contains the research resolution. This alternative has not been selected or provisioned. Existing business, identity and API decisions still apply.

Integration-provider follow-up

The owner subsequently asked to explore replacing MuleSoft/CloudHub. See free integration alternatives. The owner subsequently selected the local BFF; this document retains the prior proposal for comparison.

Free-tier follow-up

The owner subsequently requested a free-tier comparison and reported an existing AWS account from 2025. See free-tier hosting assessment. Paid Lightsail remains the predictable-cost option below; it is not an always-free recommendation. AWS eligibility and OCI free capacity are unresolved account-specific inputs.

Recommendation

For this synthetic prototype, host the custom backend and supporting services on a dedicated AWS Lightsail Linux VM, retain MuleSoft CloudHub 2.0 and Contentful SaaS, and keep only React/Vite and developer tooling on the Mac. This removes the need for a tunnel into the Mac and keeps the existing Docker-oriented design with fewer paid managed-service contracts.

This is cloud hosted, with self-managed software on the VM. It does not outsource Keycloak, Camunda, database or scanner operations. If minimizing operations is more important than recurring cost, use the managed alternative below. Do not infer a preference for AWS beyond this recommendation; no existing AWS account or entitlement has been verified.

Component placement

ComponentRecommended prototype placementResponsibility
React/Vite SPAMac, fixed loopback HTTPS originLocal UI and public OIDC configuration only
MuleSoft Experience/System APIsCloudHub 2.0 shared space initially, if entitledAnypoint deployment/configuration; vendor runtime hosting
Content and bilingual form templatesContentful SaaSAuthoring and release permissions; immutable release compilation in cloud
Domain simulator, outbox/workflow/scanning workersSeparate Docker services on LightsailAtlas code, service authorization and durable delivery
KeycloakDocker on Lightsail, normal server mode and PostgreSQLMandatory TOTP, en-US/es-US theme, exact origins, upgrades and recovery
CamundaSelf-Managed 8.9 lightweight configuration on LightsailNon-production terms, OIDC, durable engine storage and backups; no unmodified public quickstart
PostgreSQLPrivate Docker service, separate business and IAM databases/rolesBackups, migrations, patching and recovery
Document quarantine, accepted bytes and immutable form releasesSeparate private VM volumes initiallyOnly backend adapters and narrowly scoped scanner access; no public file server
ClamAV and signature updaterPrivate Docker service on LightsailReal scans, signature freshness and adequate memory
TLS entry gatewayDedicated HTTPS routes on LightsailNarrow backend routes and selected Keycloak realm paths; admin/engine/data ports remain closed

A US region is the proposed default for the fictional US demo. Confirm availability, transfer allowances and account regions before setup. Choose a supported host/image architecture from the actual catalog and pin each container digest for that architecture.

flowchart LR

    UI["Mac: React/Vite + loopback proxy"] -->|"HTTPS business requests"| M["MuleSoft CloudHub"]

    UI -->|"Browser login + PKCE"| K["Cloud Keycloak"]

    M -->|"Service-authenticated HTTPS"| B["Cloud Atlas backend"]

    W["Cloud workflow/outbox workers"] --> M

    W --> C["Cloud Camunda"]

    B --> DB["Private PostgreSQL + document volumes"]

    B --> S["Private ClamAV"]

    R["Cloud release compiler"] --> CMS["Contentful SaaS"]

The diagram shows major responsibilities, not every call. Business operations continue through MuleSoft; workflow workers use Camunda's authenticated engine APIs as required. CloudHub authenticates to Keycloak where needed. No cloud component calls the Mac. An OIDC redirect to the local UI is the browser navigating locally, not a server opening an inbound connection.

Local UI and cloud security

Keep the accepted SPA public-client authorization-code/S256 PKCE flow, in-memory tokens and TOTP. Use one fixed trusted local HTTPS origin and exact callback/logout URLs. Configure Keycloak Web Origins narrowly. Silent SSO may be constrained by third-party-cookie settings, so test the normal redirect login and session-expiry behavior. Never give the SPA cloud deployment, CMS management, database or machine-client secrets. Keycloak JavaScript adapter.

Retain the accepted loopback-only development/demo proxy for same-origin business API calls to CloudHub. It forwards the user's [credential omitted] without acquiring its own business identity or storing a server session. It is local UI serving infrastructure, not a new BFF. If direct browser-to-CloudHub requests are later selected, explicitly decide the CORS change and allow only the exact local origin, methods and headers. CORS is not authorization.

CloudHub shared space does not supply private endpoints or static application source IP addresses. Its calls to the cloud backend therefore use a narrow public HTTPS endpoint with dedicated service authentication and Atlas actor authorization. Do not rely on source-IP allowlisting or a secret hostname. A private network design requires different CloudHub entitlements. Shared-space constraints.

Expose only the HTTPS gateway publicly. Restrict management SSH to approved operator sources and keys; disable SSH-agent forwarding. Remove permissive default firewall rules for both IP families. Keep PostgreSQL, ClamAV, Camunda management and Keycloak administration off public routes. Confirm Docker port publication against the external firewall. Lightsail firewall rules.

Use a dedicated cloud account/project boundary, scoped deploy credentials, redacted logs, private volumes, patched images and coordinated database/engine/document backups. Test restoration and a dependency outage before relying on the demo. A single VM is one failure domain and provides no high-availability claim. Moving the backend off the Mac removes the guest-to-Mac connection path only if no VPN/tunnel/host mounts are added back. Browser code, developer dependencies and locally held deployment credentials still need normal protection.

Cost and alternatives

The published Lightsail general-purpose Linux bundle with public IPv4, 16 GiB memory, 4 vCPUs and 320 GB disk costs $84/month. Capacity is an unmeasured starting point, not a performance promise. Add snapshots/backups, domain, taxes and any transfer overage; evaluate the 32 GiB tier if scanner reloads and engine activity exceed the budget. Stopping an instance does not by itself establish zero billing. Confirm the provider's current billing rules. Lightsail pricing.

That $84 is infrastructure only. CloudHub subscription cost remains account-specific and could dominate the total. Contentful's Free plan may fit two locales and prototype content limits; confirm the modeled content types, records and requests before relying on it. Camunda advertises free non-production Self-Managed use; the owner must confirm applicable terms for the intended demo. No production-license entitlement is inferred. Camunda pricing, Contentful pricing, MuleSoft pricing.

AlternativeAdvantageTradeoff
Managed application services on Render, managed PostgreSQL, Camunda SaaS, managed Keycloak, private object storageProvider-operated compute/data platform and fewer VM administration tasksMore accounts, cross-provider networking, object-store adapter, trial expiries and higher subscription cost
AWS ECS/Fargate, RDS and S3, plus SaaS IAM/workflow or separately operated instancesMore granular network/IAM controls and independent scalingMore infrastructure configuration, networking charges and deployment complexity than the first demo needs
Local isolated VMExisting local resources and no cloud VM chargeThe actual VZ baseline permits guest access to Mac loopback; an external network-control solution and further proof are still required

A managed prototype estimate starts with Render API $25/month, worker $25, private scanner $85 and PostgreSQL $19: $154/month before database storage, object storage, bandwidth and workspace charges. Phase Two managed Keycloak Starter adds an advertised $149/month, bringing that illustrative subtotal to $303/month before Camunda SaaS, CloudHub and other extras. These are sizing assumptions, not a tested minimum. Camunda SaaS's current page offers a 30-day execution trial and sales-priced continuation. Phase Two's trial auto-converts unless cancelled. Cloud-IAM's free tier excludes custom themes, and dedicated hosting starts at €225/month. Details and source links: managed-services research, application-hosting research.

Render's private services cannot receive CloudHub calls directly across providers. A public authenticated API service is still needed. Independent services also cannot share one Render persistent disk, so use private object storage and adapter-mediated document transfers for that option. Keep presigned browser downloads deferred as already decided.

Agent operation and next decision

AWS CLI v2 can manage Lightsail instances, network rules and snapshots. Keep infrastructure definitions and deployment scripts in Git; use Anypoint CLI for CloudHub, Keycloak Admin REST/CLI for realm configuration, and the existing Contentful/Camunda APIs for their artifacts. Dedicated credentials and environment targeting remain required. Lightsail CLI operations, CloudHub agent contract.

Choose between the recommended self-managed cloud prototype and the managed-services alternative before changing the runtime ADR. Then confirm the all-in budget, cloud accounts, domain, licenses, exact supported images and teardown/backup policy. No accounts were created, money spent or cloud resources deployed during this research. The local VM experiment remains open and stopped while these alternatives are reviewed.