首页首页
文章文章
标签标签
分类分类
logokzhik.cn
首页首页
文章文章
标签标签
分类分类
友情链接友情链接

从头开始:这个网站背后的事

2025-5-19202 0字(大约0分钟)
随笔随笔
博客搭建博客搭建
内容管理内容管理
反思反思
踩坑日常踩坑日常

起初:我只是想重写一下我的网站 UI

这一切的开始是因为我的硬盘掉盘了,原本那个写得乱七八糟的个人网站源代码也一并丢失了。

我想,那就重写一个吧,反正原来的代码我自己都看不下去。这次打算做个简单一点的纯静态页面,主要是更新一下 UI,看起来舒服点

但问题是,原来那套纯静态的结构,每次要改点内容(比如友情链接)都得重新改代码、重新构建再部署一遍,非常麻烦。我当时想:要不写几个简单的接口,让我可以直接改内容?

但一琢磨,既然都要写接口了,那干嘛不干脆做全套后台系统呢?

找个CMS用用

中途我试过 WordPress,但我发现它的局限性挺多,特别是我不想用它默认的页面模板系统,只想单纯当个内容管理后端来用。结果一碰到实际需求,比如权限控制、接口返回内容结构,WordPress 反而变得有点笨重了

后来我接触到了一个新的概念:Headless CMS(无头 CMS)。这个概念一下子就打动了我——我只需要搭好前端逻辑,后端只做内容管理和 API 提供,不再绑死在页面模板里。

出于这个方向,我尝试了 Directus,一个非常灵活、功能也很强的 Headless CMS。它的灵活程度甚至可以说接近直接操作数据库

这个是个非常强大的CMS。但最终我还是放弃了它,原因主要有两个:

  1. 我必须手动配置 schema(数据结构):上线前还得自己一张一张地建表,配置字段,一旦字段设计要调整,还得回头维护。那很坏了😅
  2. 所有内容都存进数据库,包括 Markdown 文档:对于博客来说,这类内容是相对静态的文本,用数据库来管理反而显得臃肿,失去了 Markdown 文件应有的灵活性和可读性

现在回头看,Directus 其实更适合做企业内部系统的内容管理,或者用于团队协作式的后台场景。用它来做个人博客这种小体量、低变动的项目,反而显得不好用了

那时候我想到到了“也许自己写一个后端,反而更简单一些” 很显然那个时候的我还没意识到问题的严重性🫠

还是自己写吧

一开始其实也只是想做点简单的东西,比如把 header 里的链接配置抽出来,这样我以后就不用每次都改代码重新部署了。

这部分的逻辑不复杂,很快就做好了。但我意识到,如果 header 可以动态控制,那友链这些是不是也可以存数据库、通过接口管理?

于是我就开始接入数据库,最初我试着写了一个非常简化的“ORM” 它只是封装了几行基本的 SQL 操作,让我可以少写点 CRUD 逻辑。

但用了一阵我发现不对劲——我几乎把时间全花在维护这个轮子上了,尤其是字段映射和条件拼接这些地方,一旦数据结构稍微复杂点,维护成本就蹭蹭上涨。

于是我换成了 GORM,后来证明我这个决定是对的

原因有以下几点

  1. 自动迁移:我不再需要手动写 SQL 初始化数据库结构,AutoMigrate 能帮我完成 schema 的创建,这大大降低了出错和重复工作
  2. 写起来很顺:GORM 本身的设计就非常灵活,它的 API 接近自然语言式的表达,让我在写数据库逻辑时几乎不会卡壳

关于数据的组织,因为有了 GORM 的助力,进展还算顺利,很快就完成了数据库设计。

但接下来我意识到一个大问题——数据库搭好了,可我该怎么管理数据呢?总不能天天手动去操作数据库吧?

这时候我才发现,自己挖了一个大坑——管理面板。

起初,我是把管理面板直接集成进后端项目里的。刚开始觉得这样方便,部署也简单,但用着用着问题就暴露出来了:

  • 面板和后端不独立,更新面板的时候就得连后端一起重启;
  • 而且代码混在一起,也把后端的项目结构搞得很乱。

于是我干脆把面板单独拆了出来。好处也非常明显: 我可以用前端框架 + TypeScript 来写面板了,不再受限于后端的模板系统和语言环境,开发体验一下子轻松了很多

当然这也带来了一些问题

  • 独立之后,意味着部署流程更复杂了
  • 虽然后期我做了一些优化,但为了安全性,目前的部署机制仍然稍显繁琐

虽然后端的结构和功能还在逐步完善,但基础的内容管理系统已经能用了。 既然数据有了、接口也跑得通了,接下来就是做一件表面功夫——把网站做得像个样子

说实话,前端这部分其实没太多东西可以讲。

因为我从一开始就考虑了 SEO 和内容渲染,所以直接选择了 Nuxt —— 服务端渲染、路由系统成熟

但虽然功能不复杂,我却在这部分花了大量时间。 一方面是动画、布局反复调试;另一方面……纯粹就是“看着不爽就想改”。 不过截止到目前其实还有很多功能没有实现

Futures

有些功能已经上线了,有些还在路上。
就当是一个 TODO 清单,慢慢补完:

  • RSS
  • 友情链接
  • 点赞功能
  • 留言板
  • 评论系统
  • 我的项目
  • ......

总结一下

这个网站的开发其实断断续续花了我差不多三个月时间,现在也还只是个“功能够用”的半成品

为了把它跑起来,我折腾过 CMS、重写过数据库操作、拆分过管理面板,也几乎把前端重构了几遍
光是动到的技术就一长串:go-chi、GORM、Nuxt、Tailwind CSS、Docker、Nginx、Redis……

文章里很多地方其实讲得比较简略 —— 有些细节实在太碎、太杂,没法一一展开。
但它们的确构成了我这段时间开发的主旋律:一边踩坑、一边修坑,再顺便盖点新房子

讲到底,这个项目对我来说更像一个实验场,也是一个能折腾、能乱来的地方
虽然还有很多功能没做完,但至少现在它终于能用了,那就够了


从头开始:这个网站背后的事

本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。
转载请注明来自 www.kzhik.cn

CCBYNCSA
copyright

评论

kzhik's website


本站靠 Nodejs 和 Golang 以及我写的屎山代码居然运行了 0 天 0 时 0 分 0 秒

logo
赣ICP备2025064215号

Design & Built by kzhik

© 2025 kzhik. All rights reserved.

隐私政策友情链接RSS