[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 程序跑起来,明天我们将用比较正式的方法对这个流程做修改


<<:  DAY11 MongoDB 深入聚合与常见问题

>>:  Laravel Queue Job:深入理解 timeout 的运作

视觉化KBARS(4)-controller

今天要来写controller的部分, (1)controller新称showOneMinKbar方...

【Day 03】- 打针!打针!从 R0 注入的那件事!

Agenda 资安宣言 测试环境与工具 学习目标 技术原理与程序码 References 下期预告 ...

Android Studio初学笔记-Day12-Spinner

Spinner选单 Spinner有快速选择选单中项目的功能,是个很常用的选择工具,不过spinne...

DAY06 - [CSS] 用 linear-gradient 做出 三边、四边型效果

今日文章目录 > - 应用情境 > - CSS原理练习 > - 应用情境练习 &...

DAY11 Kotlin基础 条件语句

国小造句最常见的题目就是:如果...就...,如果被打就会痛。对於程序语言也是有这样的语法给你作使用...