Skip to content

Deployment Overview

All services deploy via Azure DevOps pipelines. Backends run as Docker containers on Azure Container Apps; frontends and static sites deploy to Cloudflare Pages.

ServiceCI triggerDeploy targetNotes
Cloud BackendPush to Backend/Azure Container Apps (cloud + worker)Docker → ACR → ACA
Cloud FrontendPush to Frontend/Cloudflare PagesVite build artifact
Management BackendPush to Management/management-backend/Azure Container AppsDocker → ACR → ACA
Management FrontendPush to Management/management-frontend/Cloudflare PagesVite build artifact
IngestorPush to ingestor/Azure Container AppsDocker → ACR → ACA
Marketing WebsitePush to Website/Cloudflare PagesAstro build
Contact Form APIPush to WebsiteContactApi/Cloudflare WorkersWrangler deploy
Internal DocsPush to Internal-Documentation/Cloudflare PagesAstro build

When setting up a fresh environment (dev/staging/prod), deploy in this order:

  1. Provision Azure infrastructure — SQL Server, Container Apps, Key Vaults, ACR, ACS Email (see Azure Infrastructure)
  2. DNS — Cloudflare app hostnames (setup_cloudflare_dns.py) and ACS email domain verification (setup_acs_email_dns.py)
  3. Write shared secrets to both kv-mz-cloud-* and kv-mz-manage-*
  4. Run Flyway migrations on both Cloud and Management databases
  5. Deploy Management Backend and Cloud Backend simultaneously (shared secrets must be in KV first)
  6. Deploy frontends (Cloud SPA, Management SPA)
  7. Smoke test: Create a tenant in Management → activate license → log in to Cloud SPA