把一间书房开到公网上:灵素书斋建站记
想开一个自己的网站,你会怎么做?
绝大多数人的答案是:装个 WordPress,再套个 Discuz! 论坛,付几笔授权费,然后在几十张设置页里迷路。插件一多,后台越点越卡;某天想改一处小样式,得先读懂别人十年的代码。对普通用户来说这是省事,对既想自己写点东西、又想给书友开个课堂的人来说,这是把命运交给别人。
灵素书斋走的是另一条路:整个网站没有一个第三方依赖。没有 npm install 之后上屏幕的千行警告,没有 node_modules 里那个著名的黑洞文件夹。博客、论坛、视频课程、辞典检索,全部建立在一个千余行的单文件服务之上——Node.js 自带的 SQLite,自带的 HTTP 服务,外加一套自己写的服务端渲染。package.json 的依赖清单是空的,部署就是拷一个目录。
一、内容优先:博客就是一座稿纸库
书房的门面是博客。文章用 Markdown 书写,服务端直接渲染成 HTML——不做客户端拼装,微信里点开、老浏览器点开,第一屏就是完整的正文。中文全文检索是最花心思的一块:不引分词库,靠 SQLite 自带的全文检索引擎加一套自己的索引策略,把单字、双字词、长术语都搜得又准又快,具体做法已经单独写过一篇《中文全文检索:不用分词库也能搜准》,这里不再展开。
写作后台该有的都有:草稿、定时上架前的预览、分类与标签、评论审核、置顶。这些功能不新,但每一处都按「写作者的顺序」摆——写完点保存,文章就出现在它该出现的位置。
二、论坛:把经典版式找回来
论坛首页是很多老网民的乡愁。主流方案越改越像信息流,板块淹没在卡片瀑布里。灵素书斋的论坛走回经典的简洁版式:一张板块总表,板块、主题数、帖子数、最后发表一目了然;点进板块,主题列表也是同一张表的逻辑——主题、回复、查看、最后发表,每行一个头像、一枚置顶徽章。
版式是照着 Discuz 经典简洁模式一笔一笔重画的:桌面端是清爽的表格,手机端表头自动收起、数字缩成行内小标签。没有富文本编辑器的重重工具栏,发帖就是写 Markdown——论坛本该如此,讨论的是内容,不是排版。
三、视频课程:视频在云端,服务器只递钥匙
书房不止有书,还想授课。课程模块的核心决定和玉函小程序一脉相承:大文件一律住云端,服务器永远不碰视频字节。视频、封面、音频版三条直链放在对象存储上,访客拖动进度条走的是 Range 请求,服务器只是签发入门凭证的那个人。
这套设计带来的几个结果:
- 上新课程是一条流水线:素材目录里放好 mp4 和封面,一条命令完成直传云端、探测时长、写入课程库——实测一讲 81MB 的视频七秒传完,重跑自动跳过已传部分;
- 每讲自动带音频版:流量紧张的时候,可以只听不看;
- 试看与付费的门禁在服务端:未开通的用户拿不到播放地址;免费课自动开通,付费课走订单,卡密兑换当场生效;
- 课程信息随时可改:标题、简介、价格、章节名都在后台编辑器里,改完即生效,也不怕被导入脚本覆盖——入库逻辑是「以库里你改过的为准」。
四、分享:为了一个二维码,写了一个编码器
课程页和章节页想让人转发到微信,需要一枚二维码和一张带封面的分享图。现成的二维码库当然有,但既然整座书斋零依赖,这一格也不能破——于是照着 ISO/IEC 18004 标准从零写了一个编码器:Reed–Solomon 纠错、八个掩码逐个打分择优、四十个版本自动选型,一样都没省。
写得出来,更要证明它是对的。验证做了三层:与一份成熟的参考实现逐格比对,89 组用例每一个模块完全一致;渲染成图再用真实的解码器读回;再把参考实现拉出来跑同样的解码,表现分毫不差——读不出的那些大版本密集码,两边一样读不出,说明限制在解码器,不在编码器。最后这一切固化成 118 项离线自测,每次改动跑一遍,指纹对不上就报错。
分享面板最后长这样:一枚白底黑码的二维码、一张竖版分享海报(封面画得进去就画,画不进去绝不强行导出),微信里打开还有一句「点击右上角 ··· 转发」的提示。细节不大,但用户第一次长按识别就能成功,这比什么都重要。
五、数码读者关心的几件事
1. 它有多「轻」?
整套站点不含任何第三方包。数据库是 Node 自带的 SQLite,全文检索靠它内置的 FTS5,Web 服务是原生 http 模块。进程内存占用以十位数 MB 计,小服务器足够。
2. 数据放在哪?
一切内容——文章、帖子、课程、订单、辞典索引——都在一个 SQLite 文件里。备份就是拷贝一个文件,迁移就是把文件带走。媒体文件在对象存储上,与数据分离,互不拖累。
3. 怎么部署?
Docker 容器 + 一条更新脚本。代码推上仓库,服务器跑一次脚本,重建、重启、开门,前后不到一分钟。本地开发与线上运行共用同一套代码与同一批脚本,从未出现过「在我电脑上是好的」。
4. 安全呢?
后台统一 CSRF 校验,上传走类型与大小双重限制,课程访问控制在服务端完成——前端藏不住秘密,钥匙永远不会交给没付费的人。
六、接下来
书房的骨架立住了,房间还会一间间添:更多课程在上架清单里,辞典检索会接进更多部工具书,论坛的小功能会按书友的真实需要慢慢长。所有这些新增,都遵守同一条家规——能自己写的不引入,能简单的不做重。
如果你也想拥有一间完全属于自己的书房,或者只是好奇「零依赖建站」到底能走多远,欢迎常来坐坐。这个网站本身,就是它技术方案最好的 Demo——你现在读到的这一页,也是它自己渲染出来的。
评论
还没有评论。