一个只记录日常的站
用同一套零依赖静态站方法搭起:一份 HTML 模板加一份数据 JSON,内容分短札、摘录、随笔三类,底色是历史与哲学。不注册、不互动、不交易,联系只留一个邮箱。
把亲手搭起来、或亲手改过的几个站按时间归档,过程与坑都写下来。
用同一套零依赖静态站方法搭起:一份 HTML 模板加一份数据 JSON,内容分短札、摘录、随笔三类,底色是历史与哲学。不注册、不互动、不交易,联系只留一个邮箱。
对接历史事件数据源,按朝代与年份排列事件,支持纪年换算与关键词检索。所有内容构建期拉取渲染,可追溯来源;空数据区块自动隐藏,不留空白。
本站本身即是那套方法的样板:记录零依赖静态站的搭法、埋点与收录的口径、个体工商户经营性备案下的合规边界,以及 GitHub SSH 推送部署。
建站、埋点与收录的实测笔记。
2026 年 11 月 11 日零点,我把跑了 14 个月的静态站从旧 VPS 挪到新机器,全程用 rsync 加 systemd 重写服务单元,没动一行业务代码。迁移前先在新机跑了一遍 nginx -t 和证书续期 dry-run,结果卡在 TLS 1.2 的 OCSP 装订上:旧机靠 cron 手动 stapling,新机没配 resolver,浏览器首屏多等了一个往返。第二个坑是 301 规则,旧机把 /posts 全量跳转到带斜杠路径,新机复制配置后忘了同步 try_files,首页索引直接 404。第三个坑在 rsync:加了 --delete 却没排除 .well-known,acme 验证目录被清空,凌晨一点半重新签发证书。剩下四个坑分别是日志轮转权限、防火墙放行 80 端口顺序、systemd 的 RestartSec 设得太短导致重启风暴、以及旧机没关停造成双写。凌晨三点全部收尾,TTFB 从 480ms 降到 210ms,次日抓取日志里 200 状态码占比回到 99.2%。结论:迁移前先在新机完整跑一遍证书与路由,比事后回滚省事得多。
11 月 10 日晚上把 585.ink 从用了两年的香港 1C1G 小机迁到新的 2C2G 节点,装的是 1Panel 面板加 OpenResty。做法是先在新机用面板建站、导入原 Nginx 配置和证书,再改 DNS 的 A 记录并压低 TTL 到 60 秒,等解析生效后停旧机。踩到的坑有两个:一是面板默认伪静态把 WordPress 的 wp-json 路由拦了,REST API 报 404,手动补了一条 location 规则才好;二是旧机 MySQL 5.7 导出用 mysqldump 带 --single-transaction,导入新机 MariaDB 后时间字段有偏移,核对时区改成 +08:00 才对上。整站迁移耗时约 40 分钟,首页 TTFB 从 620ms 降到 310ms,后面打算把静态资源也交给面板的 CDN 缓存。
11 月 9 日这台 2 核 4G 的轻量云主机上,站点仍跑在 docker run 手动起的容器里,重启后要人工 docker start,日志靠 docker logs -f 挂着看。这次把 Hugo 生成的静态目录交给 Caddy,用 systemd 单元直管 caddy 进程,容器只保留 PostgreSQL。做法:写 /etc/systemd/system/caddy.service,ExecStart 指向 /usr/local/bin/caddy run --config /etc/caddy/Caddyfile,Restart=on-failure,RestartSec=5,加 ProtectSystem=strict 与 ReadWritePaths=/var/log/caddy;Caddyfile 里 root * /srv/585,file_server,encode gzip,日志走 /var/log/caddy/access.log。坑有两个:一是 caddy 用户没有 /srv/585 读权限,403 排查了二十分钟,chown -R caddy:caddy 解决;二是 systemd 下 PATH 不含 /usr/local/bin,ExecStart 必须写绝对路径。结论:重启后 12 秒站点恢复,内存占用从 380MB 降到 96MB,日志按天切分不再撑爆磁盘。
11 月 8 日凌晨两点,我把跑在旧 VPS 上的 585.ink 整体迁到一台新机器:先把静态产物用 rsync 同步到新机 /srv/site,再切 Nginx 配置,Let's Encrypt 证书用 certbot 重新签发而不是直接拷旧文件,最后改 DNS 的 A 记录并把 TTL 提前一天压到 300 秒。中途遇到的问题:旧机 Nginx 里有一条 rewrite 规则没跟着搬,迁完首页 200、内页全 404;rsync 漏了 --exclude 导致 .git 目录被同步过去占了 1.2GB。教训是迁移前列一份完整清单,DNS 先降 TTL,切完观察 24 小时再关旧机。
站点文章过百后,前端 Fuse.js 全量加载 JSON 已让首屏明显变慢,遂改为构建期生成 SQLite FTS5 索引、后端只暴露一个查询接口。做法是写脚本遍历 Markdown 的 front matter 与正文,用 better-sqlite3 建表并插入,正文走 unicode61 分词、标题加权,同时把每篇的 slug 与摘要存成普通列便于回显。踩坑有三:一是中文分词默认按字切,长词检索命中差,改为在写入前做一次简单的二元切分并保留原串;二是索引文件随构建产物一起发布,被静态托管当普通文件下载,改用反向代理只允许 POST 查询;三是增量构建时表结构不一致导致查询报错,最终每次全量重建并加版本号校验。结论:百来篇文章索引不到 2MB,查询延迟稳定在毫秒级,比纯前端方案省下首屏体积。
没找到答案?直接联系我。