إنشاء الأجهزة الافتراضية الخاصة التي تعمل بنظام تشغيل Linux باستخدام Azure CLI

ينطبق على: ✔️ أجهزة Linux الظاهرية

لإنشاء جهاز ظاهري بسرعة في Azure، يمكنك استخدام أمر Azure CLI واحد يستخدم القيم الافتراضية لإنشاء أي موارد دعم مطلوبة. يتم إنشاء موارد مثل الشبكة الظاهرية وعنوان IP العام وقواعد مجموعة أمان الشبكة تلقائياً. لمزيد من التحكم في بيئتك في استخدام الإنتاج، يمكنك إنشاء هذه الموارد مسبقاً ثم إضافة الأجهزة الظاهرية إليها. ترشدك هذه المقالة إلى كيفية إنشاء جهاز ظاهري وكل من الموارد الداعمة واحدة تلو الأخرى.

تأكد من تثبيت أحدث إصدار من Azure CLI وتسجيل الدخول إلى حساب Azure باستخدام az login.

في الأمثلة التالية، استبدل أسماء معلمات الأمثلة بالقيم الخاصة بك. تتضمن أسماء المعلمات النموذجية myResourceGroup و myVnet و myVM.

إنشاء مجموعة الموارد

مجموعة موارد Azure هي حاوية منطقية يتم بها نشر موارد Azure وإدارتها. يجب إنشاء مجموعة موارد قبل جهاز ظاهري ودعم موارد الشبكة الظاهرية. أنشئ مجموعة موارد باستخدام az group create. في المثال التالي، سيتم إنشاء مجموعة موارد باسم myResourceGroup في موقع eastus:

az group create --name myResourceGroup --location eastus

بشكل افتراضي، يكون إخراج أوامر Azure CLI في JSON (JavaScript Object Notation). لتغيير الإخراج الافتراضي إلى قائمة أو جدول، على سبيل المثال، استخدم az config set core.output=table. يمكنك أيضاً إضافة --output إلى أي أمر لتغييره لمرة واحدة في تنسيق الإخراج. المثال التالي هو إخراج JSON من الأمر az group create:

{
  "id": "/subscriptions/guid/resourceGroups/myResourceGroup",
  "location": "eastus",
  "name": "myResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

إنشاء شبكة ظاهرية وشبكة فرعية

بعد ذلك تقوم بإنشاء شبكة ظاهرية في Azure وشبكة فرعية يمكنك من خلالها إنشاء الأجهزة الظاهرية الخاصة بك. استخدم az network vnet create لإنشاء شبكة ظاهرية باسم myVnet باستخدام بادئة العنوان 192.168.0.0/16. يمكنك أيضاً إضافة شبكة فرعية باسم mySubnet مع بادئة العنوان 192.168.1.0/24:

az network vnet create \
    --resource-group myResourceGroup \
    --name myVnet \
    --address-prefix 192.168.0.0/16 \
    --subnet-name mySubnet \
    --subnet-prefix 192.168.1.0/24

يوضح الإخراج أن الشبكة الفرعية يتم إنشاؤها منطقياً داخل الشبكة الظاهرية:

{
  "addressSpace": {
    "addressPrefixes": [
      "192.168.0.0/16"
    ]
  },
  "dhcpOptions": {
    "dnsServers": []
  },
  "etag": "W/\"e95496fc-f417-426e-a4d8-c9e4d27fc2ee\"",
  "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet",
  "location": "eastus",
  "name": "myVnet",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "resourceGuid": "ed62fd03-e9de-430b-84df-8a3b87cacdbb",
  "subnets": [
    {
      "addressPrefix": "192.168.1.0/24",
      "etag": "W/\"e95496fc-f417-426e-a4d8-c9e4d27fc2ee\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet",
      "ipConfigurations": null,
      "name": "mySubnet",
      "networkSecurityGroup": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "resourceNavigationLinks": null,
      "routeTable": null
    }
  ],
  "tags": {},
  "type": "Microsoft.Network/virtualNetworks",
  "virtualNetworkPeerings": null
}

بإنشاء عنوان IP عام

أنشئ عنوان IP عامًا باستخدام az network public-ip create. يُمكّنك عنوان IP العام هذا من الاتصال بالأجهزة الظاهرية من الإنترنت. نظراً لأن العنوان الافتراضي ديناميكي، يمكنك إنشاء إدخال DNS مسمى باستخدام المعلمة --domain-name-label. ينشئ المثال التالي عنوان IP عاماً باسم myPublicIP باسم DNS الخاص بـ mypublicdns. نظراً لأن اسم DNS يجب أن يكون فريداً، يمكنك توفير اسم DNS الفريد الخاص بك:

az network public-ip create \
    --resource-group myResourceGroup \
    --name myPublicIP \
    --dns-name mypublicdns

إخراج:

{
  "publicIp": {
    "dnsSettings": {
      "domainNameLabel": "mypublicdns",
      "fqdn": "mypublicdns.eastus.cloudapp.azure.com",
      "reverseFqdn": null
    },
    "etag": "W/\"2632aa72-3d2d-4529-b38e-b622b4202925\"",
    "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/myPublicIP",
    "idleTimeoutInMinutes": 4,
    "ipAddress": null,
    "ipConfiguration": null,
    "location": "eastus",
    "name": "myPublicIP",
    "provisioningState": "Succeeded",
    "publicIpAddressVersion": "IPv4",
    "publicIpAllocationMethod": "Dynamic",
    "resourceGroup": "myResourceGroup",
    "resourceGuid": "4c65de38-71f5-4684-be10-75e605b3e41f",
    "tags": null,
    "type": "Microsoft.Network/publicIPAddresses"
  }
}

إنشاء مجموعة أمان الشبكة

للتحكم في تدفق نسبة استخدام الشبكة داخل وخارج الأجهزة الظاهرية الخاصة بك، قم بتطبيق مجموعة أمان شبكة على NIC ظاهرية أو شبكة فرعية. يستخدم المثال التالي az network nsg create لإنشاء مجموعة أمان شبكة باسم myNetworkSecurityGroup:

az network nsg create \
    --resource-group myResourceGroup \
    --name myNetworkSecurityGroup

يمكنك تحديد القواعد التي تسمح بنسبة استخدام شبكة معينة أو رفضها. للسماح بالاتصالات الواردة على المنفذ 22 (لتمكين الوصول إلى SSH، قم بإنشاء قاعدة واردة باستخدام az network nsg rule create. يُنشئ المثال التالي قاعدة مجموعة أمان شبكة باسم myNetworkSecurityGroupRuleSSH:

az network nsg rule create \
    --resource-group myResourceGroup \
    --nsg-name myNetworkSecurityGroup \
    --name myNetworkSecurityGroupRuleSSH \
    --protocol tcp \
    --priority 1000 \
    --destination-port-range 22 \
    --access allow

للسماح بالاتصالات الواردة على المنفذ 80 (من أجل نسبة استخدام الشبكة في الويب)، أضف قاعدة أخرى لمجموعة أمان الشبكة. يُنشئ المثال التالي قاعدة مجموعة أمان شبكة باسم myNetworkSecurityGroupRuleHTTP:

az network nsg rule create \
    --resource-group myResourceGroup \
    --nsg-name myNetworkSecurityGroup \
    --name myNetworkSecurityGroupRuleWeb \
    --protocol tcp \
    --priority 1001 \
    --destination-port-range 80 \
    --access allow

افحص مجموعة أمان الشبكة والقواعد باستخدام az network nsg show:

az network nsg show --resource-group myResourceGroup --name myNetworkSecurityGroup

إخراج:

{
  "defaultSecurityRules": [
    {
      "access": "Allow",
      "description": "Allow inbound traffic from all VMs in VNET",
      "destinationAddressPrefix": "VirtualNetwork",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowVnetInBound",
      "name": "AllowVnetInBound",
      "priority": 65000,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "VirtualNetwork",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow inbound traffic from azure load balancer",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowAzureLoadBalancerInBou",
      "name": "AllowAzureLoadBalancerInBound",
      "priority": 65001,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "AzureLoadBalancer",
      "sourcePortRange": "*"
    },
    {
      "access": "Deny",
      "description": "Deny all inbound traffic",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/DenyAllInBound",
      "name": "DenyAllInBound",
      "priority": 65500,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow outbound traffic from all VMs to all VMs in VNET",
      "destinationAddressPrefix": "VirtualNetwork",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowVnetOutBound",
      "name": "AllowVnetOutBound",
      "priority": 65000,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "VirtualNetwork",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow outbound traffic from all VMs to Internet",
      "destinationAddressPrefix": "Internet",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowInternetOutBound",
      "name": "AllowInternetOutBound",
      "priority": 65001,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    },
    {
      "access": "Deny",
      "description": "Deny all outbound traffic",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/DenyAllOutBound",
      "name": "DenyAllOutBound",
      "priority": 65500,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    }
  ],
  "etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
  "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup",
  "location": "eastus",
  "name": "myNetworkSecurityGroup",
  "networkInterfaces": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "resourceGuid": "47a9964e-23a3-438a-a726-8d60ebbb1c3c",
  "securityRules": [
    {
      "access": "Allow",
      "description": null,
      "destinationAddressPrefix": "*",
      "destinationPortRange": "22",
      "direction": "Inbound",
      "etag": "W/\"9e344b60-0daa-40a6-84f9-0ebbe4a4b640\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/securityRules/myNetworkSecurityGroupRuleSSH",
      "name": "myNetworkSecurityGroupRuleSSH",
      "priority": 1000,
      "protocol": "Tcp",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": null,
      "destinationAddressPrefix": "*",
      "destinationPortRange": "80",
      "direction": "Inbound",
      "etag": "W/\"9e344b60-0daa-40a6-84f9-0ebbe4a4b640\"",
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/securityRules/myNetworkSecurityGroupRuleWeb",
      "name": "myNetworkSecurityGroupRuleWeb",
      "priority": 1001,
      "protocol": "Tcp",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    }
  ],
  "subnets": null,
  "tags": null,
  "type": "Microsoft.Network/networkSecurityGroups"
}

إنشاء بطاقة واجهة شبكة ظاهرية

تتوفر بطاقات واجهة الشبكة الظاهرية (NICs) برمجياً لأنه يمكنك تطبيق القواعد على استخدامها. بناءً على حجم الجهاز الظاهري، يمكنك إرفاق العديد من بطاقات واجهة الشبكة الافتراضية بجهاز ظاهري. في الأمر az network nic create التالي، يمكنك إنشاء بطاقة واجهة شبكة باسم myNic وإقرانه بمجموعة أمان الشبكة. يرتبط عنوان IP العام myPublicIP أيضاً ببطاقة واجهة الشبكة الظاهرية.

az network nic create \
    --resource-group myResourceGroup \
    --name myNic \
    --vnet-name myVnet \
    --subnet mySubnet \
    --public-ip-address myPublicIP \
    --network-security-group myNetworkSecurityGroup

إخراج:

{
  "NewNIC": {
    "dnsSettings": {
      "appliedDnsServers": [],
      "dnsServers": [],
      "internalDnsNameLabel": null,
      "internalDomainNameSuffix": "brqlt10lvoxedgkeuomc4pm5tb.bx.internal.cloudapp.net",
      "internalFqdn": null
    },
    "enableAcceleratedNetworking": false,
    "enableIpForwarding": false,
    "etag": "W/\"04b5ab44-d8f4-422a-9541-e5ae7de8466d\"",
    "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic",
    "ipConfigurations": [
      {
        "applicationGatewayBackendAddressPools": null,
        "etag": "W/\"04b5ab44-d8f4-422a-9541-e5ae7de8466d\"",
        "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic/ipConfigurations/ipconfig1",
        "loadBalancerBackendAddressPools": null,
        "loadBalancerInboundNatRules": null,
        "name": "ipconfig1",
        "primary": true,
        "privateIpAddress": "192.168.1.4",
        "privateIpAddressVersion": "IPv4",
        "privateIpAllocationMethod": "Dynamic",
        "provisioningState": "Succeeded",
        "publicIpAddress": {
          "dnsSettings": null,
          "etag": null,
          "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/myPublicIP",
          "idleTimeoutInMinutes": null,
          "ipAddress": null,
          "ipConfiguration": null,
          "location": null,
          "name": null,
          "provisioningState": null,
          "publicIpAddressVersion": null,
          "publicIpAllocationMethod": null,
          "resourceGroup": "myResourceGroup",
          "resourceGuid": null,
          "tags": null,
          "type": null
        },
        "resourceGroup": "myResourceGroup",
        "subnet": {
          "addressPrefix": null,
          "etag": null,
          "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet",
          "ipConfigurations": null,
          "name": null,
          "networkSecurityGroup": null,
          "provisioningState": null,
          "resourceGroup": "myResourceGroup",
          "resourceNavigationLinks": null,
          "routeTable": null
        }
      }
    ],
    "location": "eastus",
    "macAddress": null,
    "name": "myNic",
    "networkSecurityGroup": {
      "defaultSecurityRules": null,
      "etag": null,
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup",
      "location": null,
      "name": null,
      "networkInterfaces": null,
      "provisioningState": null,
      "resourceGroup": "myResourceGroup",
      "resourceGuid": null,
      "securityRules": null,
      "subnets": null,
      "tags": null,
      "type": null
    },
    "primary": null,
    "provisioningState": "Succeeded",
    "resourceGroup": "myResourceGroup",
    "resourceGuid": "b3dbaa0e-2cf2-43be-a814-5cc49fea3304",
    "tags": null,
    "type": "Microsoft.Network/networkInterfaces",
    "virtualMachine": null
  }
}

إنشاء مجموعة قابلية وصول

تساعد مجموعات قابلية الوصول في نشر الأجهزة الظاهرية عبر مجالات الأعطال وتحديث المجالات. على الرغم من أنك تقوم بإنشاء جهاز ظاهري واحد فقط في الوقت الحالي، فمن أفضل الممارسات استخدام مجموعات قابلية الوصول لتسهيل التوسع في المستقبل.

تحدد مجالات الخطأ مجموعة من الأجهزة الظاهرية التي تشترك في مصدر طاقة مشترك ومحول شبكة. بشكل افتراضي، يتم فصل الأجهزة الظاهرية التي تم تكوينها ضمن مجموعة قابلية الوصول الخاصة بك عبر ما يصل إلى ثلاثة مجالات خطأ. لا يؤثر حدوث مشكلة في الأجهزة في أحد مجالات الخطأ هذه على كل جهاز ظاهري يشغّل تطبيقك.

تشير مجالات التحديث إلى مجموعات من الأجهزة الظاهرية والأجهزة الفعلية الأساسية التي يمكن إعادة تشغيلها في نفس الوقت. أثناء الصيانة المخطط لها، قد لا يكون الترتيب الذي تتم به إعادة تشغيل مجالات التحديث متسلسلاً، ولكن تتم إعادة تشغيل مجال تحديث واحد فقط في المرة الواحدة.

يقوم Azure تلقائياً بتوزيع الأجهزة الظاهرية عبر الأعطال وتحديث المجالات عند وضعها في مجموعة قابلية وصول. لمزيد من المعلومات، راجع إدارة قابلية وصول الأجهزة الظاهرية.

إنشاء مجموعة قابلية الوصول باستخدام az vm availability-set create. ينشئ المثال التالي مجموعة توفر باسم myAvailabilitySet:

az vm availability-set create \
    --resource-group myResourceGroup \
    --name myAvailabilitySet

ملاحظات الإخراج لمجالات الخطأ وتحديث المجالات:

{
  "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAvailabilitySet",
  "location": "eastus",
  "managed": null,
  "name": "myAvailabilitySet",
  "platformFaultDomainCount": 2,
  "platformUpdateDomainCount": 5,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": null,
    "managed": true,
    "tier": null
  },
  "statuses": null,
  "tags": {},
  "type": "Microsoft.Compute/availabilitySets",
  "virtualMachines": []
}

قم بإنشاء جهاز ظاهري

لقد أنشأت موارد الشبكة لدعم الأجهزة الظاهرية التي يمكن الوصول إليها عبر الإنترنت. الآن قم بإنشاء جهاز ظاهري وتأمينه باستخدام مفتاح SSH. في هذا المثال، أنشئ جهاز ظاهري يعمل بنظام تشغيل Ubuntu استناداً إلى أحدث LTS. يمكنك العثور على صور إضافية باستخدام az vm image list، كما هو موضح في العثور على صور أجهزة Azure الظاهرية.

حدد مفتاح SSH لاستخدامه للمصادقة. إذا لم يكن لديك مفاتيح SSH عامة مزدوجة، فيمكنك إنشائها أو استخدام المعلمة --generate-ssh-keys لإنشائها نيابة عنك. إذا كان لديك بالفعل مفتاح مزدوج، فستستخدم هذه المعلمة المفاتيح الحالية في ~/.ssh.

أنشئ الجهاز الظاهري عن طريق جمع جميع الموارد والمعلومات باستخدام الأمر az vm create. ينشئ المثال التالي الجهاز الظاهري باسمmyVM:

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --location eastus \
    --availability-set myAvailabilitySet \
    --nics myNic \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

SSH إلى الجهاز الظاهري الخاص بك مع إدخال DNS الذي قدمته عند إنشاء عنوان IP العام. يظهر هذا fqdn في الإخراج أثناء إنشاء الجهاز الظاهري:

{
  "fqdns": "mypublicdns.eastus.cloudapp.azure.com",
  "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "eastus",
  "macAddress": "00-0D-3A-13-71-C8",
  "powerState": "VM running",
  "privateIpAddress": "192.168.1.5",
  "publicIpAddress": "13.90.94.252",
  "resourceGroup": "myResourceGroup"
}
ssh azureuser@mypublicdns.eastus.cloudapp.azure.com

إخراج:

The authenticity of host 'mypublicdns.eastus.cloudapp.azure.com (13.90.94.252)' can't be established.
ECDSA key fingerprint is SHA256:SylINP80Um6XRTvWiFaNz+H+1jcrKB1IiNgCDDJRj6A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mypublicdns.eastus.cloudapp.azure.com,13.90.94.252' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.11.0-1016-azure x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    https://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

azureuser@myVM:~$

يمكنك تثبيت NGINX ورؤية تدفق نسبة استخدام الشبكة إلى الجهاز الظاهري. يمكنك تثبيت NGINX على النحو التالي:

sudo apt-get install -y nginx

لرؤية موقع NGINX الافتراضي قيد التنفيذ، افتح متصفح الويب وأدخل FQDN:

موقع NGINX الافتراضي على جهازك الظاهري

تصدير قالب

ماذا لو كنت ترغب الآن في إنشاء بيئة تطوير إضافية بنفس المعلمات، أو بيئة تشغيل تطابقها؟ يستخدم Resource Manager قوالب JSON التي تحدد جميع المعلمات لبيئتك. يمكنك إنشاء بيئات كاملة من خلال الرجوع إلى قالب JSON هذا. يمكنك إنشاء قوالب JSON يدوياً أو تصدير بيئة حالية لإنشاء قالب JSON لك. استخدم az group export لتصدير مجموعة الموارد الخاصة بك كما يلي:

az group export --name myResourceGroup > myResourceGroup.json

يقوم هذا الأمر بإنشاء الملف myResourceGroup.json في الدليل المشغَّل الحالي. عند إنشاء بيئة من هذا القالب، تتم مطالبتك بكافة أسماء الموارد. يمكنك ملء هذه الأسماء في ملف القالب الخاص بك عن طريق إضافة المعلمة --include-parameter-default-value إلى الأمر az group export. يمكنك تحرير قالب JSON لتحديد أسماء الموارد، أو إنشاء ملف parameters.json يحدد أسماء الموارد.

لإنشاء بيئة من القالب الخاص بك، استخدم az deployment group create كما يلي:

az deployment group create \
    --resource-group myNewResourceGroup \
    --template-file myResourceGroup.json

قد ترغب في قراءة مزيد من المعلومات حول كيفية التوزيع من القوالب. تعرف على كيفية تحديث البيئات بشكل تزايدي واستخدام ملف المعلمات والوصول إلى القوالب من موقع تخزين واحد.

الخطوات التالية

أنت الآن على استعداد لبدء العمل مع العديد من مكونات الشبكات والأجهزة الظاهرية. يمكنك استخدام بيئة العينة هذه لإنشاء تطبيقك باستخدام المكونات الأساسية المقدمة هنا.