一个只记录日常的站
用同一套零依赖静态站方法搭起:一份 HTML 模板加一份数据 JSON,内容分短札、摘录、随笔三类,底色是历史与哲学。不注册、不互动、不交易,联系只留一个邮箱。
把亲手搭起来、或亲手改过的几个站按时间归档,过程与坑都写下来。
用同一套零依赖静态站方法搭起:一份 HTML 模板加一份数据 JSON,内容分短札、摘录、随笔三类,底色是历史与哲学。不注册、不互动、不交易,联系只留一个邮箱。
对接历史事件数据源,按朝代与年份排列事件,支持纪年换算与关键词检索。所有内容构建期拉取渲染,可追溯来源;空数据区块自动隐藏,不留空白。
本站本身即是那套方法的样板:记录零依赖静态站的搭法、埋点与收录的口径、个体工商户经营性备案下的合规边界,以及 GitHub SSH 推送部署。
建站、埋点与收录的实测笔记。
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,查询延迟稳定在毫秒级,比纯前端方案省下首屏体积。
把跑了两年的Nginx静态站迁到Caddy,起因是每次续签Let's Encrypt证书都要手动改配置并reload,而Caddy能自动完成签发与续期。做法:先用caddy adapt把现有server块转成Caddyfile作对照,再手写站点配置,用root指向静态目录、file_server开启目录服务、encode gzip zstd压缩、header设置缓存与安全头,最后加handle_errors自定义404。坑有两个:一是Caddy默认以caddy用户运行,站点目录权限不足导致403,改成目录组可读并给caddy组授权才通;二是原有的rewrite规则顺序在Caddy里被handle块重新排序,伪静态页面一度502,改用try_files等价写法后恢复。上线后证书自动续期正常,配置从80行降到30行,内存占用也更低。结论:纯静态站迁Caddy收益明显,但迁移前务必逐条核对rewrite与权限。
本站一直是纯静态页,想加评论又不想引第三方脚本,于是选了自托管方案:在轻量服务器上用 Docker 起服务,配 SQLite 存储、反向代理转发到子域名,前端只嵌一段轻量脚本。坑主要三处:跨域与 Cookie 属性导致登录态丢失,需显式配置 SameSite 与允许来源;容器重启后数据没持久化,卷挂载漏写路径,评论丢了一次;邮件通知依赖外部 SMTP,被限流后改为延迟重试。最终把数据目录纳入备份脚本,评论可用且无外部依赖。
没找到答案?直接联系我。