斋
灵素书斋建站记

把一间书房
开到公网上

—— 不用现成程序、零个第三方依赖的建站之路

2026 年 9 月·技术·约 6 分钟读完

0个第三方依赖
1个文件装下全部数据
118项离线自测
7 秒一讲课程上云

想开一个自己的网站,你会怎么做?绝大多数人的答案是:装个 WordPress,再套个 Discuz! 论坛,付几笔授权费,然后在几十张设置页里迷路。灵素书斋走的是另一条路——整座网站没有一个第三方依赖。

壹

内容优先:博客就是一座稿纸库

书房的门面是博客。文章用 Markdown 书写,服务端直接渲染成 HTML——不做客户端拼装,微信里点开、老浏览器点开,第一屏就是完整的正文。

中文全文检索是最花心思的一块:不引分词库,靠 SQLite 自带的全文检索引擎加一套自己的索引策略,把单字、双字词、长术语都搜得又准又快。

写作后台该有的都有:草稿、上架前的预览、分类与标签、评论审核、置顶。这些功能不新,但每一处都按「写作者的顺序」摆——写完点保存,文章就出现在它该出现的位置。

贰

论坛:把经典版式找回来

论坛首页是很多老网民的乡愁。主流方案越改越像信息流,板块淹没在卡片瀑布里。灵素书斋的论坛走回经典的简洁版式:一张板块总表,板块、主题数、帖子数、最后发表一目了然;点进板块,主题列表也是同一张表的逻辑。

版式是照着 Discuz 经典简洁模式一笔一笔重画的:桌面端是清爽的表格,手机端表头自动收起、数字缩成行内小标签。没有富文本编辑器的重重工具栏,发帖就是写 Markdown。

论坛本该如此:讨论的是内容,不是排版。
叁

视频课程:视频在云端,服务器只递钥匙

书房不止有书,还想授课。课程模块的核心决定和灵素玉函小程序一脉相承:大文件一律住云端,服务器永远不碰视频字节。视频、封面、音频版三条直链放在对象存储上,访客拖动进度条走的是 Range 请求,服务器只是签发入门凭证的那个人。

一条流水线上新

素材目录放好 mp4 和封面,一条命令完成直传云端、探测时长、写入课程库——81MB 一讲实测七秒传完,重跑自动跳过。

每讲自带音频版

流量紧张的时候,可以只听不看。

门禁在服务端

未开通拿不到播放地址;免费课自动开通,付费课走订单,卡密兑换当场生效。

信息随时可改

标题、简介、价格、章节名都在后台编辑器里,改完即生效,入库逻辑「以你改过的为准」。

肆

分享:为了一个二维码,写了一个编码器

课程页想让人转发到微信,需要一枚二维码和一张带封面的分享图。现成的二维码库当然有,但既然整座书斋零依赖,这一格也不能破——于是照着 ISO/IEC 18004 标准从零写了一个编码器:Reed–Solomon 纠错、八个掩码逐个打分择优、四十个版本自动选型,一样都没省。

写得出来,更要证明它是对的。验证做了三层:与成熟的参考实现逐格比对,89 组用例每一个模块完全一致;渲染成图用真实解码器读回;再把参考实现拉出来跑同样的解码,表现分毫不差。最后固化成 118 项离线自测,指纹对不上就报错。

分享面板:白底黑码的二维码,长按即识;
竖版分享海报画得进封面就画,画不进绝不强行导出。
伍

数码读者关心的几件事

它有多「轻」?

整套站点不含任何第三方包。数据库是 Node 自带的 SQLite,全文检索靠内置 FTS5,Web 服务是原生 http 模块。进程内存以十位数 MB 计,小服务器足够。

数据放在哪?

一切内容——文章、帖子、课程、订单、辞典索引——都在一个 SQLite 文件里。备份就是拷一个文件,迁移就是把文件带走。媒体在对象存储上,与数据分离。

怎么部署?

Docker 容器 + 一条更新脚本。代码推上仓库,服务器跑一次脚本,前后不到一分钟。本地与线上共用同一套代码,从未出现过「在我电脑上是好的」。

安全呢?

后台统一 CSRF 校验,上传双重限制,课程访问控制在服务端完成——前端藏不住秘密,钥匙永远不会交给没付费的人。

陆

接下来

书房的骨架立住了,房间还会一间间添:更多课程在上架清单里,辞典检索会接进更多部工具书,论坛的小功能会按书友的真实需要慢慢长。所有新增,都遵守同一条家规——

能自己写的不引入,能简单的不做重。

如果你也想拥有一间完全属于自己的书房,或者只是好奇「零依赖建站」到底能走多远——欢迎常来坐坐。你现在读到的这一页,是特稿版式;同一篇文章的博客版已经进了书斋的检索与归档,两条路,同一间房。

本页为《灵素书斋建站记》特稿版 · 由灵素书斋自己渲染的站点托管