Hosting

Azure

این راهنما یک VM لینوکسی Azure را با Azure CLI راه‌اندازی می‌کند، سخت‌سازی Network Security Group (NSG) را اعمال می‌کند، Azure Bastion را برای دسترسی SSH پیکربندی می‌کند، و OpenClaw را نصب می‌کند.

کاری که انجام می‌دهید

  • ایجاد منابع شبکه Azure (VNet، زیرشبکه‌ها، NSG) و منابع پردازشی با Azure CLI
  • اعمال قوانین Network Security Group تا SSH به VM فقط از Azure Bastion مجاز باشد
  • استفاده از Azure Bastion برای دسترسی SSH (بدون IP عمومی روی VM)
  • نصب OpenClaw با اسکریپت نصب‌کننده
  • تأیید Gateway

آنچه نیاز دارید

  • یک اشتراک Azure با مجوز ایجاد منابع پردازشی و شبکه
  • Azure CLI نصب‌شده (در صورت نیاز، مراحل نصب Azure CLI را ببینید)
  • یک جفت کلید SSH (این راهنما در صورت نیاز ساختن آن را هم پوشش می‌دهد)
  • حدود ۲۰ تا ۳۰ دقیقه

پیکربندی استقرار

  • ورود به Azure CLI

    az login
    az extension add -n ssh
    

    افزونه ssh برای تونل‌سازی SSH بومی Azure Bastion لازم است.

  • ثبت ارائه‌دهندگان منبع موردنیاز (یک‌باره)

    az provider register --namespace Microsoft.Compute
    az provider register --namespace Microsoft.Network
    

    ثبت را تأیید کنید. صبر کنید تا هر دو Registered را نشان دهند.

    az provider show --namespace Microsoft.Compute --query registrationState -o tsv
    az provider show --namespace Microsoft.Network --query registrationState -o tsv
    
  • تنظیم متغیرهای استقرار

    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"
    

    نام‌ها و بازه‌های CIDR را متناسب با محیط خود تنظیم کنید. زیرشبکه Bastion باید حداقل /26 باشد.

  • انتخاب کلید SSH

    اگر کلید عمومی موجود دارید، از آن استفاده کنید:

    SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"
    

    اگر هنوز کلید SSH ندارید، یکی بسازید:

    ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "[email protected]"
    SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"
    
  • انتخاب اندازه VM و اندازه دیسک سیستم‌عامل

    VM_SIZE="Standard_B2as_v2"
    OS_DISK_SIZE_GB=64
    

    اندازه VM و اندازه دیسک سیستم‌عاملی را انتخاب کنید که در اشتراک و منطقه شما موجود باشد:

    • برای استفاده سبک، کوچک‌تر شروع کنید و بعداً مقیاس را افزایش دهید
    • برای اتوماسیون سنگین‌تر، کانال‌های بیشتر، یا بارهای کاری بزرگ‌تر مدل/ابزار، از vCPU/RAM/disk بیشتر استفاده کنید
    • اگر اندازه VM در منطقه یا سهمیه اشتراک شما موجود نیست، نزدیک‌ترین SKU موجود را انتخاب کنید

    اندازه‌های VM موجود در منطقه هدف خود را فهرست کنید:

    az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o table
    

    مصرف/سهمیه فعلی vCPU و دیسک خود را بررسی کنید:

    az vm list-usage --location "${LOCATION}" -o table
    
  • استقرار منابع Azure

  • ایجاد گروه منبع

    az group create -n "${RG}" -l "${LOCATION}"
    
  • ایجاد گروه امنیت شبکه

    NSG را ایجاد کنید و قوانین را اضافه کنید تا فقط زیرشبکه Bastion بتواند از طریق SSH به VM وصل شود.

    az network nsg create \
      -g "${RG}" -n "${NSG_NAME}" -l "${LOCATION}"
    
    # Allow SSH from the Bastion subnet only
    az 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 internet
    az 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 sources
    az 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 22
    

    قوانین بر اساس اولویت ارزیابی می‌شوند (عدد کمتر زودتر): ترافیک Bastion در 100 مجاز است، سپس همه SSHهای دیگر در 110 و 120 مسدود می‌شوند.

  • ایجاد شبکه مجازی و زیرشبکه‌ها

    VNet را با زیرشبکه VM (با NSG متصل) ایجاد کنید، سپس زیرشبکه 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 subnet
    az network vnet subnet update \
      -g "${RG}" --vnet-name "${VNET_NAME}" \
      -n "${VM_SUBNET_NAME}" --nsg "${NSG_NAME}"
    
    # AzureBastionSubnet — name is required by Azure
    az network vnet subnet create \
      -g "${RG}" --vnet-name "${VNET_NAME}" \
      -n AzureBastionSubnet \
      --address-prefixes "${BASTION_SUBNET_PREFIX}"
    
  • ایجاد VM

    VM هیچ IP عمومی ندارد. دسترسی SSH فقط از طریق 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 "" از تخصیص IP عمومی جلوگیری می‌کند. --nsg "" ساخت NSG جداگانه برای هر NIC را رد می‌کند (NSG سطح زیرشبکه امنیت را مدیریت می‌کند).

    بازآفرینی‌پذیری: دستور بالا برای تصویر Ubuntu از latest استفاده می‌کند. برای ثابت‌کردن یک نسخه مشخص، نسخه‌های موجود را فهرست کنید و latest را جایگزین کنید:

    az vm image list \
      --publisher Canonical --offer ubuntu-24_04-lts \
      --sku server --all -o table
    
  • ایجاد Azure Bastion

    Azure Bastion دسترسی SSH مدیریت‌شده به VM را بدون افشای IP عمومی فراهم می‌کند. SKU استاندارد با تونل‌سازی برای az network bastion ssh مبتنی بر CLI لازم است.

    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 true
    

    آماده‌سازی Bastion معمولاً ۵ تا ۱۰ دقیقه طول می‌کشد، اما در برخی مناطق ممکن است تا ۱۵ تا ۳۰ دقیقه زمان ببرد.

  • نصب OpenClaw

  • ورود SSH به VM از طریق 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_ed25519
    
  • نصب OpenClaw (در پوسته VM)

    curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.sh
    bash /tmp/install.sh
    rm -f /tmp/install.sh
    

    نصب‌کننده در صورت نبودن Node LTS و وابستگی‌ها، آن‌ها را نصب می‌کند، OpenClaw را نصب می‌کند، و جادوگر راه‌اندازی اولیه را اجرا می‌کند. برای جزئیات، نصب را ببینید.

  • تأیید Gateway

    پس از تکمیل راه‌اندازی اولیه:

    openclaw gateway status
    

    بیشتر تیم‌های سازمانی Azure از قبل مجوزهای GitHub Copilot دارند. اگر شرایط شما هم همین است، توصیه می‌کنیم در جادوگر راه‌اندازی اولیه OpenClaw، ارائه‌دهنده GitHub Copilot را انتخاب کنید. ارائه‌دهنده GitHub Copilot را ببینید.

  • ملاحظات هزینه

    Azure Bastion Standard SKU حدود $140/month هزینه دارد و VM (Standard_B2as_v2) حدود $55/month هزینه دارد.

    برای کاهش هزینه‌ها:

    • VM را deallocate کنید وقتی استفاده نمی‌شود (صورت‌حساب پردازش متوقف می‌شود؛ هزینه‌های دیسک باقی می‌ماند). Gateway مربوط به OpenClaw تا زمانی که VM deallocate شده باشد در دسترس نخواهد بود — وقتی دوباره به حالت زنده نیاز داشتید، آن را راه‌اندازی مجدد کنید:

      az vm deallocate -g "${RG}" -n "${VM_NAME}"
      az vm start -g "${RG}" -n "${VM_NAME}"   # restart later
      
    • وقتی Bastion لازم نیست، آن را حذف کنید و وقتی به دسترسی SSH نیاز داشتید دوباره ایجادش کنید. Bastion بزرگ‌ترین جزء هزینه است و آماده‌سازی آن فقط چند دقیقه طول می‌کشد.

    • اگر فقط به SSH مبتنی بر Portal نیاز دارید و تونل‌سازی CLI (az network bastion ssh) لازم ندارید، از Basic Bastion SKU (~$38/month) استفاده کنید.

    پاک‌سازی

    برای حذف همه منابعی که این راهنما ایجاد کرده است:

    az group delete -n "${RG}" --yes --no-wait
    

    این کار گروه منبع و همه چیز داخل آن را حذف می‌کند (VM، VNet، NSG، Bastion، IP عمومی).

    مراحل بعدی

    مرتبط