Hosting
Azure
أعِدّ جهازًا افتراضيًا بنظام Linux على 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 (يتناول هذا الدليل كيفية إنشاء زوج إذا لزم الأمر)
- نحو 20 إلى 30 دقيقة
تهيئة النشر
تسجيل الدخول إلى 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 عند الأولوية 100، ثم تُحظر جميع اتصالات SSH الأخرى عند الأولويتين 110 و120.
إنشاء الشبكة الافتراضية والشبكات الفرعية
أنشئ 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 خاصة بواجهة بطاقة الشبكة لأن NSG على مستوى الشبكة الفرعية تتولى الأمان بالفعل.
لتثبيت إصدار محدد من صورة Ubuntu بدلًا من latest، اعرض الإصدارات المتاحة أولًا:
az vm image list \ --publisher Canonical --offer ubuntu-24_04-lts \ --sku server --all -o tableإنشاء Azure Bastion
يوفّر Azure Bastion وصولًا مُدارًا عبر SSH من دون كشف عنوان 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 عادةً من 5 إلى 10 دقائق، لكنه قد يستغرق من 15 إلى 30 دقيقة في بعض المناطق.
تثبيت 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: نحو 140 دولارًا شهريًا
- الجهاز الافتراضي (
Standard_B2as_v2): نحو 55 دولارًا شهريًا
لتقليل التكاليف:
-
ألغِ تخصيص الجهاز الافتراضي عند عدم استخدامه. يؤدي ذلك إلى إيقاف فوترة الحوسبة (مع استمرار رسوم القرص). يتعذر الوصول إلى Gateway أثناء إلغاء التخصيص.
bash az vm deallocate -g "${RG}" -n "${VM_NAME}"az vm start -g "${RG}" -n "${VM_NAME}" # restart later -
احذف Bastion عندما لا تحتاج إليه، وأعِد إنشاءه عندما تحتاج إلى الوصول عبر SSH مرة أخرى؛ فهو أكبر مكوّن من حيث التكلفة ويستغرق توفيره بضع دقائق.
-
استخدم SKU الأساسية من Bastion (نحو 38 دولارًا شهريًا) إذا كنت تحتاج فقط إلى SSH عبر البوابة ولا تحتاج إلى إنشاء نفق عبر CLI (
az network bastion ssh).
التنظيف
احذف جميع الموارد التي أنشأها هذا الدليل:
az group delete -n "${RG}" --yes --no-waitيؤدي ذلك إلى إزالة مجموعة الموارد وكل ما بداخلها (الجهاز الافتراضي، وVNet، وNSG، وBastion، وعنوان IP العام).
الخطوات التالية
- إعداد قنوات المراسلة: القنوات
- إقران الأجهزة المحلية كعُقد: العُقد
- تهيئة Gateway: تهيئة Gateway
- مزيد من التفاصيل حول النشر على Azure باستخدام موفّر نموذج GitHub Copilot: OpenClaw على Azure باستخدام GitHub Copilot