从未如此简单:基于 Serverless 架构的博客
我是一个比较喜欢写东西的人,无论是生活中的点滴,还是学技术的笔记,再或者是自己针对某些内容的看法,我总想的是把这些内容记录下来,以后进行查阅比较方便,或者以后进行回忆比较有趣。
在以前,我用过 Wordpress,我也用过 Zblog,我也用过 Hexo 的博客的开源项目,我同样也用过云主机、虚拟空间以及 Github Pages 等,但是我一直都有几个比较头疼的点:
Wordpress 和 Zblog 需要数据库,一般情况下数据库比较贵,这个比较头疼;
Hexo 博客等不需要数据库,或者 Zblog 可以使用 Sqlite 相对来说也是没有成本的,还是比较爽,但是我把这些项目放在哪里是个问题,因为云主机、虚拟空间也是要花很多钱的;
Github Pages 貌似还是一个很方便的点,但是在国内的速度等以及自由程度等,貌似还是有很大的挑战的;
在过去一段时间,我也和一些小伙伴尝试过,将 Zblog,Wordpress 等部署在 Serverless 架构,希望可以通过 Serverless 架构为我节省一笔费用,然而让我措手不及的是“自定义镜像太慢了”,而且在一定程度下放在 NAS 中的 Sqlite 数据,还可能出现损坏,我猜测是“锁”的问题;
所以,我的博客该何去何从,作为了一个非资深的羊毛党,但是确实资深的强迫症,解决博客的问题成了我一时之间所思考的内容:
博客要有足够快的响应;
博客要尽可能的做到 0 成本;
博客要有一系列的拓展能力,例如搜索,留言等;
发表博客可以非常简单和方便;
......
此时此刻,我将目标瞄准到了:
Serverless Devs 的静态网站组件
Hexo 博客系统
Algolia 的搜索能力
Gitalk 的留言能力
Github Action 的 CD 能力
说到做到,直接“开干”。
创建博客
其实创建一个博客系统非常容易,在下载、安装 Serverless Devs 工具之后,只需要初始化 Hexo 的模板即可:
初始化完成之后,我们只需要配置一下密钥信息,就可以通过:
直接将项目部署到线上。
当然,在这个过程中,我们还可以做很多的事情,例如寻找一个靠谱好看的模板,添加一些文章,修改一些模板上的配置等,反正最终我的效果就是:
集成 Github Action
当我完成了博客的创建,我随后创建了一个 Github 的仓库,将 Hexo 推了上去。接下来,要做的就是创建一个自动发布的脚本,即我每次在 Github 发布文章,都会自动同步到我的博客中。
我在本地项目,通过:
并且选择了 Github Action:
之后参考所提供的案例:
通过进行密钥配置:
以及 Yaml 内容的完善:
最终将代码推送到线上,发现尝试触发,已经可以进行自动发布了:
拓展能力
完成上面的内容很简单,貌似也没什么额外或者值得尖叫的,或许以后可以通过更新 Github 里面的文档,来进行博客的更新,就是最大的好处了吧?
接下来两个事情:
Algolia 的搜索能力
Gitalk 的留言能力
首先是 Algolia 的搜索能力的集成,没什么难度,按照一些配置文档,就可以搞定,此处不在进行赘述。
其次就是集成 Gitalk 的留言能力,或许,这一步才是真正的开胃菜,或许让我对 Serverless 架构尖叫的点吧。
我非常简单,轻松的将 Gitalk 配置完成,并且尝试使用,我突然发现一个非常尴尬的事情:Gitalk 出现了一个 403
通过搜索,找到了这个仓库:https://github.com/Rob--W/cors-anywhere
在 issue 里发现了罪魁祸首:
enmmm,大概就是说,这个仅仅是一个 demo,但是很多人却直接使用了,现在我不给大家用了,给大家加点限制了,如果有需要,就自己部署一套这个服务吧。
我??黑人问号懵逼脸。但是那能怎么办呢?没办法就只能自己看一下这个项目,把项目 Clone 到本地,发现这是一个 Node.js 的项目,灵机一动,是不是可以自己通过函数计算搭建一个这个服务?
于是我:
第一步,修改一下代码中的默认 port(当然也可以不修改,通过环境变量设置):
第二步,创建一个 s.yaml:
然后再加一个 bootstrap 文件:
完成之后,只需要一行s deploy
:
随即,将 Gitalk 中的文件进行修改,将我们刚部署完的域名替换到proxy
中:
完成之后,我们无需进行部署,只需要推到 Github 即可,Github Action 会按照我们之前的预期,来帮助我们做自动化发布,发布完成之后,我们可以尝试在我们的博客上登陆,评论:
总结
创建博客方法很多,其实流程也很顺利,但是基于 Serverless 架构来做的博客,真的可以说是非常省心:
避免了 Github Pages 等在国内的响应速度慢的问题;
一些需要自定义的行为,完全可以通过更高的灵活度来进行实现(例如自己部署了这个仓库的代码:https://github.com/Rob--W/cors-anywhere );
相对传统的服务器来说,Serverless 架构也更省钱;
综合来说,省钱、省事、性能还不错,就这样,一个完整的基于 Serverless 架构的博客系统就这样搭建完成:https://bluo.cn
版权声明: 本文为 InfoQ 作者【刘宇】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c55fa5aa20408832d458f48a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论