这个网站。

怎么搭的、跑在哪、改过什么。
没有一行是买的模板。

用什么做的

页面
手写的 HTML、CSS 和原生 JavaScript。没有框架,也没有构建步骤,改完推上去就是线上。
后端
Node.js + Express + MySQL 8。接口只有两组:文章和评论。
跑在哪
一台 Racknerd 的 VPS,965MB 内存,Ubuntu 20.04。Nginx、API、MySQL 各一个 Docker 容器。
评论
自己写的。不登录、不填邮箱、昵称自动生成,留言先审后发。原来用的是 Giscus,因为它要求访客有 GitHub 账号,就换掉了。
写作
文章在 Obsidian 里写,用仓库里的 scripts/publish.mjs 发布,正文按 Markdown 渲染。
订阅
RSS 在 /feed.xml,发布时自动更新。

改一次要经过什么

  1. 在 VS Code 里改,本地先跑测试:后端 59 条断言,评论 Markdown 渲染器 15 条。
  2. 提交推送到 GitHub。静态站和后端是两个仓库,分开部署。
  3. 静态站由 GitHub Actions 接手:SSH 到服务器拉代码,重启 Nginx。
  4. 后端由服务器上的定时任务每 5 分钟拉一次,部署前先过一道语法检查,不通过就回滚代码、也不重启容器。
  5. 改了环境变量要另外重建容器——那些值是容器创建时烤进去的,光重启读不到。
  6. 写完文章在 Obsidian 里执行发布脚本,它会提交到数据库并重新生成 RSS。

更新记录

2025.12 第一个版本上线,还是个便当盒格子页。
2026.01 开始学 Docker,把 API 部署到自己的服务器上。
2026.02 Nginx 反向代理配好,按域名分流到博客、网盘和面板。
2026.05 数据库被勒索扫描器清空,旧博客数据没了。原因是当时 3306 端口直接对公网开放。
2026.08 重建 MySQL 和文章表,从此 3306 只绑本机。
2026.10.01 博客后端容器化,文章接口上线。
2026.10.03 评论区从 Giscus 换成自己写的:免登录、蜜罐、限流、先审后发,加表情回应。后端改用连接池,并给两个仓库都配上自动部署。
2026.10.04 评论支持排序、Markdown 和楼中楼回复;加了 RSS 和 Obsidian 一键发布;服务器端口收口,管理面板停用。
2026.10.05 代码结构大整治:前端改用原生 ES Module、样式按页面拆分,后端拆成模块并迁移到 async/await,两个仓库都加上 lint 和测试门禁。

还没做的

敏感词过滤、评论分页、文章归档页。最主要的是文章还太少——这个站现在功能比内容多。