QUICK FIND

搜索站点内容

输入关键词开始搜索,无需连接服务器。

⌘ K 随时打开,按 Esc 关闭

同步与发布

区分源码同步与静态发布,配置本地、Git、SSH 目标和公开产物仓库的 Pages 部署。

源码同步与静态发布是两项独立操作:同步处理 Markdown、站点配置、图片与主题源文件;发布处理公开构建生成的静态文件。同步成功不会自动让公网网站更新。

发布前检查

在包含 bookx.yml 的工作区执行:

bookx validate
bookx build

validate 执行内容、主题、链接、资源及产物校验,但不替换当前正式输出。build 成功后通过“发布预览”检查网站,特别是内部链接、图片、文档目录和手机布局。

正式发布和 --dry-run 都会先重新公开构建;构建失败时停止发布并保留旧产物。不要把 .bookx/preview/ 的全部内容预览当作发布源。

Git 源码同步

在工作台“发布”页配置同步,或编辑本地 .bookx/local.yml

sync:
  type: git
  remote: origin
  url: git@github.com:owner/source.git
  branch: main

执行:

bookx sync --workspace ./my-site

BookX 会按同步流程提交本地改动、整合远程更新并推送。遇到未解决冲突时停止,先查看冲突文件并确认正确内容,再继续同步。使用 Git SSH 地址时,需要本机 Git 已能完成相应认证。

只有非空 sync.url 才启用桌面启动自动更新;清空地址可停止后续启动更新。私有内容和草稿仍可能随源码同步,“仅本地”文档目录另有排除规则。工作台会保留已有 .gitignore 并补充生成物和本地设置的忽略项。

配置发布目标

发布目标也保存在 .bookx/local.yml,以名称区分。下面的三个目标可以放在同一个 publish 下:

publish:
  local-copy:
    type: local
    path: ./published-site
  pages:
    type: git
    remote: git@github.com:owner/site.git
    branch: gh-pages
  production:
    type: ssh
    host: example.com
    port: 22
    user: deploy
    path: /var/www/blog
    key_file: /path/to/id_ed25519
    use_agent: false
    timeout: 30s

将示例地址替换为实际目标。先检查计划,再执行发布;命令行选项放在目标名称之前:

bookx publish --dry-run production
bookx publish production
目标行为
local复制到本地目录,使用发布标记保护已有文件
git将构建产物提交到指定远程分支,不依赖 GitHub 专用接口
ssh通过 SFTP 增量上传,按发布清单处理变化文件

Git 产物分支应与源码分支区分。发布目录应专门承载该站点,不要混入需要人工长期维护的其他文件。

SSH 认证与后置命令

SSH 支持私钥文件或 SSH Agent。使用 Agent 时设置 use_agent: true 并确保本机 Agent 中已有可用身份。不要把私钥内容、口令或其他秘密写入 bookx.yml、主题或文档。

当前实现没有读取 known_hosts,也没有验证服务器主机指纹;旧文档中“严格校验主机”的说明不适用,填写 known_hosts 不会启用校验。主机身份校验已单独列为待办。

如需上传成功后执行命令,可以在 SSH 目标中增加 after_publish 字符串列表。命令按顺序原样交给远端执行;BookX 记录输出、退出状态和超时。仅填写你已经确认需要的命令。后置命令失败不代表已经上传的文件会自动回滚。

私有源码与公开 Pages 仓库

建议使用两个仓库:私有源码仓库保存 Markdown、图片、配置与主题源文件,作为 sync.url;独立公开仓库保存公开构建的静态文件,作为 Git 发布目标。源码同步可能包含私有内容和草稿,公开发布会按内容状态过滤。

使用上面的 pages 发布目标时,先将 remote 改为自己的公开仓库地址,再在本机执行 bookx publish pages。BookX 会重新构建并将 dist/ 内的文件提交到目标仓库的 gh-pages 分支根目录,不会额外套一层 dist/。发布会替换目标分支中的文件,不要在该分支手工维护工作流或其他需要保留的文件。

首次发布创建分支后,在公开仓库的 Settings → Pages 中选择 Deploy from a branch,分支选择 gh-pages,目录选择 /(root)。以后发布更新该分支,由 GitHub Pages 部署静态网站,无需自定义 Pages 工作流。发布来源的设置见 GitHub 官方说明

项目 Pages(例如 https://yourname.github.io/your-repo/)设置 site.base_url: https://yourname.github.iosite.base_path: /your-repo;用户主页或根域名部署使用空 base_path。具体配置见站点配置

使用 giscus 时,在公开产物仓库开启 Discussions、安装 giscus 应用,并在站点评论配置中填写该仓库及讨论分类信息。评论保存在 GitHub Discussions 中,不是 dist/ 内的文件,静态产物更新不会删除讨论。配置要求见 giscus 官方说明

发布后检查

  • 打开首页、文章与一个深层文档,确认 URL 和导航正常。
  • 打开搜索并滚动归档,检查按需请求的 JSON 是否可以访问。
  • 检查图片、CSS 和 JS,子路径部署尤其要确认地址前缀。
  • 查看部署日志,区分构建失败、认证失败和上传后的命令失败。

.bookx/local.yml 属于本地配置,默认不进入 Git;迁移到另一台机器时需要重新准备同步/发布目标和认证环境。

Conversation

讨论这篇内容

评论由 GitHub Discussions 提供 · 打开讨论仓库