用新技术重构个人网站
这几年里,我的个人网站换了6个版本。不过,前面的许多版本都是小打小闹,在管理上,都很不规范。这次的更新中,我对需求进行了一次全面的分析,并尽量使用最新的技术进行实现。
需求分析
在个人VPS上,运行下列服务:
- 个人网站
- 首页
- 要有一个简介
- 能显示一些自己做的小项目
- 博客
- 轻量
- 使用MySQL等大型数据库的一律否决(因为博客不是Big Data)
- 使用Node.js等笨重运行时的一律否决(因为博客不是什么大型工程)
- 可以使用Markdown撰写
- 开源产品
- 高可定制性和自由度
- 有一款我能看中的简洁主题
- 花里胡哨的全部否决
- 轻量
- 首页
- 其他个人小程序 (不是微信的那个!)
- Kimikuri的服务端
- 一些Web程序(如密码生成器等)
- 其他应用程序(由于安全原因,隐去)
实现分析
这些需求,完全可以由一台有独立IP的VPS实现。
经过多方考虑,我最终采用了如下方案:
- 一个装有Debian的VPS
- Nginx作为Web前端
- Let’s Encrypt/Cloudflare作为HTTPS提供者
- Docker作为后端容器
- Hugo作为静态博客生成器
- GitHub私有仓库作为博客内容存储器
- Webhookd作为博客更新触发器,自动从GitHub拉取博客更新,存放在VPS上
该方案的优势
轻量
拒绝NodeJS、拒绝PHP。 Hugo是一个Go编写的静态博客生成器,除了在更新内容时由Webhook调用之外,平时不需要运行,只需要让HTTP服务器展示静态页面。而Hexo需要在后端跑一个NodeJS引擎,懂的都懂,不懂的我也没法和你解释。
博客多端同步
在台式机上没有写完,可以直接以草稿的形式把当前内容commit到私有仓库,在笔记本上pull然后继续撰写。 撰写完毕后,可以将博文改为非草稿,然后commit,博客内容可以自动更新。
安全性
博客内容的传输使用Git,因此可以使用HTTPS/SSH。博客网站前端使用HTTPS为公网提供服务,前后端通信完全发生在本机回环地址,外部无法直接访问。
可扩展性
后端可以自由增加新内容,比如放一个CI上去,只需要增加一个新的容器、一个新的Nginx规则。