小白自学云服务简单粗暴部署小app: IaaS实战选学篇
上一期PaaS实战篇发布后,已经无人惦记这个教学是否还有后续。评论不是像这样:

就是像这样:

看得懂的看得懂,看不懂的看不懂……教学彻底失败……
考虑这个教学不然就灰溜溜自己收场好了,结果看了这篇Excel VBA實現”複製貼上“,又信心大增:看来不是我一个人在发些评论区看不懂的教学文嘛,于是厚着脸皮继续写——要有始有终按照教学计划走向完结,不能半途而废。VBA看不懂,IaaS一样也可以看不懂……管他看得懂看不懂,先让自己看懂了再说😼。
那无人能懂的教学文,还算教学吗?不重要,据说教学文有治疗失眠的奇效……所以还是很有实用价值的……

IaaS教学案例,和PaaS案例一致。
前端:Vue 后端:.Net Core 数据库:SQL server
本期目标就是把一模一样的玩意,选择IaaS级产品发布起来。通过相同玩意不同上线流程的对比,让小白深刻明白IaaS vs PaaS 的区别,从此爱上PaaS。
IaaS过程仍然简单粗暴,真的不用写一行代码,只用鼠标点点点……
1 还是先从数据库弄起
搞IaaS级数据库,和PaaS最大的区别,就是要买虚拟机。
1.1 购买虚拟机

买虚拟机和买app服务类似,需要给虚拟机命名,选择虚拟机位置(根据目标用户群体来定),设置虚拟机所属recourse group,subscription……
因为这台虚拟机用来跑数据库(SQL server),购买时可以要求Azure预装SQL server环境。预装主要是指定版本和操作系统(Windows还是Linux)。
虚拟机的收费标准主要和虚拟机大小(size)有关。
1.1.1 创建虚拟机用户
购买虚拟机时,Azure还会提示创建登陆用户。因为是小白教学,所以就用简单的密码登陆就好。。。。。。SSH公钥什么的暂且不表。。。。。。

1.2 让虚拟机可以远程登录
购买SQL app服务,resource group里面就只有一个app。购买完虚拟机,你发现虚拟机所属的recourse group文件夹里有一堆东西。

除了拥有了虚拟机,Azure同时把配置虚拟机需要的IP address,Network group之类的也顺便买一赠一给你了——因为在IaaS级,除了app、数据之类的归自己管,操作系统之类的也归自己管。
为了可以远程操作虚拟机,我们需要在Azure Portal里打开远程登录端口号(默认3389)

如果RDP默认3389端口号没有开启,需要手动创建一下。。。。

在虚拟机“Networking”页面下,点击“Add Inbound port rule”按钮,把3398添加进来。。。。。。
有Inbound就有Outbound。Inbound规定什么方式可以访问虚拟机,outbound数据怎么从虚拟出去。。。。。。
1.3 端口号是啥玩意?
我们把虚拟机比作一栋房子,房子一般都有门窗的;我们把端口号比作房子的门窗。进入房子的方式很多:走正门、走后门、翻墙、翻窗……所以需要给进入房子的方式进行一下规范。

平常我们访问网页(比如matters首页),用到的访问方式是https,类似于走正门,默认端口号443。

现在我们想要远程访问服务器,相当于走后门,所以需要换一个端口号。如果走后门的远程登录端口号(默认3389)不对外开放,就相当于走后门进入房子的方式不被房主允许,也就无法远程访问。
1.4 远程访问虚拟机
1.3听不懂没关系,用RDP实战访问一次就明白了。RDP全称:Remote Desktop Protocol。
1.4.1 Windows系统下操作步骤:
在任务栏搜索Remote Desktop Connection,输入虚拟机对公IP地址,用在Azure购买虚拟机流程时创建的用户名和对应密码,就可以远程登录了。

在Azure购买虚拟机以后,Azure会给虚拟机分配一个对公IP(public IP),例如:xx.xx.xx.xx,就是现在想要远程访问的虚拟机名字。现在我们用RDP访问虚拟机,需要走后门(用3398端口号),所以Computer这一项填:xx.xx.xx.xx:3389
用户名就是刚刚在1.1.1中创建的用户和密码。

IP地址,端口号,用户名,密码,没输错,就登录成功了……接下来就是见证奇迹的时刻,眼前看到一个新的桌面长相的界面——那就是刚刚在Azure买的虚拟机。

因为在买虚拟机时要求Azure预装了数据库,所以接下来该咋弄咋弄……
1.4.2 Mac系统下操作步骤:
Mac需要自己安装登录工具——去Apple Store下载如下图所示app。

下载安装好后,照着Windows的步骤输ip、端口、用户、密码后登录。

当然了,如果记性不好,也可以去Azure Portal虚拟机的“Connect”页面,把RDP文件下载下来,然后双击打开,直接输入用户名和密码登录……
2 接着弄后端
如果把虚拟机建数据库的流程搞完,后端的弄法基本上就是重复以上弄数据库的步骤……
我们可以把后端和数据库放在一台虚拟机上,即一台虚拟机同时有数据库SQL server环境和后端.Net Core环境。
但是由于以上步骤繁琐,为了巩固学习成果,所以教学采用再买一台虚拟机放后端,然后再通过对内ip连数据库。。。。。。帮助小白熟悉Azure Portal点按钮流程。
2.1 购买虚拟机放后端
购买流程类似1.1,唯一不同的是,这次要求Azure 预装.Net Core。

因为购买虚拟机后又会赠送很多诸如ip之类的玩意,建议后端虚拟机和数据库虚拟机放在不同的resource group(即文件夹)里,以免搞混。
2.2 把后端虚拟机和1.1创建的数据库虚拟机放在一个vnet下

vnet,就是Virtual Network,放在同一个vnet下的两台虚拟机可以通过对内IP(Private IP)相互访问。
因为后端最终都是要连数据库的,数据库又不需要被外访问;把1.1创建的放数据库虚拟机和2.1创建的放后端虚拟机放在同一vnet下,他俩就能互相通过10.0.0.X的内部ip通信了。。。。。。

如图所示,我们通过在虚拟机里AllowVnetInBound就可以让他们相互通过对内IP相互访问了。。。。。。
2.3 对外IP和对内IP的区别
对外IP,即public IP;
对内IP,即private IP。
假如一个房子内部有3间屋,分别住着爸爸、妈妈和儿子。爸爸、妈妈和儿子可以在房子内部相互串门访问,但是邻居想要来上门需要走大门。
房子大门相当于public IP,用于邻居上门用;而private IP 相当于爸爸、妈妈和儿子的房间号,仅供内部串门使用,邻居不知道内部房间号更不能来串门……

如图案例,通过对外ip访问前端虚拟机,而后段虚拟机和前端虚拟机之间通过内部ip互相交流数据。
2.4 把后端代码上传虚拟机
为了省事,后端传代码还是用Visual studio,只是这一次的target是Virtual Machine,而不是PaaS是用的App Service。。。。。。

上传的时候也顺便把数据库连了。照着2.1 2.2 2.3步骤完成,现在连的对象就是数据库的对内ip地址。。。。。。
……
前端如果想搞虚拟机,也是类似的步骤。。。。。。鼠标点点点。。。。。。
……
此处省略很多步
……
……
……
2.5 添加SSL证书
以上折腾这么多步骤后,小app终于可以跑了,达到了和PaaS使用app service部署类似的效果。
但是可能小小app还不能被https访问,只能被http访问。。。。。。所以需要搞个证书。。。。。。
http就是Hypertext Transfer Protocol ,又名超文本传输协议。。。。。。
https的“s”指secure,所以https全称是:Hypertext Transfer Protocol Secure。
简单理解,要想从http升级为https需要搞一个SSL证书给虚拟机。。。。。。。
那SSL又是什么呢??????SSL指Secure Sockets Layer。。。。。。
搞了这么一个证书,让浏览器在打开网页请求传输数据时,可以加密保护信息。。。。。。有SSL和无SSL的区别就是,打开网页时有一个小锁。。。。。。表示安全。。。。。。

锁是不是有铁链锁,电子锁,遥控锁,人脸识别锁???不同类别,防盗级数也不同……SSL证书和锁类似,也有级别。。。。。。越高级的SSL证书当然越贵防盗效果越好。。。。。。
比如网银系统,涉及金钱交易,是不是需要搞一个超高安全级数的证书??????
当然了,此处小白上线自娱自乐上线小小app,只求有锁就行。。。。。。随便乱搞一个就好。。。。。。

业余搞锁网址:cloudflare
以上完成小小app在云端的IaaS级部署,点了这么多鼠标,是不是累死了??????对比PaaS步骤,实现类似相同效果,复杂麻烦死了,而且收费也随之上升。
当然了IaaS同样也可以使用终端cli命令行操作。。。。。。省去点鼠标满屏跑……

但是小白入门级教程,还是用Azure Portal点点点吧。。。。。。
对比PaaS级别,端口号,对内ip对外ip,ssl证书,虚拟网络……这些统统都由Azure包干,完全不需要自己打理,简单省事省钱。于是彻底明白了为啥小白需要自学云服务弄懂PaaS。