Skip to main content
You don’t run this deployment by hand. An AI coding agent follows the Install guide and stops to ask you whenever a step needs a person. Budget 60 to 90 minutes of wall clock time, plus the human steps. Most of that is waiting on the AKS and PostgreSQL apply, pod startup, and the first Application Gateway sync.
Full self-hosting on Azure is in closed beta. Contact us before your first install. New to full self-hosting? Read the Overview first.

What runs in your subscription

Azure runs Velt’s portable stack: Kubernetes and PostgreSQL instead of Cloud Run and Firebase. Everything is served from one public host, and nothing calls a Velt-owned host at runtime. Azure commercial (AzureCloud) and Azure Government (AzureUSGovernment) use the same commands. The install guide calls out the few values that differ.
1

Check the prerequisites

  • An Azure subscription where the deploying identity holds Owner, or Contributor + User Access Administrator. Contributor alone can’t create the Key Vault grant the module needs.
  • An Entra tenant where you (or an admin) can create a single-page app registration for console sign-in and a security group for cluster admins.
  • vCPU quota in your region. The default footprint (3 × Standard_D4ds_v5) needs at least 16 regional and family vCPUs. The small footprint (3 × Standard_D2ds_v4) fits a 10-vCPU subscription.
  • A region where PostgreSQL Flexible Server is offered to your subscription. The agent checks this before the apply.
  • Someone available to run an AI coding agent for the duration.
Tools on the machine that runs the agent: Azure CLI 2.60+, Terraform 1.6+, Helm 3.17+ (or 4.x), kubectl, Azure’s kubelogin, cosign, oras, Node 18+, Docker, curl, python3, openssl, jq, and dig. The agent runs the release’s preflight check before it starts and stops at the first problem: tools, permissions, region, quota, or name availability.
Install Azure’s kubelogin with brew install Azure/kubelogin/kubelogin. brew install kubelogin installs an unrelated tool with the same name that the install can’t use.
2

Decide your inputs

Decide these once, up front. The agent asks for all of them before it starts.
A torn-down deployment’s Key Vault reserves DEPLOYMENT_NAME for 90 days. Add a suffix (acmevelt01) rather than reusing a name.
Optional features (REST API, comment attachments, advanced webhooks, console SAML sign-in and SCIM, FIPS mode, metric alerts) are off by default. You can turn each on later with a helm upgrade. The agent instructions list every input in full.
3

Start your agent

Copy the agent instructions from the Install guide and paste them into your AI coding agent. Then start it with a prompt like this, filled in with your inputs:
The agent ends with a final report: your endpoints, your app’s config, and where every secret is stored. Keep velt-selfhost-azure-state.json in your working directory; it lets a new session resume an interrupted install.
4

Stay available for the human steps

The agent pauses and asks at each of these moments, handing you the exact command or portal URL.
A vCPU family at a quota of 0 usually needs a portal request or a support ticket, which can take days. Check your quota on day 1.
5

Wire your app

Set both axes in your app’s Velt config: where the SDK bundle downloads from (version and proxyConfig.cdnHost), and where the SDK talks to (selfHosted).
Rules that break production if violated:
  1. Set both axes. strict: true silences runtime calls, but only proxyConfig.cdnHost and version stop the bundle from loading from cdn.velt.dev.
  2. Pin version to the chart’s sdk.version. It defaults to the wrapper’s built-in version, and a mismatch 404s.
  3. Never set staging: true or develop: true on a self-hosted page. Both point at a Velt host.
  4. portableBackendUrl ends in /api. Root paths such as /identify are not routed.
6

Confirm it is done

The deployment is complete only when all four pass:
  1. Console sign-in as the seeded admin email lands on the dashboard.
  2. The app loads velt.js and its chunks from your host, and window.Velt.version matches the pin.
  3. A comment created in the app is visible in the console.
  4. A Network audit on both the app and console sessions shows no requests to velt.dev or other Velt-owned hosts.
With comment attachments on, a fifth check confirms uploads and downloads go to your own storage account.

Troubleshooting your app

For infrastructure errors, ask your agent: the agent instructions include the full troubleshooting table.

Upgrading later

The Azure upgrade guide is in progress. Contact Velt before you upgrade a deployment.