对话笔记直发:7.10个人主页+博客 部署说明文档。分类:AI工程。

个人站点部署说明文档

记录日期:2026-07-10 作者:CodeBuddy Code(协助部署) 目标:在 Cloudflare Pages 免费额度上部署两个个人站点,并打通 Obsidian 笔记自动发布链路。


一、最终成果总览

站点域名GitHub 仓库Cloudflare Pages 项目本地目录
个人主页(链接聚合页)https://fengx.eu.orgunixcs/homepagehomepage-fengx/mnt/demo/homepage
第二大脑博客(Quartz v5)https://blog.fengx.eu.orgunixcs/blogblog-fengx/mnt/demo/quartz-site

两个站点均已上线(HTTP 200),发布链路为:本地/NAS → git push 到 GitHub main 分支 → GitHub Actions 自动构建 → 部署到 Cloudflare Pages。


二、今日完成的工作

1. 规划架构(第一性原理)

  • 复刻 sink.cool 文章中的 Cloudflare Pages via GitHub Fork/Upload 部署方法。
  • 参考 jackyzha0/quartz 搭建 Obsidian「第二大脑」静态博客。
  • 确定方案:
    • 不本地 NAS 托管,先用 GitHub 上传 + Cloudflare 免费额度。
    • 两个站点都部署到 Cloudflare Pages(而非 Workers)。
    • 博客使用子域名 blog.fengx.eu.org,主页为链接聚合页。
    • 主页右上角加一个超链接按钮跳转博客。

2. 部署个人主页(链接聚合页)

  • 在 /mnt/demo/homepage 创建静态站点:index.html + styles.css + README.md。
  • index.html 含右上角固定按钮:
    <a class="top-btn" href="https://blog.fengx.eu.org" target="_blank" rel="noopener">博客 ↗</a>
  • 暗色/亮色响应式样式,含占位内容(“你的名字” 等需后续替换)。
  • 配置 .github/workflows/deploy.yml,通过 AdrianGonz97/refined-cf-pages-action 将 . 部署到 homepage-fengx。

3. 部署 Quartz v5 博客

  • 克隆 jackyzha0/quartz v5 到 /mnt/demo/quartz-site。
  • 编辑 quartz.config.yaml:
    • pageTitle: 你的第二大脑
    • baseUrl: blog.fengx.eu.org
    • analytics.provider: false
  • 创建 content/index.md 欢迎页(含返回主页链接)。
  • 配置 .github/workflows/deploy.yml:npx quartz build 后把 public/ 部署到 blog-fengx。

4. GitHub 仓库创建与推送

  • 用户提供 GitHub 用户名 unixcs。
  • 通过 GitHub REST API 创建两个仓库(unixcs/homepage、unixcs/blog)。
  • 用 SealedBox + Base64 加密方式,向两个仓库写入 Actions 加密密钥:
    • CLOUDFLARE_API_TOKEN
    • CLOUDFLARE_ACCOUNT_ID
  • 修复了 quartz-site 浅克隆(shallow/grafted)导致的 index-pack failed,改为 rm -rf .git + git init -b main 干净提交推送。

5. Cloudflare 域名绑定与 SSL

  • 确认 fengx.eu.org 归属 CF 账户 cee99a8e075a84020e39bfbad8d04316(Unixcs@qq.com)。
  • 删除 apex 上冲突的 AAAA 记录。
  • 通过 CF API 创建代理(proxied)CNAME:
    • fengx.eu.org → homepage-fengx.pages.dev
    • blog.fengx.eu.org → blog-fengx.pages.dev
  • SSL 证书自动签发为 active,两域名均返回 HTTP 200。

6. Hermes 自动推送(部署后又卸载)

  • 曾在 jp 服务器上以 systemd 方式部署了一个 Hermes 风格自动推送脚本:
    • /mnt/vps/jp/hermes/hermes-blog-autopush/hermes_blog_autopush.py
    • .service + .timer(每 5 分钟,仅在检测到内容变化时提交推送)
  • 用户反馈:本地 NAS 上已安装真正的 Hermes,jp 上的脚本多余。
  • 已卸载:停止并禁用 systemd timer/service、删除两个 unit 文件、daemon-reload、rm -rf /mnt/vps/jp/hermes。
  • 验证:无任何 hermes 残留单元,/mnt/vps/jp/hermes 已不存在。两个站点与 GitHub→CF 流水线不受影响。

三、关键踩坑与修复

  1. cloudflared Argo Token 不能调 CF API:~/.cloudflared/cert.pem 是 Argo 隧道令牌,不是 TLS 证书,建 Pages 项目返回 403。最终用用户提供的专用 CF API Token(cfut_…)完成操作。
  2. fengx.eu.org 不在 cloudflared 所属账户:实际归属账户 cee99a8e075a84020e39bfbad8d04316。
  3. GitHub Fine-grained PAT 不能建仓库:返回 403。用户改用 classic PAT(ghp_…)后正常。
  4. GitHub 密钥加密 422:Box.encrypt 报 “improperly encrypted”,改用 SealedBox(pub).encrypt(...) + Base64 解决。
  5. Quartz 浅克隆推送失败:remote unpack failed: index-pack failed,重建 git 仓库解决。
  6. 自定义域名一直 pending:apex fengx.eu.org 有冲突 AAAA,手动删除并建代理 CNAME 后 SSL 才生效。

四、当前状态与后续

当前状态

  • 两个站点均在线,部署流水线完好。
  • jp 服务器上的 Hermes 脚本已彻底移除。
  • 本地项目目录保留在 /mnt/demo/homepage 与 /mnt/demo/quartz-site。

后续可选项

  1. 替换主页占位内容:编辑 /mnt/demo/homepage/index.html 中的 “你的名字”、链接、简介。
  2. 博客添加示例文章:在 /mnt/demo/quartz-site/content/ 放一篇 .md。
  3. Obsidian 自动发布:由你 NAS 上的真实 Hermes 把笔记提交/推送到 unixcs/blog 仓库的 content/,CF 流水线自动重建发布。

重要凭据位置(请勿外泄)

  • GitHub classic PAT:/mnt/demo/gihub.md
  • Cloudflare API Token:cfut_…(已作为仓库 Actions 密钥,无需明文出现在仓库)
  • CF 账户 ID:cee99a8e075a84020e39bfbad8d04316
  • 域名 Zone:fengx.eu.org

五、发布流程速查

# 主页发布
cd /mnt/demo/homepage
git add -A && git commit -m "update" && git push origin main
 
# 博客发布(编辑/新增 content/ 下的 .md 后)
cd /mnt/demo/quartz-site
git add -A && git commit -m "new note" && git push origin main
# GitHub Actions 会自动 npx quartz build 并部署 public/

推送后到 GitHub 仓库 Actions 标签页查看构建进度,约 1–2 分钟上线。



相关: 00-索引-AI工程索引 7.25 在 yun1 部署 new-api 并通过 Cloudflare 域名 HTTPS 访问 — 实操记录