使用完整构建
在有权访问的源码中运行 sh scripts/build.sh。脚本安装锁定的前端依赖,执行 pnpm release,再以锁定依赖构建 memos 的 Cargo release 二进制文件。输出复制到 build/memos,在支持的 Windows shell 路径下为 build/memos.exe。发行构建要求真实前端资源。
sh scripts/build.sh
./build/memos --version协议生成
规范 API 定义位于 proto/api/v1,存储消息位于 proto/store。Rust 协议绑定在构建过程中生成。TypeScript 和 OpenAPI 使用仓库生成脚本,不要手改生成文件掩盖漂移。协议变更后,应从同一已验证提交更新本文档中保存的 API 快照。
平台验证
源码定义了多个平台的打包流程。本地构建成功不能证明每种目标产物均可用。请记录目标架构,并在预期环境运行生成文件。本次文档构建不会构建或认证应用发行镜像。
验证构建产物
sh scripts/build.sh 成功后,使用不挂载生产 /etc/secrets 的专门终端或沙箱。为复制后的产物显式指定 SQLite、空 DSN、新测试目录和回环监听地址;仅指定数据目录不能覆盖继承的数据库配置。在另一个终端检查健康状态,并在浏览器打开同一地址。应看到真实应用界面,而不是开发占位页。保存、刷新并编辑合成笔记。把端口或数据目录用于其他进程前,先停止这个测试进程。
# Terminal 1: run the built application
unset MEMOS_UNIX_SOCK MEMOS_DEMO
./build/memos --addr 127.0.0.1 --port 8081 --driver sqlite --dsn '' --data ./release-test-data
# Terminal 2: read-only startup check
curl --fail http://127.0.0.1:8081/healthz重新生成公开协议产物
修改 proto 定义后,从 proto/ 目录运行 Buf。Rust 绑定由 Rust 构建单独生成;这里生成的是 buf.gen.yaml 配置的 OpenAPI 和 TypeScript 产物。Buf 远程插件需要网络访问。检查生成差异中的新增与删除是否符合预期,再运行受影响的前后端检查。
(
cd proto
buf lint
buf format --diff --exit-code
buf generate
)
git diff -- proto/gen web/src/types/proto
git diff --check处理发行构建缺少前端的错误
当 server/frontend/dist/index.html 不存在时,crates/amemos/build.rs 会主动拒绝发行构建。pnpm build 不等同于 pnpm release,后者才会写入嵌入资源目录。先生成该输出,再重新运行完整构建。本地二进制只能证明实际构建并测试过的目标,不应将未经测试的跨平台产物标记为已验证。
(cd web && pnpm install --frozen-lockfile && pnpm release)
sh scripts/build.sh