关于本站

255 分享站是建站的个人博客,专注于技术笔记、效率工具与资源分享。零 JavaScript 依赖,打开即读。

这是什么

255 分享站是我用来存放技术笔记、工具推荐与资源整理的地方。

写作的原则很简单:一篇只讲清一件事,尽量给出可以直接执行的命令、能够复制的代码。

为什么做成非交互式网站

这个站没有登录、没有评论框、没有点赞按钮,前台也没有注入任何一行 JavaScript。 样式全部内联在 HTML 里,深色模式交给 CSS 的 prefers-color-scheme 跟随系统。 所以打开就能读,不存在「等脚本执行完才显示内容」的白屏。

它是怎么跑起来的

和「提前把页面生成成 HTML 文件」的静态站不同,这里用的是伪静态: URL 保持静态形态,内容由 Go 在每次访问时实时渲染。

静态站 本站
URL 形态 /posts/xxx/ /posts/xxx/(一样)
HTML 谁生成 构建时一次性生成 Go 每次访问时实时渲染
改一篇文章 跑构建 → 同步文件 → 刷新 保存 → 刷新
部署物 一堆 HTML 文件 一个二进制文件
「构建失败」 有可能发生 不存在这一步

对访问者和爬虫来说两者没有区别,差别只在服务器端。 换来的是写作体验:改完就是最新的,不会出现「忘了重新构建」这回事。

技术上是怎么实现的

一个 Go 程序同时做前台和后台。 前台负责渲染页面,后台在 /admin/, 用来写文章、传图片、改站点设置 —— 两者共用同一个进程、同一份配置。

文章就是 Markdown 文件,放在 content/posts/ 下,元信息写在 frontmatter 里。 没有数据库,要备份就是把 content/ 和 images/ 两个目录拷走。

模板、样式和初始文章都编译进了二进制(Go 的 embed 机制)。 所以部署时只需要上传一个文件,不用 npm install,也不用担心少传了某个目录。

渲染结果有内存缓存,只有首次访问某篇文章才会真正解析一次 Markdown, 之后的请求只是拼接字符串。

程序只监听 127.0.0.1,外部流量由 nginx 反代进来 —— 端口不需要对公网开放,nginx 那边一条反代规则就完成了「伪静态」的效果。

备份与迁移

因为排除了数据库,整站的数据就是几个目录和文件:

content/posts/     文章
images/            图片
config.yaml        配置
data/state.json    后台密码

把这四样拷到另一台机器,放上同一个二进制,站点就整个搬过去了。

联系

有问题或者想交流,可以发邮件到 longjie@dhljhl.cn。