快速入门:在 Azure Stack Hub 中使用 Azure CLI 创建 Linux 服务器 VM

可使用 Azure CLI 创建 Ubuntu Server 20.04 LTS 虚拟机 (VM)。 在本文中,我们将创建和使用虚拟机。 本文还介绍以下操作:

  • 通过远程客户端连接到虚拟机。
  • 安装 NGINX Web 服务器并查看默认主页。
  • 清理未使用的资源。

先决条件

在开始之前,请确保满足以下先决条件:

  • Azure Stack Hub 市场中的 Linux 映像

    默认情况下,Azure Stack Hub 市场不包含 Linux 映像。 请让 Azure Stack Hub 操作员提供所需的 Ubuntu Server 20.04 LTS 映像。 操作员可以使用将市场项从 Azure 下载到 Azure Stack Hub 中的说明。

  • Azure Stack Hub 需要使用特定版本的 Azure CLI 来创建和管理其资源。 如果没有为 Azure Stack Hub 配置 Azure CLI,请通过 VPN 连接到基于 Windows 的外部客户端,并按照 安装和配置 Azure CLI 的说明进行作。

  • Windows 用户配置文件的 .ssh 目录中保存的名为 id_rsa.pub 的安全外壳 (SSH) 公钥。 有关创建 SSH 密钥的详细信息,请参阅 将 SSH 密钥对与 Azure Stack Hub 配合使用

创建资源组

资源组是一个逻辑容器,可以在其中部署和管理 Azure Stack Hub 资源。 在 Azure Stack Hub 集成系统中,运行 az group create 命令以创建资源组。

注释

我们在以下代码示例中为所有变量分配了值。 但是,你可以分配自己的值。

以下示例在本地位置创建名为 myResourceGroup 的资源组,其中包含随机后缀:

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export LOCATION="chinaeast2"
az group create --name $RESOURCE_GROUP --location $LOCATION

结果:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
  "location": "local",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

创建虚拟机

可以使用 az vm create 命令创建虚拟机。 以下示例创建名为 myVM 的 VM。 该示例用作 Demouser 管理员用户名。 将这些值更改为适合你的环境的值。

export VM_NAME="myVM$RANDOM_SUFFIX"
az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image "Ubuntu2204" \
  --admin-username "azureuser" \
  --assign-identity \
  --generate-ssh-keys \
  --public-ip-sku Standard \
  --location $LOCATION

结果:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myVMxxx",
  "location": "local",
  "name": "myVMxxx",
  "osProfile": {
    "computerName": "myVMxxx",
    "adminUsername": "Demouser"
  },
  "publicIpAddress": "x.x.x.x",
  "powerState": "VM running",
  "provisioningState": "Succeeded"
}

公共 IP 地址在参数中 PublicIpAddress 返回。 请记下该地址,供以后与虚拟机配合使用。

为网络流量打开端口 80

由于此虚拟机运行 IIS Web 服务器,因此必须打开端口 80 来处理互联网流量。 若要打开该端口,请使用 az vm open-port 命令:

az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME

结果:

{
  "endPort": 80,
  "name": "openPort80",
  "port": 80,
  "protocol": "Tcp",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroupxxx",
  "startPort": 80
}

使用 SSH 连接到虚拟机

从安装了 SSH 的客户端计算机连接到虚拟机。 如果在 Windows 客户端上工作,请使用 PuTTY 创建连接。 若要连接到虚拟机,可以使用 ssh 该命令。

安装 NGINX Web 服务器

若要更新包源并安装最新的 NGINX 包,请运行以下脚本:

output=$(az vm run-command invoke --resource-group $RESOURCE_GROUP --name $VM_NAME --command-id RunShellScript --scripts 'apt-get -y install nginx')
value=$(echo "$output" | jq -r '.value[0].message')
extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
echo "$extracted"

查看 NGINX 欢迎页

在虚拟机上安装 NGINX Web 服务器并打开端口 80 后,可通过虚拟机的公共 IP 地址访问 Web 服务器。 为此,请打开浏览器并转到 http://<public IP address>。 或者,可以使用 curl 命令查看 NGINX 欢迎页:

export PUBLIC_IP=$(az vm show -d -g $RESOURCE_GROUP -n $VM_NAME --query publicIps -o tsv)

output=$(az vm run-command invoke --resource-group $RESOURCE_GROUP --name $VM_NAME --command-id RunShellScript --scripts 'curl -v http://localhost')
value=$(echo "$output" | jq -r '.value[0].message')
extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
echo "$extracted"

结果:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
  body {
    width: 35em;
    margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif;
  }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

NGINX Web 服务器欢迎页

后续步骤

在本快速入门中,你已部署了一个带有 Web 服务器的基本 Linux 服务器虚拟机。 若要详细了解 Azure Stack Hub 虚拟机,请参阅 Azure Stack Hub 中虚拟机的注意事项