博客折腾记 2024.5

是的,我又来折腾博客了。

背景

之前的博客是用 hexo 搞的,简单写了个页面,放上去防止域名掉备案的。现在有空了,打算认真搞一下博客了。

目标

体验过 wordpress 这种大而全的 cms,各种功能都有,用起来非常爽。但是其后面必须要有一个后端服务器,配置要求还不低,并且还容易被打。

所以准备搞一个纯静态的,导出 html 出来,剩下的部署我就可以随便搞了。我有备案,用 oss 部署也方便。虽然相较于 wordpress 少了很功能,但相反也意味着少操心,就几个 html 文件,随便你攻击,能做的最多就是 ddos 了。

选型

NotionNext

一开始我是用的 NotionNext 的,因为我主要在 notion 平台上面创作,直接 notion 写文章,就可以直接发布简直不要太爽。

然后就研究怎么导出静态文件,用yarn export导出,然后直接用 oss 去部署,结果发现好像打不开。然后就又去尝试本地部署看看,最后再去看文档。搞了半天(真的半天)最后发现,好像官方好像不是很支持导出静态 html,还是推荐用 nextjs 直接部署。

所以只能放弃 NotionNext,去寻找其他方案了。

Elog

在 NotionNext 的项目里面看到友情链接推荐了 Elog,说是「开放式跨平台博客解决方案」。诶,这个不就是我在寻找的东西吗?

这个项目尝试把写作和发布分开来,写作是写作,可以选择自己喜欢的平台,发布是发布,也可以自选。就是相当于做了一个中间件,聚合写作平台的内容,然后统一发布。

个人非常喜欢这个理念,通过统一的管理降低了写作平台对用户的绑定。

Hexo or Hugo?

都是发布静态博客的工具,hexo 之前用过,所以这次体验一下 hugo。

实施

Elog 同步文章

首先是用 elog 把 notion 上面的文章下载到本地。按照文档简单配置一下,很轻松就实现了自动同步 notion 写的文章到本地并且下载图片。并且还带有缓存,以前下载过的文章,没有更新的话就不会重复下载,非常棒,感谢作者的付出。

Hugo

对于导出静态 html 的博客来说,elog 的意思是“我把文章下载下来以 md 的格式放在这,剩下的你自己处理”,于是就接着配置 Hugo。

也是按照官方文档,花了点功夫配置好了。中途遇到一个 bug,就是 elog 导出的文章,hugo 首页默认不显示,但是我自己用 hugo 生产的文件却会显示。最后找出来,是因为 hugo 的文章的 type 默认是 posts,而 elog 导出的 notion 的文章的 type 默认是 Post,和 hugo 不一样,所以就没有显示。最终自己写了一个 Format,算是把这个问题解决了吧。

静态文件部署

官方是建议做一整套的 cicd 的,要么手动点一下,就自动同步和发布;要么就定时同步发布。

不过看官方给的最佳实践,好像都是用的 github action 做的,凭借着“能用 docker 做就全部用 docker 做”的理念,我尝试写一个从同步到编译部署的 Dockerfile。

Docker

目标是传入 notion 的参数信息,就能构建出一个带有编译好了的页面的 nginx 镜像。

  1. Elog
    • npm 依赖:elog 需要安装,我的 format 也需要@elog,又需要安装依赖
    • 传入配置信息:这个比较简单,直接环境变量传入就行了
    • 同步文章:这个不是很优雅,因为同步的文章是有缓存的,并且因为在一个步骤中,docker 很难支持这种缓存,除非挂载本地目录。也就是说,每一次构建镜像都会全量同步文章,不是很优雅。
  2. Hugo
    • 编译:这个也还行,使用 hugo 的镜像,然后编译之前同步下来的文件就行了。
  3. Nginx
    • 部署文件:直接复制文件到指定目录就完事了。

ok,Dockerfile 就这么愉快的写完了。有了 image,就需要部署了。部署其实也简单,一句docker run就完事了,但是怎么搞 CICD 呢,这剩下的才是大头。

还是老问题吧,一看到纯 docker 的 cicd 就头大,要用脚本登录到机器上去,先docker stop,然后docker rm,最后再docker run。先不说有没有问题,就这三句就感觉非常的不优雅。

如果要做的好一点,那就上 k8s 吧,可是,一个博客,需要上到 k8s???

杀鸡用牛刀了属于是,先不说好不好用,创建 manifest 仓库,配置 argocd 一整套就够麻烦了。为了定时 ci 还要设置个定时任务。

Serverless-dev

基于以上 docker 太麻烦的情况,我搞了一半就没搞了,还是用 s 直接部署到 oss 上吧,什么 cicd,也以后再说吧,先能部署了再说了。

于是就写了个 s.yaml,挺简单的,先跑几个命令把 html 构建出来,然后就直接上传 oss。

有一说一,虽然不是很喜欢云服务,但是用起来是真的爽,自己简单点点鼠标,敲几行命令就搞好了,不需要自己在那里搞东搞西。

总结

不管怎么说,算是搞好了吧,现在就在 notion 上面写作,然后在电脑上面点一下,就可以自动部署。至于 cicd 这些自动化部署的,以后有空再说吧。

再谈到 elog 项目,感觉还是比较粗糙,还有很大的进步空间,虽然我自己写也能写出来一个类似的,但是肯定没有别人做的好。我自己想要给项目做贡献,语言不熟悉也不方便搞。所以还是希望项目能够好好发展吧,看好这个项目,未来可期。

Licensed under CC BY-NC-SA 4.0