
Blog的进化史
最近黑共产党的东西写的太多了,人都有点魔怔,本篇文章还是回到本博客的主题,来谈一些技术问题。不过,我们的出发点和太监恩山论坛是不一样的,你没有办法在脱离政治的情况下谈技术。
本Blog最早就是一个用Hexo搞的静态博客,但和一般人直接挂在GitHub不一样,我一开始就想明白就算是静态的博客也要挂在自己能全面控制的地方。后来从朋友那边搞到这个ThinkPad T430后,我就想着把在上面装一个Ubuntu或者Debian的服务器版本,然后把网站挂在Nginx上。最早的计划更加疯狂,我想的是直接把网站挂在路由器上面,但因为ROM不够而不了了之。Anyway,这个就是本博客的0.1时代,一个本地部署的纯静态博客。我在VSCode里面编辑,用git push上传。
即便是在最早的0.1版本,我其实也折腾过所谓的“自动部署”——就是git push到Gitea后,用一个webhook能触发hexo g & d。唯一的“技术难点”在于,我的Gitea是装在docker里面的,Nginx则是直接装在服务器上面。当时为了解决这个问题(以及其他的部署问题)花了不少时间,但最后发现我之所以弄不好,纯粹是因为docker学的不扎实。走了一段弯路后,我的0.1版本就定格在这里了。
0.1版本,整个博客上其实只有两篇文章,就是Bob和MGS V,也算是奠定了本博客的风格——不过,我后面还是决定不借助Ai来写,因为Ai的味道太重了,我自己都读不下去。这个时候,阻止我继续写博客的,其实是因为整个项目没有一个合理的后端(我是真的不习惯在VSCode里面写文章)。我在年中的时候做了一个决定,放弃Notion,改用obsidian(以及自托管的同步插件),发现在后者里面写东西意外的舒服,于是就产生了一个想法,要做一个后端直接把obsidian的笔记导入到hexo。
于是就进入了0.2版本,为了实现上述功能,一方面我自己进行设计,一方面也依赖codex。我的想法很简单,需要一个expressJS的后端,和一个admin的控制台,它们也一起部署在T430里面,然后我访问本地的admin,就可以上传文档、添加图片、触发build等等,进行这类操作。实装的部分并不复杂,难度在于调试bug,以及在使用的过程中不断地产生新的要求——或者是发现10分钟之前的自己太傻逼,把功能想的太简单,以至于要推翻重来(然后在10分钟后重复这个循环)。如此断断续续搞了一个周末,完成了可以稳定使用的0.2版本。我在这个版本写了许多文章,但主题渐渐地脱离了本来设想的技术类,完全转向了政治类——可能也是因为中国最近一段时间各种令人哭笑不得的事件。
在部署0.2版本的过程中,也把后端的那个引擎开源放在了GitHub上,我觉得还是会有人有和我类似的需求。不过,我在使用的过程中也感到了基于JS的Hexo的局限性——讲的简单一点,就是感觉打开的时候会有点卡,于是就开始把目光转向了基于Go的Hugo。但也因为那段时间比较忙,所以并没有花时间去继续调试自己的项目(倒是有时间打DOTA2,所以嘛…,没时间也仅仅是个借口)。
本博客的0.3版本是目前可以使用并正在使用的一个稳定版本,我最早其实只想导入hugo——以笔记作为唯一真源,让两个静态框架都能加载,然后分别生成两个静态网站。要实现这一步其实非常容易,但我没想到自己在Hugo的配置上花了不少时间(也有可能是那个人写的主题比较复杂)。
完成了这一步后,下面就是我一直想导入的两个新功能:其一是类似推特的短评论,包括后端的直接输入框和前端的对应UI选项卡;其二是一个本地部署的评论功能,我不想用任何所谓的“服务”,也不可能基于Github的issue再把我的博客往GitHub上部署一次,所以唯一的解法是自己写一个评论的Api,加在本来的express后端上,然后用Nginx搞反向代理,让两个静态网站都能用上这个Api。
短评功能的实现非常简单,几乎没有花什么时间。评论功能就很要命了,就算是在codex的帮助下,我因为不太熟悉数据库,也弄出了笑话——真的不小心把我在服务器上部署的全部文章给删除了。当然,每篇稳重在至少三个地方都有备份,所以我自己也不担心写的东西会丢失,但图片就不一样了。重新上传所有的文章并且调好图片和版式,花了我接近一个早上的时间才弄好。
最后实现的是,每一篇文章会在数据库里面形成一个UUID,同时也是新的一行,一旦有评论进来了,就会进行审核(如果是机器人就不放行了),到目前为止暂时没什么问题,可能需要进一步调试。
在0.3版本,我的写作流程和之前没有什么太大的区别。目前,我有三个不同平台的设备——Win10,MacOS和Arch Linux,它们三个都能在本地运行原生的obsidian。我首先在obsidian里面写好单独的一个笔记(其实就是一个md文件),然后访问admin界面(这个就不用暴露给外网了),把md文件上传上去,会自动检索里面的双向链接和超链接,最后要手动添加图片。我对这个流程是基本满意的,而且我个人非常反感在文章的里面(内部)添加图片,这个可能与我之前做自媒体的经历有关,所以所有的图片都会在文章的最后排列整齐。唯一一个让我目前还是有点不满的,就是对链接的处理。目前的情况是,如果上传的文章里面带了链接和双向链接,就会提示要上传HTML文件(因为我不信任超链接,随时都会失效,所以我用singlefile这个插件把对应的页面保存成了一个单独的HTML文件),或者上传新的md文件(假设双向链接的文章还不存在),或者指定对应的文章链接(双向链接的文章存在)。但因为绝大部分文章的默认链接都是中文(因为标题是中文),所以我还要去手动填写slug,这个操作会更新链接的URL,导致已经存在的链接失效。讲起来确实有点复杂,会在0.4版本解决这个问题,到那个时候也顺便更新一下这篇文章。








