將 ASP.NET 應用程式部署至 Compute Engine

本教學課程說明如何將 .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 的使用者可能符合免費試用期資格。

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

部署 Compute Engine VM

本節說明如何在 Compute Engine 上建立 Linux VM,或執行 Microsoft Internet Information Services (IIS) 網路伺服器的 Windows Server VM。

  1. 設定專案 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
    
  2. 建立 VM 執行個體:

    如要建立 Linux VM,請按照下列步驟操作:

    1. 為 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
      
    2. 建立 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
      
  3. 查看 VM 的序列埠輸出內容,監控初始化程序:

    gcloud compute instances tail-serial-port-output clouddemo-1
    

    等待約 5 分鐘,直到看到 Instance setup finishedStartup finished 輸出內容,然後按下 Ctrl+C。此時,先決條件安裝作業已完成,VM 執行個體也已準備就緒。

設定負載平衡

如要透過網際網路提供 ASP.NET 應用程式,您必須使用 HTTPS 負載平衡器。如要將 VM 執行個體與負載平衡器建立關聯,請建立執行個體群組,並將這個執行個體群組指派給負載平衡器:

  1. 建立非代管執行個體群組,並新增 VM 執行個體:

    gcloud compute instance-groups unmanaged create clouddemo-1
    gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
    
  2. 建立健康狀態檢查,確認網路伺服器是否正在執行:

    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
    
  3. 建立負載平衡器後端服務,來使用 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)
    
  4. 建立負載平衡器的前端:

    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
    
  5. 建立防火牆規則,允許負載平衡器將 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
    
  6. 查詢負載平衡器的 IP 位址:

    gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
    

    請記下 IP 位址。稍後需使用這項資訊。

部署 ASP.NET 應用程式

  1. 開啟 PowerShell 主控台。

  2. 下載並解壓縮或從 GitHub 複製範例存放區:

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    
  3. 建構部署套件:

    1. 切換至包含範例應用程式的目錄:

      cd dotnet-docs-samples\applications\clouddemo\netcore
      
    2. 建構解決方案:

      dotnet publish -c Release
      
  4. 將部署套件複製到 VM:

    1. publish 資料夾的內容複製到 VM 的主目錄:

      gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
      
    2. 使用 SSH 連線至 VM

    3. 在 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
      
    4. 將應用程式註冊為 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
      
  5. 在本機電腦上開啟網路瀏覽器,然後前往下列地址:

    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 執行個體。

後續步驟