本教學課程說明如何將 .NET 網頁應用程式部署至 Compute Engine。
本教學課程適用於具備 Microsoft .NET 和 Compute Engine 基本知識的開發人員和 DevOps 工程師。
目標
將使用 .NET 6 並在 Linux 上執行的 ASP.NET Core 網頁應用程式,部署到單一 Compute Engine 執行個體。
本教學課程說明如何完成下列工作,達成目標:
- 部署 Compute Engine VM
- 設定負載平衡
- 部署 ASP.NET 應用程式
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
- 登入 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 VM
本節說明如何在 Compute Engine 上建立 Linux VM,或執行 Microsoft Internet Information Services (IIS) 網路伺服器的 Windows Server VM。
設定專案 ID 和 Compute Engine 區域的預設值。這有助於節省時間。
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
更改下列內容:
- 將
PROJECT_ID替換為專案 ID。 Google Cloud ZONE換成您將用於建立資源的區域名稱。如果您不確定該選用哪個區域,請使用地理位置距離您最近的區域。
例如:
gcloud config set project test-project-12345 gcloud config set compute/zone us-central1-a
- 將
建立 VM 執行個體:
如要建立 Linux VM,請按照下列步驟操作:
為 VM 執行個體建立開機指令碼。指令碼會在 VM 初始化期間執行,並安裝 .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建立 VM 執行個體,並使用
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
查看 VM 的序列埠輸出內容,監控初始化程序:
gcloud compute instances tail-serial-port-output clouddemo-1
等待約 5 分鐘,直到看到
Instance setup finished或Startup finished輸出內容,然後按下 Ctrl+C。此時,先決條件安裝作業已完成,VM 執行個體也已準備就緒。
設定負載平衡
如要透過網際網路提供 ASP.NET 應用程式,您必須使用 HTTPS 負載平衡器。如要將 VM 執行個體與負載平衡器建立關聯,請建立執行個體群組,並將這個執行個體群組指派給負載平衡器:
建立非代管執行個體群組,並新增 VM 執行個體:
gcloud compute instance-groups unmanaged create clouddemo-1 gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
建立健康狀態檢查,確認網路伺服器是否正在執行:
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
將部署套件複製到 VM:
將
publish資料夾的內容複製到 VM 的主目錄:gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
在 VM 上建立
/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 位址。您現在會看到示範應用程式和「This app is running on Compute Engine」(這個應用程式正在 Compute Engine 上執行) 標題。
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程而建立的專案。
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID
刪除個別資源
您必須個別刪除為專案建立的所有資源 (例如:執行個體群組、健康狀態檢查、後端服務、HTTP Proxy 和轉送規則)。您必須先刪除所有這些資源,才能刪除 VM 執行個體。
後續步驟
- 進一步瞭解如何在 Google 基礎架構上建立及執行虛擬機器。
- 請參閱「Google Cloud Well-Architected Framework」的最佳做法。
- 查看 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的 Cloud Architecture Center。