Hosting
Azure
Richten Sie mit der Azure CLI eine Azure-Linux-VM ein, härten Sie die Netzwerksicherheitsgruppe (Network Security Group, NSG), konfigurieren Sie Azure Bastion für den SSH-Zugriff und installieren Sie OpenClaw.
Was Sie tun werden
- Azure-Netzwerkressourcen (VNet, Subnetze, NSG) und Computeressourcen mit der Azure CLI erstellen
- NSG-Regeln anwenden, sodass SSH-Zugriff auf die VM nur über Azure Bastion zulässig ist
- Azure Bastion für den SSH-Zugriff verwenden (keine öffentliche IP-Adresse für die VM)
- OpenClaw mit dem Installationsskript installieren
- Das Gateway überprüfen
Was Sie benötigen
- Ein Azure-Abonnement mit der Berechtigung zum Erstellen von Computer- und Netzwerkressourcen
- Eine installierte Azure CLI (siehe Installationsschritte für die Azure CLI)
- Ein SSH-Schlüsselpaar (diese Anleitung beschreibt bei Bedarf dessen Erstellung)
- Etwa 20–30 Minuten
Bereitstellung konfigurieren
Bei der Azure CLI anmelden
az loginaz extension add -n sshDie Erweiterung ssh ist für natives SSH-Tunneling über Azure Bastion erforderlich.
Erforderliche Ressourcenanbieter registrieren (einmalig)
az provider register --namespace Microsoft.Computeaz provider register --namespace Microsoft.NetworkÜberprüfen Sie die Registrierung und warten Sie, bis beide Registered anzeigen.
az provider show --namespace Microsoft.Compute --query registrationState -o tsvaz provider show --namespace Microsoft.Network --query registrationState -o tsvBereitstellungsvariablen festlegen
RG="rg-openclaw"LOCATION="westus2"VNET_NAME="vnet-openclaw"VNET_PREFIX="10.40.0.0/16"VM_SUBNET_NAME="snet-openclaw-vm"VM_SUBNET_PREFIX="10.40.2.0/24"BASTION_SUBNET_PREFIX="10.40.1.0/26"NSG_NAME="nsg-openclaw-vm"VM_NAME="vm-openclaw"ADMIN_USERNAME="openclaw"BASTION_NAME="bas-openclaw"BASTION_PIP_NAME="pip-openclaw-bastion"Passen Sie Namen und CIDR-Bereiche an Ihre Umgebung an. Das Bastion-Subnetz muss mindestens /26 groß sein.
SSH-Schlüssel auswählen
Verwenden Sie Ihren vorhandenen öffentlichen Schlüssel, falls Sie bereits einen besitzen:
SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"Andernfalls erstellen Sie einen:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "you@example.com"SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"VM-Größe und Größe des Betriebssystemdatenträgers auswählen
VM_SIZE="Standard_B2as_v2"OS_DISK_SIZE_GB=64- Beginnen Sie bei geringer Nutzung mit einer kleineren Größe und skalieren Sie später hoch.
- Verwenden Sie für umfangreichere Automatisierung, mehr Kanäle oder größere Modell- und Tool-Arbeitslasten mehr vCPUs, RAM und Speicherplatz.
- Wenn eine Größe in Ihrer Region oder im Kontingent Ihres Abonnements nicht verfügbar ist, wählen Sie die ähnlichste verfügbare SKU.
Listen Sie die in Ihrer Zielregion verfügbaren VM-Größen auf:
az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o tableÜberprüfen Sie Ihre aktuelle vCPU- und Datenträgernutzung sowie die entsprechenden Kontingente:
az vm list-usage --location "${LOCATION}" -o tableAzure-Ressourcen bereitstellen
Ressourcengruppe erstellen
az group create -n "${RG}" -l "${LOCATION}"Netzwerksicherheitsgruppe erstellen
Erstellen Sie die NSG und fügen Sie Regeln hinzu, sodass nur das Bastion-Subnetz per SSH auf die VM zugreifen kann.
az network nsg create \ -g "${RG}" -n "${NSG_NAME}" -l "${LOCATION}" # Allow SSH from the Bastion subnet onlyaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n AllowSshFromBastionSubnet --priority 100 \ --access Allow --direction Inbound --protocol Tcp \ --source-address-prefixes "${BASTION_SUBNET_PREFIX}" \ --destination-port-ranges 22 # Deny SSH from the public internetaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n DenyInternetSsh --priority 110 \ --access Deny --direction Inbound --protocol Tcp \ --source-address-prefixes Internet \ --destination-port-ranges 22 # Deny SSH from other VNet sourcesaz network nsg rule create \ -g "${RG}" --nsg-name "${NSG_NAME}" \ -n DenyVnetSsh --priority 120 \ --access Deny --direction Inbound --protocol Tcp \ --source-address-prefixes VirtualNetwork \ --destination-port-ranges 22Regeln werden nach Priorität ausgewertet, beginnend mit der niedrigsten Zahl: Bastion-Datenverkehr wird mit Priorität 100 zugelassen; anschließend wird sämtlicher anderer SSH-Datenverkehr mit den Prioritäten 110 und 120 blockiert.
Virtuelles Netzwerk und Subnetze erstellen
Erstellen Sie das VNet mit dem VM-Subnetz und der zugeordneten NSG und fügen Sie anschließend das Bastion-Subnetz hinzu.
az network vnet create \ -g "${RG}" -n "${VNET_NAME}" -l "${LOCATION}" \ --address-prefixes "${VNET_PREFIX}" \ --subnet-name "${VM_SUBNET_NAME}" \ --subnet-prefixes "${VM_SUBNET_PREFIX}" # Attach the NSG to the VM subnetaz network vnet subnet update \ -g "${RG}" --vnet-name "${VNET_NAME}" \ -n "${VM_SUBNET_NAME}" --nsg "${NSG_NAME}" # AzureBastionSubnet: this exact name is required by Azureaz network vnet subnet create \ -g "${RG}" --vnet-name "${VNET_NAME}" \ -n AzureBastionSubnet \ --address-prefixes "${BASTION_SUBNET_PREFIX}"VM erstellen
Die VM erhält keine öffentliche IP-Adresse. Der SSH-Zugriff erfolgt ausschließlich über Azure Bastion.
az vm create \ -g "${RG}" -n "${VM_NAME}" -l "${LOCATION}" \ --image "Canonical:ubuntu-24_04-lts:server:latest" \ --size "${VM_SIZE}" \ --os-disk-size-gb "${OS_DISK_SIZE_GB}" \ --storage-sku StandardSSD_LRS \ --admin-username "${ADMIN_USERNAME}" \ --ssh-key-values "${SSH_PUB_KEY}" \ --vnet-name "${VNET_NAME}" \ --subnet "${VM_SUBNET_NAME}" \ --public-ip-address "" \ --nsg ""--public-ip-address "" verhindert die Zuweisung einer öffentlichen IP-Adresse. --nsg "" überspringt eine NSG pro Netzwerkschnittstelle, da die NSG auf Subnetzebene bereits für die Sicherheit zuständig ist.
Um statt latest eine bestimmte Ubuntu-Image-Version festzulegen, listen Sie zunächst die verfügbaren Versionen auf:
az vm image list \ --publisher Canonical --offer ubuntu-24_04-lts \ --sku server --all -o tableAzure Bastion erstellen
Azure Bastion ermöglicht verwalteten SSH-Zugriff, ohne eine öffentliche IP-Adresse für die VM offenzulegen. Für den CLI-basierten Befehl az network bastion ssh ist die Standard-SKU mit aktiviertem Tunneling erforderlich.
az network public-ip create \ -g "${RG}" -n "${BASTION_PIP_NAME}" -l "${LOCATION}" \ --sku Standard --allocation-method Static az network bastion create \ -g "${RG}" -n "${BASTION_NAME}" -l "${LOCATION}" \ --vnet-name "${VNET_NAME}" \ --public-ip-address "${BASTION_PIP_NAME}" \ --sku Standard --enable-tunneling trueDie Bereitstellung von Bastion dauert üblicherweise 5–10 Minuten, kann in einigen Regionen jedoch bis zu 15–30 Minuten dauern.
OpenClaw installieren
Über Azure Bastion per SSH mit der VM verbinden
VM_ID="$(az vm show -g "${RG}" -n "${VM_NAME}" --query id -o tsv)" az network bastion ssh \ --name "${BASTION_NAME}" \ --resource-group "${RG}" \ --target-resource-id "${VM_ID}" \ --auth-type ssh-key \ --username "${ADMIN_USERNAME}" \ --ssh-key ~/.ssh/id_ed25519OpenClaw installieren (in der VM-Shell)
curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.shbash /tmp/install.shrm -f /tmp/install.shDas Installationsprogramm installiert Node und die Abhängigkeiten, sofern sie noch nicht vorhanden sind, installiert OpenClaw und startet das Onboarding. Weitere Informationen finden Sie unter Installation.
Gateway überprüfen
Nachdem das Onboarding abgeschlossen ist:
openclaw gateway statusWenn Ihre Organisation bereits über GitHub-Copilot-Lizenzen verfügt, können Sie während des Onboardings den GitHub-Copilot-Provider auswählen, anstatt einen separaten Modell-API-Schlüssel zu verwenden. Weitere Informationen finden Sie unter GitHub-Copilot-Provider.
Kostenüberlegungen
Ungefähre monatliche Kosten (überprüfen Sie die aktuellen Preise im Azure-Preisrechner, da die Preise je nach Region variieren und sich im Laufe der Zeit ändern):
- Azure Bastion Standard-SKU: etwa 140 USD/Monat
- VM (
Standard_B2as_v2): etwa 55 USD/Monat
So reduzieren Sie die Kosten:
-
Heben Sie die Zuordnung der VM auf, wenn sie nicht verwendet wird. Dadurch wird die Abrechnung der Rechenleistung beendet; Datenträgerkosten fallen weiterhin an. Während die Zuordnung aufgehoben ist, ist das Gateway nicht erreichbar.
bash az vm deallocate -g "${RG}" -n "${VM_NAME}"az vm start -g "${RG}" -n "${VM_NAME}" # restart later -
Löschen Sie Bastion, wenn es nicht benötigt wird, und erstellen Sie es erneut, sobald Sie wieder SSH-Zugriff benötigen. Bastion ist der größte Kostenfaktor und lässt sich innerhalb weniger Minuten bereitstellen.
-
Verwenden Sie die Bastion-Basic-SKU (etwa 38 USD/Monat), wenn Sie nur portalbasierten SSH-Zugriff benötigen und kein CLI-Tunneling (
az network bastion ssh) verwenden.
Bereinigung
Löschen Sie alle mit dieser Anleitung erstellten Ressourcen:
az group delete -n "${RG}" --yes --no-waitDadurch werden die Ressourcengruppe und alle darin enthaltenen Ressourcen entfernt (VM, VNet, NSG, Bastion und öffentliche IP-Adresse).
Nächste Schritte
- Nachrichtenkanäle einrichten: Kanäle
- Lokale Geräte als Nodes koppeln: Nodes
- Gateway konfigurieren: Gateway-Konfiguration
- Weitere Einzelheiten zur Azure-Bereitstellung mit dem GitHub-Copilot-Modell-Provider: OpenClaw in Azure mit GitHub Copilot