本教程介绍如何将 .NET Web 应用部署到 Compute Engine。
本教程适用于对 Microsoft .NET 和 Compute Engine 有基本了解的开发者和 DevOps 工程师。
目标
将使用 .NET 6 并在 Linux 上运行的 ASP.NET Core Web 应用部署到单个 Compute Engine 实例。
本教程介绍了如何完成以下任务来实现目标:
- 部署 Compute Engine 虚拟机
- 设置负载均衡
- 部署 ASP.NET 应用
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
部署 Compute Engine 虚拟机
本部分介绍了如何创建在 Compute Engine 上运行 Microsoft Internet Information Services (IIS) Web 服务器的 Linux 虚拟机或 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
创建防火墙规则,以允许负载均衡器向已使用
loadbalancer-backend
标记添加注解的实例发送 HTTP 请求。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
将应用注册为系统单元:
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 上运行。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
若要避免产生费用,最简单的方法是删除您为本教程创建的项目。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
删除各个资源
您需要逐个删除为项目创建的所有资源(例如实例组、健康检查、后端服务、http 代理和转发规则)。只有在删除所有这些资源之后,您才能删除虚拟机实例。
后续步骤
- 详细了解如何在 Google 基础架构上创建并运行虚拟机。
- 查看 Google Cloud 架构框架中的最佳实践。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud Architecture Center。