Skip to main content

使用Azure虚拟机创建一个功能完备的网站 - 工具的选择

分类:  .Net技术 标签:  #基础 #.Net #Azure #Virtual Host 发布于: 2023-06-15 15:57:06

学习Azure有长一段时间了,计划使用Azure来做一些有趣的事情,开始计划之前,我们先可以想想Azure可以帮我们完成哪些事情?

  • 使用Azure的虚拟机或者应用服务可以快速搭建各种站点,例如Web站点,FTP站点,邮件列表等等传统的互联网项目。
  • 使用AzureAI技术可以快速搭建各种人脸识别,语音识别,以及配音等新兴的项目。
  • 使用Azure的物联网技术可以快速让自己的设备随时连上自己创建的小型物联网,可以升级自己家里的智能家居。
  • 使用AzureMedia Service可以快速搭建直播项目。
  • 使用Azure的机器人服务创建一个聊天机器人。
    ......

我们可以在这里列一个很长的单子,为了简便(实际上内容也不少)我们选择先使用Azure的虚拟机搭建一个功能完备的Web站点,作为一个博客记录自己学习Azure的点点滴滴。

我们需要哪些功能?

  • 我们需要一个Web站点能够提供一个在线创作的平台,供我们发布、编辑、分享内容。
  • 我们需要一个小的搜索引擎,该引擎能够帮助Web的用户快速搜索到他需要的内容。
  • 我们需要一个小的AI工具,他可以帮助用户阅读出网站的内容,并且可以帮助用户翻译成他需要的语言。

开发工具的选择

为了满足这些功能,我们需要如下的工具:

  1. 我们需要一个优秀CMS软件或者框架,不需要那么庞大,要方便定制。
  2. 我们需要一个方便的小型的数据库,用于存储我们制作的内容。
  3. 我们需要一个编辑器或者IDE

CMS框架的选择

基于对.Net技术的喜爱,决定采用基于.Net技术的CMS平台或者框架,当前社区最火热的两款开源CMS框架分别是:

这两款基于.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 PortalAzure 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的虚拟机。

  1. 如果选择基于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

  2. 如果是选择了基于Windows Server 2019 Datacenter的虚拟机,那么您的架构是: HTTP.sys + IIS + Asp.net Core Module, 默认情况下是使用in-process的形式运行.Net 6的代码,也就是您的代码和IISw3wp在同一个进程里运行,由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沉浸式阅读服务也是这样的,是一个非常友好而且免费的服务,同时提供基于JavaScriptSDK, 我们可以直接使用这个就好了。

虽然上述两个Azure服务都是免费的,但是功能却一点也不缩水,搜索能力,AI能力和收费版本没有区别,只是有使用上的限制,好消息是我们的访问量根本达不到使用上的限制。

接下来我们按照计划开始创建我们需要的系统就好了。