历史
从折腾域名,家里云这些开始到现在也有好几年了,之所以自己去搞这些基础设施,更多的是为了上层服务搭建的运行平台,博客也是如此。
我最早是用
WordPress搭建了我的第一个博客,部署在HomeLab上,使用Cloudflare作为内容分发网络(CDN),CF对国内的“加速”效果配上php的cgi以及服务端渲染的运作模式,想不慢都难,后面更是慢到进后台都难受,加载许久。
过了几个月,我在给项目制作文档时,从众多静态站点生成(SSG)框架中选择了
VuePress,然后过了一段时间又迁移到了
VitePress,并把他们部署到一些静态页面托管平台上面,例如GitHub Pages,Vercel,用着没什么问题,很适合作为内容管理系统。缺点是没有服务端,且需要配合CICD部署,不过这也还好,每次写完文章提交就行。不过我发现,我的业务规模总是膨胀的非常快的,很快这些静态博客便不能满足我的奇奇怪怪的需求,例如互动,数据统计,后台,以及一些自定义小组件。
在上述需求增加的情况下,我选择了新的内容管理系统Halo,它后端由Java编写,运行速度也还行,同时期,我的朋友
释然也搭建了一个CDN系统供我们使用,在良好的线路优化下,网站访问速度得以大幅提升。不过很快,Halo便又不能满足我的需求,例如我想加一个自己的小组件,但是面对这种模板化的系统,我不能在不侵入的情况下实现我的功能,也不太好实现微调,我是那种想做一次事就达到一劳永逸的效果。
想法
于是,从那时开始我便有了想要自己写一个博客系统的想法,不过后面一直没有驱使我去行动的动力,直到后面看到了
Ariasaka酱自己写的博客后,我才决定开始自己写一套(不过也是决定开始,还没有真正开始),最开始的技术栈选型是前端
Vue.js(因为那会我只会这个,而且学的不深,我是主后端开发的,前端只是兴趣),后端Go(
Gin)或者Python(
FastAPI),正巧那会Vercel的前端AI工具
v0因为其出色的表现力突然在圈子里面爆火,我也去尝试了一下,生成的页面效果非常惊艳我,当时我让它帮我做了一个展示页,在多次改版后,v0的额度被我用完了,于是我只能把v0生成的半成品项目拉下来自己改,但是它生成的是
nextjs项目,没办法为了看懂项目我在没有react基础的情况下用一天时间速通了react和nextjs,被react的设计理念所吸引,当时我感觉nextjs算是一个开箱即用的react套装,内置了
tailwindcss,十分甚至九分好用,且AppRouter对于路由管理也比较友好。
实践
在用nextjs实现了几个项目之后,被nextjs的便利性吸引,我决定博客前端使用nextjs来编写。部分页面使用react的服务端渲染来优化SEO,后端使用字节跳动的
cloudwego/hertz框架,数据库选择支持sqlite和postgres两种(感觉一种本地一种网络就行,支持多了没啥意义),组件库使用
shadcn,便有了现在这个neo-blog。neo-blog最初只是给我自己设计的,很多数据驱动的内容都是直接写死在代码中,后面逐渐让它们变的可配置,但是要做到很灵活的话,我还是不想花精力去模块化这些组件,例如小卡片,特殊功能,学校课表等等,最好就是一股脑全做了然后选择性配置,也可以做成插件化的,但是以我对前端项目的构建和运行机制的理解来说暂时无法做到,到我编写这篇文章的时候,neo-blog作为一个博客的基础功能已经完成了,基本的内容管理系统是没问题的,可能会有些许Bug,这个发现随时去修一下就行了,因为是我自己写的,哪里出问题了我能够很快找到原因并修复,但是如果是别人的,那可能就得开issue,然后等回复,或者去尝试贡献PR。
部署的话,肯定是首选容器化啦,这年头任何一个web应用项目不支持容器化部署的都可以淘汰了(有时候也可以从侧面反应出开发者的水平,过滤掉不良项目),我觉得传统部署例如使用systemd启动是很麻烦的事情,各种环境安装问题,环境不一致问题纯属自己给自己找事。同时轻雪云也支持容器和静态页面托管,我的大部分服务都在轻雪云上面。轻雪云有配套的CDN网关(由007IDC提供支持),WAF,容器部署(Docker & Kubernetes),CICD,容器仓库等云原生基建平台,当然这些都是给我自己用的。
最后
希望这个博客在我的管理下成长的越来越好,等一阵子我会把之前博客的文章也迁移过来
最后感谢一下前端设计的灵感来源: