iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
Modern Web

網站一條龍 - 從架站到前端系列 第 11

[Day11] 在 GCP 上建立 VM 與佈署 API 程式

今天我們要來介紹如何在 GCP 上建立 VM 並佈署我們的 API 程式。

建立 VM

首先點選功能選的 Compute Engine -> VM 執行個體。第一次進到這個頁面會詢問我們是否要啟用這個 API,點選啟用,之後之後進到 Compute Engine 的主頁。(啟用 API 會花一點時間,啟用完畢之後就很快了)

接著在 "VM 執行個體" 分頁下點選 "建立執行個體"

https://ithelp.ithome.com.tw/upload/images/20210911/20140664CmRHFDnav5.png

接著要設定我們的 VM。以下列出不是使用預設設定的區塊。

  1. 選擇區域 - 如果要省錢可以選美東(us-east)或美中(us-central),要快當然就是選我們台灣啦(asia-east-1)。不過既然我們還有試用的扣打,那就選台灣吧!
  2. 機器設定 - 這個區段可以根據我們的需求選擇不同等級的配備,還能針對 CPU 或記憶體選擇特化的配備。普通的用途我們選 E2 系列就好,想省錢可以選 N1 的 f1-micro,但它配備真的很低。
  3. 開機磁碟 - 選擇作業系統。因為筆者工作以來接觸的 Linux 都是 CentOS 7,所以本系列文會使用 CentOS 7 當範例。系列文中的指令可能在其他 OS 中無法運作,必須 Google 找各自 OS 對應的指令。
  4. 防火牆 - 允許 HTTP 與 HTTPS 流量
  5. 防刪除功能 - 勾選這個選項可以讓 VM 無法直接被刪除,直到取消這個選項。筆者曾經手滑刪到自己幫公司架的 Jenkins CI/CD VM,當時真的欲哭無淚...
  6. 管理安全性 - 可以在這邊貼上 SSH 的 public key,以後就能用特定的 SSH key 連線到這個 VM

設定完之後,點選建立,再等它跑一下,我們的 VM 就建好了。GCP 會把我們導向 VM 列表的頁面,我們可以在這邊看到所有 VM 的資訊。

https://ithelp.ithome.com.tw/upload/images/20210911/20140664rQZij2d2hj.png

點選 "連線" 底下的 SSH 下拉選單,可以直接用瀏覽器開一個 SSH terminal 操作 VM
https://ithelp.ithome.com.tw/upload/images/20210911/20140664JJusny6nIY.png
https://ithelp.ithome.com.tw/upload/images/20210911/20140664VUQ0RhBxhO.png

當然也可以用第三方軟體搭配剛剛設定的 SSH key 連到這個 VM
https://ithelp.ithome.com.tw/upload/images/20210911/20140664soLjgNIHlS.png

2021-09-14 更新

GCP 的 VM 預設會使用浮動的外部 IP,可以參考這篇文章把 VM 的 IP 設為固定。

佈署程式

佈署程式常見的方法有

  1. 建立一個完整的 CI/CD 框架,例如 Azure DevOps, Jenkins
  2. 在本機把程式 build 好,然後透過 FTP 或其他方式上傳到 VM,再執行這些 build 好的檔案
  3. 從 Git pull 原始碼到 VM 上,然後在 VM 上 build 程式再執行

筆者這裡選擇最簡單的方法 3。

首先,我們必須在 VM 上安裝需要的軟體

  • Git
    sudo yum install git
  • .NET SDK
    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    sudo yum install dotnet-sdk-5.0

接著,建立一個放我們 API 專案的資料夾
sudo mkdir /ironman
sudo mkdir /ironman/dotnet_api

再從 git 上 clone 原始碼
cd /ironman/dotnet_api # 跳到 dotnet_api 資料夾
sudo git clone https://github.com/eric-yijuin-lin/IThomeIronman.git

在 build 專案之前,我們先把之前的 UserServiceWithFile 還原成 UserService(寫死的 List)省去處理檔案路徑的麻煩。可以在程式進版控之前先改,或者 clone 下來之後在 VM 上改,如果要在 VM 上改可以參考以下步驟:

  1. 用 vim 打開 Startup.cs 。
    sudo vi /ironman/dotnet_api/IThomeIronman/Ithome_2021_API/Startup.cs
  2. i 進入編輯模式(底下會出現 -- INSERT -- 字樣)
  3. 把註冊 Service 的地方改成
    services.AddScoped<IUserCRUD, UserService>();
  4. 先按 Esc 離開編輯模式,然後輸入 :wq + Enter 完成編輯
  5. 如果不小心把檔案改爛了,可以先按 Esc 離開編輯模式,然後輸入 :q! + Enter 放棄編輯

最後,輸入下面這 「一行」 指令,就能看到我們的 API 程式跑起來了。

sudo dotnet run --urls="https://0.0.0.0:443" --project /ironman/dotnet_api/IThomeIronman/Ithome_2021_API/Ithome_2021_API.csproj

https://ithelp.ithome.com.tw/upload/images/20210911/20140664BwgoGi2FD5.png

上面指令中 --url 參數指定監聽 443 port 的 https 連線, --project 參數告訴 .NET SDK 要 build + 執行哪個專案。這個指令不是很好的做法,它只是暫時測試用,之後我們會再修改佈署相關的工作。

連線到我們的 API 程式

回到 GCP 的 VM 列表,複製外部 IP
https://ithelp.ithome.com.tw/upload/images/20210911/20140664ZQbmk5tuJA.png

然後到瀏覽器輸入 https://外部IP/api/User 就能看到我們的 API Server 已經可以讓外部連線!
不過由於 dotnet 內建的 SSL 憑證是開發者憑證,瀏覽器不會信任它所以會跳出警告。程式自己寫的,可以安心的點選進階 -> 仍要前往。

https://ithelp.ithome.com.tw/upload/images/20210911/20140664u3iMnrTvkl.png

今天我們用了滿多偷懶的方式,目的是用最簡單的方法把 API 程式跑起來,明天我們將用比較正式的方法對這個流程做修改


上一篇
[Day10] Google Cloud Platform 簡介
下一篇
[Day12] 讓 Linux 的 systemd 幫我們管理 API 程式
系列文
網站一條龍 - 從架站到前端33

尚未有邦友留言

立即登入留言