一个基于 Astro 的内容型个人网站,面向以下目标:
- 中文优先的个人主页、项目页和公开笔记页
- 从私有
notes仓库中拉取可发布 Obsidian 笔记 - 用静态数据维护精选项目,不直接镜像全部 GitHub 仓库
当前站点名称:LiuJrX-Space
//notes/notes/[slug]/tags/tags/[tag]/projects/about
公开笔记需要使用以下 frontmatter:
title: "文章标题"
publish: true
pubDate: 2026-05-07
updatedDate: 2026-05-07
summary: "一句摘要"
tags:
- AI
- Notes建议使用 Node >= 18.17.1。当前这台机器自带的系统 Node 较旧,如果本地也遇到版本问题,优先升级 Node 再运行。
npm install
npm run dev如果暂时没有配置私有仓库读取,站点会继续使用仓库内置的示例笔记。
构建前会运行 scripts/sync-notes.mjs。需要配置:
NOTES_REPO=LiuJrX/Notebook
NOTES_BRANCH=main
GITHUB_TOKEN=ghp_xxx说明:
NOTES_REPO指向私有 notes 仓库- 脚本会扫描整个笔记仓库,只同步
publish: true的文章 - 笔记列表和首页“最近笔记”按
updatedDate倒序排列 - 笔记详情页会同时显示
pubDate和updatedDate - 默认会忽略
.obsidian、Daily、Templates、Private等目录 - 如需自定义忽略目录,可设置
NOTES_IGNORE_DIRS=dirA,dirB,dirC - 同步出的文件会落到
src/content/notes/generated/ - 文章中使用 Markdown 相对路径引用的本地图片,也会按原相对路径一并同步
这个项目适合直接部署到 Cloudflare Pages。
把仓库 LiuJrX/LiuJrX-Space 导入到 Cloudflare Pages。
建议使用下面这组配置:
- Framework preset:
Astro - Build command:
npm run build - Build output directory:
dist - Root directory:
/ - Node version:
20
说明:
npm run build会自动先执行prebuildprebuild会运行scripts/sync-notes.mjs- 也就是说,Cloudflare 在每次构建前都会先拉取私有
Notebook仓库里的公开笔记
在 Pages 项目的 Settings -> Environment variables 里添加:
NOTES_REPO=LiuJrX/Notebook
NOTES_BRANCH=main
GITHUB_TOKEN=github_read_token如果需要覆盖联系表单的 Web3Forms key,也可以加:
PUBLIC_WEB3FORMS_ACCESS_KEY=web3forms_key可选:
NOTES_IGNORE_DIRS=.git,.obsidian,node_modules,Daily,Templates,Private用于拉取私有笔记仓库的 token 建议这样配置:
- 使用
fine-grained personal access token - 仓库范围只授权
LiuJrX/Notebook - 权限只给
Contents: Read-only
当前同步脚本已经避免把 token 直接拼进 clone URL,因此不会进入前端产物,也更不容易在构建日志中裸露。
Cloudflare Pages 首次部署完成后,建议检查:
- 首页、
/notes、/tags、/projects、/about是否能正常访问 - 最新公开笔记是否已经出现在首页和
/notes - 私有仓库里的未发布笔记没有被同步出来
- Contact 弹窗能否正常发送消息
- 数学公式、代码高亮、Markdown 表格是否显示正常
后续的日常流程就是:
- 在 Obsidian 里写笔记
- 给可发布笔记加上
publish: true - push 到私有仓库
LiuJrX/Notebook - push 网站代码到
LiuJrX/LiuJrX-Space - Cloudflare Pages 自动构建并更新站点