docs: add Azure VM deployment guide with in-repo ARM templates and bootstrap script#47898
Conversation
Greptile SummaryThis PR adds a first-party Azure VM installation guide for OpenClaw, including an ARM template, parameters file, bootstrap script, and navigation/redirect wiring. The infrastructure design is solid — the ARM template correctly chains resource dependencies, the NSG locks down SSH access to the Bastion subnet CIDR only (blocking both Internet and VirtualNetwork sources), and the VM has no public IP. The docs navigation and redirect entries are consistent and correctly target the new Key items to be aware of:
Confidence Score: 4/5
Prompt To Fix All With AIThis is a comment left during a code review.
Path: docs/install/azure/scripts/bootstrap-openclaw.sh
Line: 35
Comment:
**Unverified third-party script piped to bash**
`curl -fsSL https://deb.nodesource.com/setup_24.x | bash -` fetches and immediately executes a script from `nodesource.com` without any integrity check (e.g. a SHA-256 checksum or GPG verification). This is the standard NodeSource installation pattern, but it means a compromised CDN or MITM could push arbitrary code to every freshly-provisioned VM.
For a production-grade bootstrap script, consider one of these alternatives:
1. **Download, inspect, then execute:**
```bash
curl -fsSL https://deb.nodesource.com/setup_24.x -o /tmp/nodesource_setup.sh
# optionally verify checksum here
bash /tmp/nodesource_setup.sh
```
2. **Use the official NodeSource Debian package directly** via their signed apt repository, which gives package-manager-level verification.
At minimum, a comment here explaining the trust model (e.g. "script is fetched over HTTPS from NodeSource's official CDN") would help readers understand the deliberate trade-off.
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: docs/install/azure/azure.md
Line: 132-136
Comment:
**`curl | bash` bootstrap via `az vm run-command invoke`**
The `--scripts` value pipes the bootstrap script directly from a GitHub raw URL into bash on the provisioned VM without any integrity verification. If the `main` branch is force-pushed, a commit is rewritten, or there is a transient MITM during the curl, arbitrary code will execute as root on the VM.
A small improvement for security-conscious users would be to mention pinning to a specific commit SHA instead of `main`:
```
--scripts "curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw/<COMMIT_SHA>/docs/install/azure/scripts/bootstrap-openclaw.sh | bash"
```
Alternatively, the guide could suggest downloading the script first, reviewing it, and then invoking via `--scripts @/path/to/bootstrap-openclaw.sh` using the local-file form of `az vm run-command invoke`. Even a one-line note explaining the trust assumption (i.e. "this runs the in-repo script as root — pin to a commit SHA for reproducibility") would be a useful callout for production deployments.
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: docs/install/azure/templates/azuredeploy.json
Line: 292-296
Comment:
**Non-reproducible image version `"latest"`**
Using `"version": "latest"` for the Ubuntu image means two deployments at different points in time may provision VMs running different OS patch levels. This is convenient for a getting-started guide, but it means the environment isn't fully reproducible — a regression in a future Canonical image could silently affect new deployments.
Consider noting in the guide (or as a comment in the template) that users who care about reproducibility should pin to a specific image version. You can list available versions with:
```bash
az vm image list --publisher Canonical --offer ubuntu-24_04-lts --sku server --all -o table
```
Then replace `"latest"` with the desired version string (e.g. `"24.04.202503010"`).
How can I resolve this? If you propose a fix, please make it concise.Last reviewed commit: 701f278 |
|
Thank you, @johnsonshi - I'll begin working on this. It'll be busy the next few days, but I'll get some eyes on it as soon as I can! |
|
Nice work on this, @johnsonshi! The ARM template is well-constructed, the NSG rules correctly lock SSH to the Bastion subnet, and the end-to-end flow is clear. A few things I'd flag: Directory structure breaks the established patternEvery existing install guide is a flat file in Suggestion: keep the guide itself as a flat
|
|
Hi @BradGroux thanks for the thorough review! Addressed all four points in this update:
Commit: Docs validation with the latest commit: OpenClaw installation as you suggested (having users SSH in like in GCP to run the install script and onboarding wizard themselves - in the user's SSH shell session). Onboarding wizard continues as part of the setup script: |
BradGroux
left a comment
There was a problem hiding this comment.
Review — Azure VM Install Guide
Overall: Approve with suggestions. The core content is production-quality, well-tested (end-to-end screenshots are appreciated), and follows the existing install guide patterns. ARM template is clean with recent API versions, and the security posture (Bastion-only SSH, no public IP, password auth disabled) is solid.
Suggestions
1. Add a cost callout (strongly recommended)
Azure Bastion Standard SKU runs ~$140/month just for the Bastion host, on top of the VM cost. The other install guides in this repo target cheap or free tiers (Oracle free tier, Hetzner, Fly). Users experimenting with OpenClaw on Azure could get a surprise bill.
Suggest adding a note after Step 7 or in a "Cost considerations" section:
> **Cost note:** Azure Bastion Standard runs ~\$140/month. If you only need
> SSH access occasionally, you can deallocate or delete the Bastion host after
> initial setup and recreate it when needed, or use the Azure Portal Bastion
> connect feature with the Basic SKU (~\$38/month) instead.
>
> The VM itself (Standard_B2as_v2) runs ~\$55/month. To stop billing when not
> in use: `az vm deallocate -g rg-openclaw -n vm-openclaw`
2. Add a cleanup/teardown section
Every experimentation guide benefits from a cleanup note. Users who spin this up to try OpenClaw and forget about it will get billed indefinitely.
## Cleanup
To delete all resources created by this guide:
\`\`\`bash
az group delete -n rg-openclaw --yes --no-wait
\`\`\`3. sshPublicKey missing from parameters file
The parameters file includes every parameter except sshPublicKey, which means az deployment group create with just the params file will fail. This is likely intentional (don't commit keys), but a brief comment in the params file or a note in the guide would prevent confusion:
// sshPublicKey intentionally omitted — pass via CLI overrideOr add a note after the params file reference in the guide.
4. Redirect /install/azure/azure → /install/azure — is it needed?
The doc file is docs/install/azure.md which resolves to /install/azure. The redirect from /install/azure/azure handles a path that shouldn't naturally occur. Not a blocker — just unnecessary noise in docs.json unless there's a known linking pattern that generates this path.
5. PR template checkboxes
Minor: the Change Type and Scope checkboxes are all unchecked. Should have "Docs" and "CI/CD / infra" checked.
What looks good
- NSG rules are correctly ordered: Allow Bastion (100) → Deny Internet (110) → Deny VNet (120). Priority ordering is right.
- Bastion Standard with
enableTunneling: true— required for CLI-basedaz network bastion ssh, good call. - No public IP on the VM — correct security posture for a Bastion-fronted setup.
disablePasswordAuthentication: truewith SSH key only — good.- Ubuntu 24.04 LTS with the
version: "latest"caveat documented — pragmatic default with escape hatch noted. - Resource provider registration step — often missed in Azure guides, good inclusion.
- VM sizing guidance with
az vm list-skusandaz vm list-usage— helps users pick the right SKU for their region/quota. - End-to-end verification with screenshots showing actual Azure deployment, Bastion SSH,
openclaw status, and Telegram messaging — thorough.
Resolved: - openclaw#25790 (Teams issue, CLOSED) - openclaw#47860 (Teams PR, CLOSED) - openclaw#48116 (Azure issue, CLOSED) - openclaw#48899 (Azure issue, CLOSED) - openclaw#47898 (Azure PR, MERGED) - openclaw#17970 (Azure PR, CLOSED) - openclaw#21678 (Windows issue, CLOSED)
Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]>
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from #47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
openclaw#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
openclaw#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets
openclaw#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets (cherry picked from commit 191e194)
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets (cherry picked from commit 191e194)
…otstrap script (openclaw#47898) * docs: add Azure Linux VM install guide * docs: move Azure guide into dedicated docs/install/azure layout * docs: polish Azure guide onboarding and reference links * docs: address Azure review feedback on bootstrap safety * docs: format azure ARM template * docs: flatten Azure install docs and move ARM assets (cherry picked from commit 191e194)
openclaw#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
openclaw#50700) * docs(azure): replace ARM template deployment with pure az CLI commands Rewrites the Azure install guide to use individual az CLI commands instead of referencing ARM templates in infra/azure/templates/ (removed upstream). Each Azure resource (NSG, VNet, subnets, VM, Bastion) is now created with explicit az commands, preserving the same security posture (Bastion-only SSH, no public IP, NSG hardening). Also addresses BradGroux review feedback from openclaw#47898: - Add cost considerations section (Bastion ~$140/mo, VM ~$55/mo) - Add cleanup/teardown section (az group delete) - Remove stale /install/azure/azure redirect from docs.json Co-authored-by: Copilot <[email protected]> * docs(azure): split into multiple Steps blocks for richer TOC Add Quick path and What you need sections. Split the single Steps block into three (Configure deployment, Deploy Azure resources, Install OpenClaw) so H2 headers appear in the Mintlify sidebar TOC. Co-authored-by: Copilot <[email protected]> * docs(azure): remove Quick path section Co-authored-by: Copilot <[email protected]> * docs(azure): fix cost section LaTeX rendering, remove comparison Escape dollar signs to prevent Mintlify LaTeX interpretation. Also escape underscores in VM SKU name within bold text. Co-authored-by: Copilot <[email protected]> * docs(azure): add caveat that deallocated VM stops Gateway Co-authored-by: Copilot <[email protected]> * docs(azure): simplify install step with clearer description Download then run pattern (no sudo). Clarify that installer handles Node LTS, dependencies, OpenClaw install, and onboarding wizard. Co-authored-by: Copilot <[email protected]> * docs(azure): add Bastion provisioning latency note Co-authored-by: Copilot <[email protected]> * docs(azure): use deployment variables in cost and cleanup sections Replace hardcoded rg-openclaw/vm-openclaw with variables in deallocate/start and group delete commands so users who customized names in step 3 get correct commands. Co-authored-by: Copilot <[email protected]> * docs(azure): fix formatting (oxfmt) Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>





Summary
docs/install/azure/(azure.md, ARM templates, bootstrap script), plus nav/redirect updates.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
User-visible / Behavior Changes
/install/azure/azure.Security Impact (required)
No)No)No)No)No)Yes, explain risk + mitigation:N/ARepro + Verification
Environment
Steps
main...docs/azure-vm-install-guide.docs/install/azure/{azure.md,templates/,scripts/}exist.docs/docs.json./install/azure/azureand correct raw GitHub paths.Expected
Actual
All above checks passed.
All expected Azure resources created with the included Azure Resource Manager template deployments and deployment commands:
After VM provisioning and OpenClaw bootstrapping, the Azure Bastion SSH shell is successfully created and OpenClaw onboarding is able to proceed:
OpenClaw onboarding via Azure Bastion SSH succeeds without issues, and
openclaw statusshows no issues running on Azure VM:Successfully set up Telegram bot and messaged the OpenClaw within the Azure VM via Telegram:
Site builds locally without errors:
All added pages render and all modified links are live (no broken links):
vpspage includes a live link to the Azure docs:platformspage includes a live link to the Azure docs:azurepage preview with all live links within the doc validated:Evidence
Attach at least one:
Human Verification (required)
main...HEADdiff and file-level changes.docs/docs.jsonredirects/nav entries for Azure./azure,/platforms/azure, and/install/azure./install/azure/azure) consistency across hubs/nav.vpsandplatformspages to theazurepage resolve successfully.Review Conversations
If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.
Compatibility / Migration
Yes)No)No)N/AFailure Recovery (if this breaks)
docs/docs.json,docs/vps.md,docs/platforms/index.md, and removedocs/install/azure/.N/ARisks and Mitigations
NoneorN/A.