Hosting
Azure
یک ماشین مجازی لینوکس Azure را با Azure CLI راهاندازی کنید، سختسازی گروه امنیت شبکه (NSG) را اعمال کنید، Azure Bastion را برای دسترسی SSH پیکربندی کنید و OpenClaw را نصب کنید.
کارهایی که انجام خواهید داد
- ایجاد منابع شبکه Azure (VNet، زیرشبکهها و NSG) و منابع محاسباتی با Azure CLI
- اعمال قواعد NSG بهگونهای که SSH ماشین مجازی فقط از طریق Azure Bastion مجاز باشد
- استفاده از Azure Bastion برای دسترسی SSH (بدون IP عمومی روی ماشین مجازی)
- نصب OpenClaw با اسکریپت نصب
- بررسی Gateway
پیشنیازها
- اشتراک Azure با مجوز ایجاد منابع محاسباتی و شبکه
- نصب بودن Azure CLI (به مراحل نصب Azure CLI مراجعه کنید)
- یک جفت کلید SSH (در صورت نیاز، این راهنما نحوه ایجاد آن را توضیح میدهد)
- حدود ۲۰ تا ۳۰ دقیقه زمان
پیکربندی استقرار
ورود به Azure CLI
az loginaz extension add -n sshافزونه ssh برای تونلسازی بومی SSH در Azure Bastion ضروری است.
ثبت ارائهدهندگان منابع موردنیاز (یکبار)
az provider register --namespace Microsoft.Computeaz provider register --namespace Microsoft.Networkثبت را بررسی کنید؛ منتظر بمانید تا هر دو مقدار Registered را نشان دهند.
az provider show --namespace Microsoft.Compute --query registrationState -o tsvaz 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-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "you@example.com"SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"انتخاب اندازه ماشین مجازی و اندازه دیسک سیستمعامل
VM_SIZE="Standard_B2as_v2"OS_DISK_SIZE_GB=64- برای استفاده سبک، با اندازه کوچکتر شروع کنید و بعداً آن را افزایش دهید.
- برای خودکارسازی سنگینتر، کانالهای بیشتر یا بارهای کاری بزرگتر مدل و ابزار، از vCPU، RAM و فضای دیسک بیشتری استفاده کنید.
- اگر اندازهای در منطقه یا سهمیه اشتراک شما در دسترس نیست، نزدیکترین SKU موجود را انتخاب کنید.
اندازههای ماشین مجازی موجود در منطقه هدف را فهرست کنید:
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 به ماشین مجازی متصل شود.
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 22قواعد بر اساس اولویت و ابتدا از کمترین عدد ارزیابی میشوند: ترافیک Bastion با اولویت ۱۰۰ مجاز است و سپس تمام ترافیک SSH دیگر با اولویتهای ۱۱۰ و ۱۲۰ مسدود میشود.
ایجاد شبکه مجازی و زیرشبکهها
VNet را همراه با زیرشبکه ماشین مجازی (با 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 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}"ایجاد ماشین مجازی
به ماشین مجازی هیچ 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، ابتدا نسخههای موجود را فهرست کنید:
az vm image list \ --publisher Canonical --offer ubuntu-24_04-lts \ --sku server --all -o tableایجاد Azure Bastion
Azure Bastion بدون در معرض اینترنت قرار دادن IP عمومی روی ماشین مجازی، دسترسی مدیریتشده SSH را فراهم میکند. برای استفاده از az network bastion ssh مبتنی بر CLI، به SKU استاندارد با تونلسازی فعال نیاز است.
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 به ماشین مجازی از طریق 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 (در پوسته ماشین مجازی)
curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.shbash /tmp/install.shrm -f /tmp/install.shبرنامه نصب، در صورت موجود نبودن Node و وابستگیها، آنها را نصب میکند، سپس OpenClaw را نصب و فرایند راهاندازی اولیه را اجرا میکند. برای جزئیات به نصب مراجعه کنید.
بررسی Gateway
پس از تکمیل راهاندازی اولیه:
openclaw gateway statusاگر سازمان شما از قبل مجوزهای GitHub Copilot دارد، میتوانید هنگام راهاندازی اولیه، ارائهدهنده GitHub Copilot را بهجای یک کلید API جداگانه برای مدل انتخاب کنید. به ارائهدهنده GitHub Copilot مراجعه کنید.
ملاحظات هزینه
هزینههای تقریبی ماهانه (قیمتهای فعلی را در Azure Pricing Calculator بررسی کنید، زیرا نرخها بر اساس منطقه متفاوتاند و با گذشت زمان تغییر میکنند):
- SKU استاندارد Azure Bastion: حدود ۱۴۰ دلار در ماه
- ماشین مجازی (
Standard_B2as_v2): حدود ۵۵ دلار در ماه
برای کاهش هزینهها:
-
وقتی از ماشین مجازی استفاده نمیکنید، تخصیص آن را آزاد کنید. با این کار صورتحساب محاسباتی متوقف میشود (هزینه دیسک همچنان باقی میماند). در مدت آزاد بودن تخصیص، Gateway در دسترس نیست.
bash 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) نیازی ندارید، از SKU پایه Bastion (حدود ۳۸ دلار در ماه) استفاده کنید.
پاکسازی
تمام منابع ایجادشده با این راهنما را حذف کنید:
az group delete -n "${RG}" --yes --no-waitاین فرمان گروه منابع و تمام موارد داخل آن (ماشین مجازی، VNet، NSG، Bastion و IP عمومی) را حذف میکند.
مراحل بعدی
- راهاندازی کانالهای پیامرسانی: کانالها
- جفتسازی دستگاههای محلی بهعنوان Node: Nodeها
- پیکربندی Gateway: پیکربندی Gateway
- جزئیات بیشتر درباره استقرار Azure با ارائهدهنده مدل GitHub Copilot: OpenClaw در Azure با GitHub Copilot