项目准备

这个博客使用纯 HTML 和 CSS,没有 Node 构建过程。仓库结构保持简单:首页在根目录,文章页按目录存放,公共样式在 assets 目录,404 页面放在根路径。这样部署平台不需要安装依赖,也不会因为构建环境变化产生差异。

site/
├── index.html
├── 404.html
├── favicon.svg
├── robots.txt
├── sitemap.xml
├── assets/
│   └── styles.css
├── articles/
├── archive/
└── about/

如果项目根目录就是 site,输出目录可以配置为当前目录;如果 site 是仓库子目录,则在平台里明确指定该目录。构建命令留空,可以减少部署时间和故障面。

部署流程

  1. 本地启动 HTTP 服务,检查首页、文章、归档、关于和 404。
  2. 确认所有链接使用统一的根路径或相对路径规则。
  3. 推送到 Git 仓库,让平台自动拉取。
  4. 在 EdgeOne Pages 中设置输出目录,构建命令留空。
  5. 绑定域名,按提示完成 DNS 接入。
  6. 发布后验证缓存头、安全头、备案链接和站点地图。

如果后续引入构建工具,建议在 CI 本地等价环境中先跑一次完整构建,并把产物目录作为唯一部署输入。平台只负责发布,不承担环境拼装职责,问题会更容易定位。

缓存分层设计

我的策略是让入口文档短缓存,指纹资源长缓存。HTML 更新频繁,需要尽快可见;CSS、JS、图片和字体基本不变,应该尽量留在边缘节点。

路径缓存策略原因
/ 与 /articles/短 TTL,例如几分钟新文章入口需要较快可见
/assets/*长缓存,内容变化时换文件名最大化边缘命中
/sitemap.xml中等 TTL搜索引擎抓取不需要实时
/404.html短缓存避免错误状态被长期固定
核心原则:宁可让入口文档多回源几次,也不要让带指纹的静态资源频繁失效。前者影响发布速度,后者影响全球访问性能。

发布后的验证

# 入口文档:确认状态码和跳转
curl -I https://example.com/

# 静态资源:确认缓存与压缩
curl -I https://example.com/assets/styles.css

# 文章页:确认路径可访问
curl -I https://example.com/articles/edgeone-pages-deployment-caching/

# 404:确认自定义错误页生效
curl -I https://example.com/not-found/

检查响应时,我会关注状态码、Cache-Control、Content-Type、Content-Encoding、Vary 和平台命中标识。手机网络下再用浏览器无痕模式打开一次,可以排除本地缓存干扰。

域名与备案展示

面向国内用户提供服务的网站,需要完成备案并按要求展示备案号。本站把备案号放在全站页脚,并链接到工信部备案系统。个人博客保持纯内容浏览,不提供评论、私信、用户注册等内容功能,能降低合规复杂度。

绑定域名后,要确认 HTTPS 证书、跳转规则和 www 与裸域的一致性。建议先让一个域名稳定运行,再考虑别名域名,避免重复收录和缓存策略不一致。

回滚策略

静态站回滚很简单:保留上一次构建产物或 Git 版本,重新发布即可。为了避免 DNS 和缓存混杂,我会把代码回滚与缓存刷新分开处理,先恢复内容,再验证入口文档,最后必要时刷新少量 URL。

小结

EdgeOne Pages 适合这种无动态状态的静态博客:源码可版本化、部署可重复、资源就近分发。把缓存规则、验证命令和回滚步骤写清楚后,每次发文章只需要关注内容本身。