本教程介绍如何将 .NET Web 应用部署到 Compute Engine。
本教程适用于对 Microsoft .NET 和 Compute Engine 有基本了解的开发者和 DevOps 工程师。
目标
将使用 .NET 6 并在 Linux 上运行的 ASP.NET Core Web 应用部署到单个 Compute Engine 实例。
本教程介绍了如何完成以下任务来实现目标:
- 部署 Compute Engine 虚拟机
- 设置负载均衡
- 部署 ASP.NET 应用
费用
在本文档中,您将使用的以下收费组件: Google Cloud
您可使用 价格计算器 根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
部署 Compute Engine 虚拟机
本部分介绍如何在 Compute Engine 上创建 Linux 虚拟机或运行 Microsoft Internet Information Services (IIS) Web 服务器 的 Windows Server 虚拟机。
为项目 ID 和 Compute Engine 地区设置默认值。这有助于节省时间。
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
替换以下内容:
- 将
PROJECT_ID替换为您的 Google Cloud 项目 ID。 - 将
ZONE替换为您将用于创建资源的区域的名称。如果不确定要选择哪个区域,请使用地理位置离您最近的区域。
例如:
gcloud config set project test-project-12345 gcloud config set compute/zone us-central1-a
- 将
创建一个虚拟机实例:
如需创建 Linux 虚拟机,请执行以下操作:
为虚拟机实例创建启动脚本 。该脚本在虚拟机初始化期间运行,并 安装 .NET 运行时:
"if ! dpkg-query -W aspnetcore-runtime-6.0 then curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0 fi " | Out-File -Encoding ASCII startup.sh创建虚拟机实例,并使用
startup.sh作为启动脚本:gcloud compute instances create clouddemo-1 ` --image-family debian-11 ` --image-project debian-cloud ` --machine-type n1-standard-2 ` --boot-disk-type pd-ssd ` --tags loadbalancer-backend ` --metadata-from-file startup-script=startup.sh
通过查看虚拟机的串行端口输出来监控其初始化过程:
gcloud compute instances tail-serial-port-output clouddemo-1
等待大约 5 分钟,直到您看到输出
Instance setup finished或Startup finished,然后按 Ctrl+C。此时,必备项的安装已完成,虚拟机实例已准备就绪,可以使用了。
设置负载均衡
如需通过互联网提供 ASP.NET 应用,您必须使用 HTTPS 负载均衡器。如需将虚拟机实例 与负载均衡器相关联,请创建一个实例组 并将此实例组分配给负载均衡器:
创建非托管实例组 并添加虚拟机实例:
gcloud compute instance-groups unmanaged create clouddemo-1 gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
创建健康检查,以检查 Web 服务器是否正在运行:
gcloud compute http-health-checks create clouddemo-health ` --check-interval 5s ` --unhealthy-threshold 2 ` --request-path / ` --port 5000 gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:5000创建一个负载均衡器后端服务,该服务使用您之前创建的 HTTP 健康检查和实例组:
gcloud compute backend-services create clouddemo-backend ` --http-health-checks clouddemo-health ` --port-name http ` --protocol HTTP ` --global gcloud compute backend-services add-backend clouddemo-backend ` --instance-group clouddemo-1 ` --global ` --instance-group-zone $(gcloud config get-value compute/zone)
为负载均衡器创建前端:
gcloud compute url-maps create clouddemo-map --default-service clouddemo-backend gcloud compute target-http-proxies create clouddemo-proxy --url-map clouddemo-map gcloud compute forwarding-rules create clouddemo-frontend --global --target-http-proxy clouddemo-proxy --ports 80
创建一条 防火墙规则,使负载均衡器 将 HTTP 请求发送到已使用
loadbalancer-backend标记注释的实例。gcloud compute firewall-rules create loadbalancer-backend ` --source-ranges "130.211.0.0/22,35.191.0.0/16" ` --target-tags loadbalancer-backend ` --allow tcp:80,tcp:5000
查找负载均衡器的 IP 地址:
gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
记下 IP 地址。以便稍后使用。
部署 ASP.NET 应用
打开 PowerShell 控制台。
下载并解压缩 或从 github 克隆示例存储库:
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
构建部署软件包:
切换到包含示例应用的目录:
cd dotnet-docs-samples\applications\clouddemo\netcore
构建解决方案:
dotnet publish -c Release
将部署软件包复制到虚拟机:
将
publish文件夹的内容复制到虚拟机上的主目录:gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
在虚拟机上,创建一个文件夹
/var/www/clouddemo,并将应用文件复制到此文件夹中:sudo mkdir -p /var/www/clouddemo sudo chown -R www-data:www-data /var/www/clouddemo sudo cp -r publish/* /var/www/clouddemo
将应用注册为 systemd 单元:
cat <<EOF > kestrel-clouddemo.service [Unit] Description=Cloud Demo ASP.NET app [Service] WorkingDirectory=/var/www/clouddemo ExecStart=/usr/bin/dotnet /var/www/clouddemo/CloudDemo.MvcCore.dll Restart=always Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 [Install] WantedBy=multi-user.target EOF sudo mv kestrel-clouddemo.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl start kestrel-clouddemo
在本地计算机上,打开网络浏览器并前往以下地址:
http://
LOADBALANCER_IP/将
LOADBALANCER_IP替换为您在部署负载均衡器后获得的 IP 地址。现在,您会看到演示应用以及标题“此应用在 Compute Engine 上运行” 。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
若要避免产生费用,最简单的方法是删除您为本教程创建的项目。
删除项目: Google Cloud
gcloud projects delete PROJECT_ID
删除各个资源
您需要单独删除针对项目创建的所有资源(例如:实例组、健康检查、后端服务、HTTP 代理和转发规则)。在删除所有这些资源之前,您无法删除虚拟机实例。
后续步骤
- 详细了解如何在 Google 基础架构上创建和运行虚拟机。
- 查看 Google Cloud Well-Architected Framework 中的最佳实践。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。 查看我们的 Cloud 架构中心。