使用Azure虚拟机创建一个功能完备的网站 - 工具的选择
分类: .Net技术 ◆ 标签: #基础 #.Net #Azure #Virtual Host ◆ 发布于: 2023-06-15 15:57:06

学习Azure
有长一段时间了,计划使用Azure
来做一些有趣的事情,开始计划之前,我们先可以想想Azure
可以帮我们完成哪些事情?
- 使用
Azure
的虚拟机或者应用服务可以快速搭建各种站点,例如Web
站点,FTP
站点,邮件列表等等传统的互联网项目。 - 使用
Azure
的AI
技术可以快速搭建各种人脸识别,语音识别,以及配音等新兴的项目。 - 使用
Azure
的物联网技术可以快速让自己的设备随时连上自己创建的小型物联网,可以升级自己家里的智能家居。 - 使用
Azure
的Media Service
可以快速搭建直播项目。 - 使用
Azure
的机器人服务创建一个聊天机器人。
......
我们可以在这里列一个很长的单子,为了简便(实际上内容也不少)我们选择先使用Azure
的虚拟机搭建一个功能完备的Web
站点,作为一个博客记录自己学习Azure
的点点滴滴。
我们需要哪些功能?
- 我们需要一个
Web
站点能够提供一个在线创作的平台,供我们发布、编辑、分享内容。 - 我们需要一个小的搜索引擎,该引擎能够帮助
Web
的用户快速搜索到他需要的内容。 - 我们需要一个小的AI工具,他可以帮助用户阅读出网站的内容,并且可以帮助用户翻译成他需要的语言。
开发工具的选择
为了满足这些功能,我们需要如下的工具:
- 我们需要一个优秀CMS软件或者框架,不需要那么庞大,要方便定制。
- 我们需要一个方便的小型的数据库,用于存储我们制作的内容。
- 我们需要一个编辑器或者
IDE
CMS
框架的选择
基于对.Net
技术的喜爱,决定采用基于.Net
技术的CMS
平台或者框架,当前社区最火热的两款开源CMS
框架分别是:
Piranha CMS
: https://piranhacms.org/Orchard Core CMS
: https://orchardcore.net/orchardcms
这两款基于.Net
的开源框架,都支持.Net 6
, 从网站宣传上看,性能测试都非常棒, 同时从.Net
官方文档中了解到这两款都值得推荐,不过这两款软件的适用范围以及思路各不相同:
Piranha CMS
始终坚持小型化,功能虽然很强大,但是并不具备企业特性,Orchard Core CMS
一开始就目的非常明确,基于SaaS
架构的软件平台,支持多个租户。Piranha CMS
是一个.Net
的库,您需要使用这个库来定制自己的CMS
或者网站,Orchard Core CMS
包括两个部分,Orchard Core
是一个库,但是Orachard Core CMS
是一个功能完备的CMS
系统,不过需要自己定制模板。Piranha CMS
开发比较早,目前已经迭代到10.0
版本了,Orchard Core CMS
刚刚发布稳定版本1.x
。
为了更加容易定制,也不想占用太多的学习时间,因此选择了Piranha CMS
, 它的文档不多,整个架构也很容易理解,跟着官方的文档就能容易的制作一个自己需要的网站,关于如何使用Piranha CMS
之后我抽些时间再记录一下。
它的文档在这里:https://piranhacms.org/docs
开发语言和工具的选择
这个没啥好说的了,直接选择了.Net 6
, 之前.Net 6
发布的时候,我写了一系列的文章介绍.Net 6
,如果对于.Net 6
不熟悉可以考虑参考一下这里:https://www.dotnetdeveloper.cn/dotnet-guide/category/explorer-net-6
开发工具您可以选择VS Code
, 我个人更喜欢Visual Studio
, 用社区版或者个人版就可以了,对于个人或者小型的团队都是免费的。
数据库部分非常有意思,我没有选择传统的像MySQL
或者SQL DB
这样的重型数据库,因为只是自己的一个博客网站,用不上这样重型的数据库,大部分的内容我们可以缓存起来,需要编辑和发布仅仅是网站的管理员,所以数据库不是瓶颈,反而是内存和缓存是瓶颈了,我们可以把所有的内容都缓存起来。
因此数据库我选择的是Sqlite
。
用于管理Azure
资源的工具
我们计划使用Azure
来构建我们的系统,为了更好的管理Azure
的资源,我们需要使用如下的一些工具Azure Portal
, Azure Powershell
或者Azure Cli
。
我们可以使用Azure Portal
做第一次的部署,然后使用Azure Powershell
或者Azure CLi
将整个部署过程全部以脚本的形式保存下来,可以实现之后的快速部署和扩充。
另外我们需要定期备份我们的网站内容,这也需要用脚本来完成。
源代码管理
虽然是一个小型的Web
站点,但是这个站点我们仍然有很多的代码,我们还是需要一个能够管理源代码的工具,注册一个github.com
的账号吧,用github
来管理我们的源代码,并且按照多分支开发,Tag发布的原则推进。
到这里我们的开发的工具基本就完备了,我们接下来看看我们需要哪些Azure
资源。
Azure
资源的选择
根据我们的要求,我们需要如下这样几种Azure
的资源:
- 一台
Azure
的虚拟机 - 一个
Azure Cognitive Search
的资源用于我们的搜索引擎。 - 一个
Azure
沉浸式阅读器服务,它会帮助我们完成AI
部分的功能,包括内容翻译成其他语言,语音阅读,提高阅读体验等等。
在拥有这些资源之前,我们必须要拥有一个Azure
账号,我们完全可以使用Azure
提供的免费账号来运维我们的博客站点,关于如何申请免费的Azure
站点以及免费的资源,您可以看看我之前分享的文章:https://www.azuredeveloper.cn/article/how-to-get-free-azure-account。
取得了Azure的账户之后,您可以开始愉快的选择Azure
的资源了。
Azure
虚拟机
我对比了Azure
提供的虚拟机,相同大小的基于Ubuntu
的虚拟机和基于Windows Server 2019 DataCenter
, 运行.Net 6
的应用,基于Windows Server 2019 DataCenter
在性能,可用性,易用性,调优上都比基于Ubuntu
的好上很多很多,因此我会建议如果您是跑基于.Net 6
的应用,推荐选择基于Windows Server 2019 DataCenter
的虚拟机。
如果选择基于
Ubuntu
的虚拟机,那么您的架构是: nginx + 反向代理 +.Net 6
的代码,这里我们需要注意的是,为了优化这个部分,我们可以将nginx 的反向代理监听在unix socket
上,并且使用/dev/shm
保存这个unix socket
, 这样nginx
和.Net 6 Host
之间的通讯直接通过基于内存的unix socket
进行,就不需要从loop back
设备再过一次了,另外需要使用一个进程管理来监控.Net 6 Host
进程的运行情况,如果该进程crash
我们需要重启,我们可以使用Linux
自带的Systemd
来管理这个部分,关于这个部分您可以参考文章:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-6.0如果是选择了基于
Windows Server 2019 Datacenter
的虚拟机,那么您的架构是:HTTP.sys
+IIS
+Asp.net Core Module
, 默认情况下是使用in-process
的形式运行.Net 6
的代码,也就是您的代码和IIS
的w3wp
在同一个进程里运行,由ASP.net Core Module
实现的IIS
集成直接通讯,不使用Kestrel
的服务实现,光这一点就会比Linux
的高效很多,同时我们也可以调整HTTP.sys
以及IIS
本身的缓存以及动态压缩,同时Piranha CMS
本身也是支持缓存的。关于如何使用IIS
部署,您可以参考文档:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/?view=aspnetcore-6.0, 如何优化IIS,我们已经有一篇文章讲了这个部分。
我们选择使用基于Windows Server 2019 Datacenter
的虚拟机。
其他Azure
资源
Azure Cognitive Search
服务是可以给我们提供搜索服务的,研究下这个服务,很有意思,几乎它是一个纯免费的服务,特别是对于我们这种体量很小的应用来说,只需要使用它的免费版本就已经足够支持我们的搜索存储和搜索量了。
Azure
沉浸式阅读服务也是这样的,是一个非常友好而且免费的服务,同时提供基于JavaScript
的SDK
, 我们可以直接使用这个就好了。
虽然上述两个Azure
服务都是免费的,但是功能却一点也不缩水,搜索能力,AI
能力和收费版本没有区别,只是有使用上的限制,好消息是我们的访问量根本达不到使用上的限制。
接下来我们按照计划开始创建我们需要的系统就好了。