公共站与成员站双发布方案
27 March 2026
这是一篇成员文章,用于记录当前博客的双发布方案:
- 公开站继续发布到
luowei.github.io - 私有文章存放在
_posts_private/ - 私有站构建时会临时将
_posts_private/并入站点 - 成员站部署到 Cloudflare Pages
- 成员站入口由 Cloudflare Access 按邮箱或身份组控制访问
内容组织约定
公开文章放在:
_posts/
私有文章放在:
_posts_private/
如果历史文章仍在 _posts/ 中但需要临时保密,也可以显式写:
visibility: private
发布链路
flowchart LR
A[私有源码仓] --> B[Public Build]
A --> C[Members Build]
B --> D[GitHub Pages Public Repo]
C --> E[Cloudflare Pages Members Project]
E --> F[Cloudflare Access]
Cloudflare Access 建议
对成员站建议至少配置:
- 仅允许指定邮箱访问
- 对搜索引擎返回拒绝访问
- 使用独立 hostname,例如
members.example.com - 将成员站 robots 设为
noindex,nofollow
Cloudflare Pages / Access 实际配置过程
当前站点已经按下面的流程跑通了成员站部署:
- 在 Cloudflare
Workers & Pages中新建了一个真正的Pages项目,而不是Worker - Pages 项目名保持为
luowei - 给该 Pages 项目绑定了自定义域名:
https://luowei.markdev.work
- 在 GitHub 私有源码仓
luowei/luowei_github_io_src的 Actions 配置中填写:secrets.CLOUDFLARE_API_TOKENsecrets.CLOUDFLARE_ACCOUNT_IDvars.MEMBERS_PAGES_PROJECT=luoweivars.MEMBERS_SITE_URL=https://luowei.markdev.work
Deploy Members Siteworkflow 通过:SITE_VISIBILITY_MODE=membersBUILD_DEST=_site_private构建私有站产物,再执行:wrangler pages deploy _site_private --project-name=luowei --branch=master
- Cloudflare Access 再挂在
luowei.markdev.work这个私有站入口前面,按指定邮箱或 GitHub 登录进行访问控制
Access 配置注意点
- 如果使用 GitHub Login,OAuth App 的 callback URL 必须指向:
https://<team-name>.cloudflareaccess.com/cdn-cgi/access/callback
- 如果使用 One-time PIN,只有命中
Allow -> Emails白名单的邮箱才会真正收到邮件 Emails ending in只适合填域名后缀,例如@gmail.com,不应填写完整邮箱或拼错的域名- 若
wrangler pages deploy返回认证错误,要先区分当前对象到底是Pages还是Worker - 可以用下面的接口确认项目是否真的是 Pages 项目:
curl -s "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/pages/projects/<PROJECT_NAME>" \
-H "Authorization: Bearer <CLOUDFLARE_API_TOKEN>"
返回 success: true 才说明它是可被 wrangler pages deploy 直接部署的 Pages 项目
回滚方式
如果成员站方案暂时不继续推进,可以:
- 暂停
Deploy Members Siteworkflow - 保留
_posts_private/ - 继续使用公开站构建链,不影响现有公共发布
