Hosting
Azure
Configura una VM Linux di Azure con la CLI di Azure, applica il rafforzamento della sicurezza del gruppo di sicurezza di rete (NSG), configura Azure Bastion per l'accesso SSH e installa OpenClaw.
Cosa farai
- Creerai le risorse di rete di Azure (VNet, subnet, NSG) e di calcolo con la CLI di Azure
- Applicherai regole NSG affinché l'accesso SSH alla VM sia consentito solo da Azure Bastion
- Utilizzerai Azure Bastion per l'accesso SSH (senza IP pubblico sulla VM)
- Installerai OpenClaw con lo script di installazione
- Verificherai il Gateway
Cosa ti serve
- Una sottoscrizione di Azure con l'autorizzazione a creare risorse di calcolo e di rete
- La CLI di Azure installata (consulta la procedura di installazione della CLI di Azure)
- Una coppia di chiavi SSH (questa guida spiega come generarne una, se necessario)
- Circa 20-30 minuti
Configurare la distribuzione
Accedi alla CLI di Azure
az loginaz extension add -n sshL'estensione ssh è necessaria per il tunneling SSH nativo di Azure Bastion.
Registra i provider di risorse richiesti (una sola volta)
az provider register --namespace Microsoft.Computeaz provider register --namespace Microsoft.NetworkVerifica la registrazione; attendi finché entrambi non mostrano Registered.
az provider show --namespace Microsoft.Compute --query registrationState -o tsvaz provider show --namespace Microsoft.Network --query registrationState -o tsvImposta le variabili di distribuzione
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"Adatta i nomi e gli intervalli CIDR al tuo ambiente. La subnet di Bastion deve essere almeno /26.
Seleziona una chiave SSH
Se ne hai una, utilizza la tua chiave pubblica esistente:
SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"In caso contrario, generane una:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "you@example.com"SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"Seleziona le dimensioni della VM e del disco del sistema operativo
VM_SIZE="Standard_B2as_v2"OS_DISK_SIZE_GB=64- Inizia con dimensioni ridotte per un utilizzo leggero e aumentale in seguito.
- Utilizza più vCPU, RAM e spazio su disco per automazioni più impegnative, più canali o carichi di lavoro più grandi per modelli e strumenti.
- Se una dimensione non è disponibile nella tua area o nella quota della sottoscrizione, scegli lo SKU disponibile più simile.
Elenca le dimensioni delle VM disponibili nell'area di destinazione:
az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o tableControlla l'utilizzo e la quota correnti di vCPU e dischi:
az vm list-usage --location "${LOCATION}" -o tableDistribuire le risorse di Azure
Crea il gruppo di risorse
az group create -n "${RG}" -l "${LOCATION}"Crea il gruppo di sicurezza di rete
Crea l'NSG e aggiungi regole affinché solo la subnet di Bastion possa accedere alla VM tramite SSH.
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 22Le regole vengono valutate in base alla priorità, a partire dal numero più basso: il traffico di Bastion è consentito con priorità 100, quindi tutto l'altro traffico SSH viene bloccato con priorità 110 e 120.
Crea la rete virtuale e le subnet
Crea la VNet con la subnet della VM (con l'NSG associato), quindi aggiungi la subnet di Bastion.
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}"Crea la VM
Alla VM non viene assegnato alcun IP pubblico. L'accesso SSH avviene esclusivamente tramite 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 "" impedisce l'assegnazione di un IP pubblico. --nsg "" evita la creazione di un NSG per la singola scheda di rete, poiché la sicurezza è già gestita dall'NSG a livello di subnet.
Per fissare una versione specifica dell'immagine Ubuntu invece di latest, elenca prima le versioni disponibili:
az vm image list \ --publisher Canonical --offer ubuntu-24_04-lts \ --sku server --all -o tableCrea Azure Bastion
Azure Bastion fornisce un accesso SSH gestito senza esporre un IP pubblico sulla VM. Per utilizzare az network bastion ssh dalla CLI sono necessari lo SKU Standard e il tunneling abilitato.
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 trueIl provisioning di Bastion richiede in genere 5-10 minuti, ma in alcune aree può richiedere fino a 15-30 minuti.
Installare OpenClaw
Accedi alla VM tramite SSH con Azure Bastion
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_ed25519Installa OpenClaw (nella shell della VM)
curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.shbash /tmp/install.shrm -f /tmp/install.shIl programma di installazione installa Node e le dipendenze, se non sono già presenti, installa OpenClaw e avvia la configurazione iniziale. Per i dettagli, consulta Installazione.
Verifica il Gateway
Al termine della configurazione iniziale:
openclaw gateway statusSe la tua organizzazione dispone già di licenze GitHub Copilot, durante la configurazione iniziale puoi scegliere il provider GitHub Copilot invece di utilizzare una chiave API separata per il modello. Consulta Provider GitHub Copilot.
Considerazioni sui costi
Costi mensili approssimativi (verifica i prezzi correnti nel calcolatore dei prezzi di Azure, poiché le tariffe variano in base all'area e cambiano nel tempo):
- SKU Standard di Azure Bastion: circa 140 USD al mese
- VM (
Standard_B2as_v2): circa 55 USD al mese
Per ridurre i costi:
-
Dealloca la VM quando non viene utilizzata. In questo modo la fatturazione delle risorse di calcolo viene interrotta, mentre i costi del disco rimangono. Il Gateway non è raggiungibile mentre la VM è deallocata.
bash az vm deallocate -g "${RG}" -n "${VM_NAME}"az vm start -g "${RG}" -n "${VM_NAME}" # restart later -
Elimina Bastion quando non è necessario e ricrealo quando ti serve nuovamente l'accesso SSH; è il componente più costoso e il provisioning richiede pochi minuti.
-
Utilizza lo SKU Basic di Bastion (circa 38 USD al mese) se ti serve solo l'accesso SSH dal portale e non hai bisogno del tunneling tramite CLI (
az network bastion ssh).
Pulizia
Elimina tutte le risorse create da questa guida:
az group delete -n "${RG}" --yes --no-waitQuesta operazione rimuove il gruppo di risorse e tutto ciò che contiene (VM, VNet, NSG, Bastion, IP pubblico).
Passaggi successivi
- Configura i canali di messaggistica: Canali
- Associa i dispositivi locali come nodi: Nodi
- Configura il Gateway: Configurazione del Gateway
- Maggiori dettagli sulla distribuzione in Azure con il provider di modelli GitHub Copilot: OpenClaw su Azure con GitHub Copilot