0x00 拜年

今天是辛丑牛年的第一天,在此先祝各位牛年大吉,身体健康,心想事成!

0x01 唠嗑儿

放假的第一天,也总算有时间继续捣鼓捣鼓这个小网站了。这篇文章除了记录新的一年外,还将重点介绍一下本站是如何搭建的,也算是第一篇正式记录「本站是如何建成的」的文章。在正式介绍前,还请容许我多唠叨一会儿。

搭建自己的博客或者网站一直以来都是我的一个小小的心愿,但是由于各种原因(主要是懒)一直都耽搁了。以前也曾经玩过 Wordpress / Hexo 之类的博客系统,总是觉得缺少了些什么,觉得自己需要的不仅是一个记录文字的地方。如果纯以记录为目的,也许微信公众号就已经是一个不错的地方了,这些系统总归让我感觉缺少了些许归属感,于是便有了这个网站的诞生。正如前文所说,这个小站并不止是一个博客,而是一个完全属于自己的个人网站。在最初步计划中(来了来了立 flag 了),这个网站首先会有博客功能,记录一些技术杂谈、个人生活等等,最初会以文字的形式,后续会加入图片、视频等功能。除此之外,还会尽可能把一些好玩的技术融入进来,慢慢丰富这个网站。

0x02 邻家有站初长成

这篇文章是第一篇记录这个网站是如何成长的,但是由于目前系统只有读文章还没有写文章功能,本文是在滴答清单中写下的,然后再手动连接数据库写入。方法虽原始,但是总归能完成最基本的功能。

到这里大家可能发现了,在这篇文章编写之时,这个网站仍然处于非常初期的阶段,一些较为基础的功能都还没有实现,因为这个网站是真正的从零开始,一行一行代码敲出来的。目前本站实现的功能仅仅是从数据库中读取文章列表然后渲染到页面上,当然,这看似简单的功能却花了近一周的空余时间才完成。在成功渲染出第一篇文章之前,需要做的准备可多了,我将会在后文给大伙儿一一道来。

(插播一则吐槽,写文章还是挺耗时的,至此已经写了一个小时了,喝口水散个步再回来)

为了减少篇幅,本文从基础设施开始介绍。

0x03 基础设施

在决定好建设本站后,首先得决定的是基础设施。基础设施与预算息息相关。作为一个流量可能非常小(甚至可能只有我自己访问)的个人站,本着能白嫖绝不花钱的原则,当然是花销越低越好。在国内建站还有一个事情需要考虑,如果服务器架设在国内,网站需要进行备案。虽然非常理解国内有对互联网进行监管的需要,但是作为一个记录自己生活以及技术的小站,还是选择尽量使用海外的服务吧。

经过一段时间的调研及测试,最终决定的基础设施是:
Cloudflare + GitHub Pages + AWS API Gateway + AWS Lambda + Atlas MongoDB + AWS S3

域名
域名方面选了个 dev 的域名,一方面价格较为便宜,12 美金一年,另一方面 dev 域名也挺符合本站的特质。

前端
接下来展开聊聊每个服务都干些啥吧。网站还是使用我最熟悉的前后端分离的设计,通过 Restful API 来进行数据交换。
前端方面使用 GitHub Pages 来 host,一是因为这个服务是免费的,二是因为 GitHub 现在有自己的 CI GitHub Actions,不得不说夸一下 GitHub。

CDN
GitHub Pages 虽好,但是不得不面对一个棘手的问题:GitHub Pages 国内访问并不稳定,尤其在一些敏感的时期。为了解决这个问题,得耍些野路子:在前面套一层国内能访问的 CDN,于是将目光投向了大名鼎鼎的 Cloudflare。
使用 GitHub Pages 在前面套一层 Cloudflare 不仅能稳定连接,还能抵御 DDoS 攻击(虽然 GitHub Pages 并不需要,但是后续的后端接口可以用上)。Cloudflare 还提供了免费的套餐,也满足了能省则省的原则。

数据库
数据库还是使用比较熟悉的 MongoDB,MongoDB 官方服务 Atlas 提供免费的数据库服务,又满足了白嫖的原则嘻嘻。不过免费的计划只提供 500M 的数据存储,在后续存储数据的时候需要好好计划一下。

后端
后端服务最开始是打算开一台 VPS 来作为后端服务的。但是转念一想,如果用 Serverless 架构,说不定还能进一步降低费用。除了费用考量外,也可以借此机会尝试一下 Serverless 架构。于是便选用 AWS 的 Lambda + API Gateway 作为本站的后端服务,其中 API Gateway 作为 API 接口负责路由请求,Lambda 则负责处理具体逻辑。API Gateway 和 Lambda 的计费均为按请求量和数据量来收费。

文件存储
既然使用了 AWS 服务,那文件存储便没有理由不使用 S3 了。在我们的计划中,后续将会支持图片以及视频等多媒体资源,我们就需要文件存储服务来放置这些资源来。同样的,AWS S3 也是按需收费的。

至此,域名+CDN+前端+后端+数据库 + 文件存储的基础设施介绍完毕。使用目前的这套基础设施,大部分服务都是不花钱的,主要的花钱点在域名上,后续如果使用量增加,AWS 的三个服务都会有小量的支出,但是都会是比较小的支出。