Skip to content
实战案例

源码私有、站点公开:从零上线 VitePress 站

VitePress 建站,GitHub Actions 自动部署;源码仓库保持私有,只把构建结果推到公开仓库。

约 2 分钟读完658 字最近更新 2026-10-20#实战案例#业务自动化#建站#GitHub

源码私有、站点公开:从零上线 VitePress 站 ​

背景和需求 ​

这个案例让 Grok Bot 从零搭一个教程站。需求是做一个中文的 Grok Bot 新手指南:手机上好看、好用,能自动部署。后来又加了一条硬要求:GitHub 上的源码仓库必须是私有的,否则内容和设计谁都能整个拿走。

怎么跟 Grok Bot 说 ​

text
用 VitePress 给我做一个中文教程站,域名 wangxxxl.com:
- 分区:快速开始、基础用法、自动化进阶、按角色看、实战案例、模板库、日更、资源导航。
- 手机优先,深色风格,所有提到 X 的地方都能点到我的主页。
- 推到 GitHub,自动构建部署,每次提交自动上线。
- 源码仓库一定要私有,千万不能公开。

它做了什么 ​

  1. 建站:用 VitePress 搭骨架,全站导航、侧边栏、分区卡片都从同一份数据文件生成,加一个页面只需要改一个地方。图标用开源的 Fluent Emoji 和 Lucide,本地搜索、RSS 订阅都开箱即用。
  2. 自动部署:写了一个 GitHub Actions 工作流:每次推送到 main,就自动安装依赖、构建、发布。
  3. 源码转私有:GitHub Pages 在免费账号下不能直接从私有仓库发布网站。做法是拆成两个仓库:
    • 源码仓库 grok-bot-guide:私有,所有内容和代码都在这里。
    • 发布仓库 imsuper-vip-site:公开,只放构建好的静态文件,并写明「版权所有,不授权复制」。
    • 工作流用 peaceiris/actions-gh-pages 加一把只对发布仓库有写权限的部署密钥,把构建结果推过去,同时写好自定义域名。
  4. 上线检查:每次部署完,绕开 DNS 缓存直接请求 GitHub Pages 的服务器,按手机宽度截图,逐页确认改动已生效。
yaml
- uses: peaceiris/actions-gh-pages@v4
  with:
    deploy_key: ${{ secrets.SITE_DEPLOY_KEY }}   # 只对发布仓库有写权限
    external_repository: 你的账号/你的发布仓库
    publish_dir: docs/.vitepress/dist
    cname: 你的域名
    force_orphan: true                           # 发布仓库只保留最新一次构建

踩坑与解决 ​

  • RSS 按钮打开一堆代码:日更页的「订阅 RSS」按钮直接链到 feed.xml,普通人点开只看到 XML 代码。改法是主按钮换成「关注 X 获取每日更新」,RSS 退到一个小链接,指向新做的订阅页,用大白话解释 RSS;feed.xml 本身也加了样式表,浏览器直接打开时显示成排好版的中文页面。
  • 名字写法不统一:页面上显示名一度不统一,全部改成 WANGXXXL。
  • 页面没有出口:订阅预览页一开始只有一个返回链接,补了和网站一样的顶部导航。
  • 私有仓库发不了网站:用上面的双仓库方案解决,源码不公开,网站照常更新。

效果 ​

  • wangxxxl.com 已上线,每次推送约 1 分钟自动部署完成。
  • 源码仓库是私有的,公开仓库里只有构建结果。
  • 后续的每一次改版,包括这一页的案例,都是同样的流程:改源码,推送,自动上线,手机截图核对。

可以直接用的提示词 ​

text
我的网站源码在私有仓库 (填写),GitHub Pages 发不了。帮我改成双仓库发布:
1. 新建一个公开仓库只放构建产物,README 写明版权所有。
2. 生成一对部署密钥:公钥加到公开仓库(可写),私钥存进私有仓库的 Secrets。
3. 改 GitHub Actions:构建后用 peaceiris/actions-gh-pages 推到公开仓库,带上自定义域名。
4. 把源码仓库改成私有之前,先跟我确认一次。
5. 部署完用手机宽度截图首页给我看。