Bun 数据操作
Bun 部署将 SQLite 数据库保存在 $GMPAY_DATA_DIR/gmpay.sqlite,私有对象保存在 $GMPAY_DATA_DIR/objects。维护中的 CLI 和应用服务均使用 Bun 及其 SQLite 驱动运行。
备份与恢复
备份或恢复前先停止 GMPay Edge 容器,确保数据库与对象文件处在同一个业务时间点。
GMPAY_DATA_DIR=/srv/gmpay bun run data -- backup --output /srv/backups/gmpay-backup
GMPAY_DATA_DIR=/srv/gmpay-restored bun run data -- restore --input /srv/backups/gmpay-backup发布镜像内置同一个 CLI。停止服务后,挂载外部备份目录并执行:
docker compose stop gmpay-edge
docker compose run --rm --no-deps \
--volume "$PWD/backups:/backups" \
gmpay-edge bun run data -- backup --output /backups/gmpay-backup输入或输出路径必须显式指定,备份输出还必须位于数据目录之外。恢复只接受全新或空目标目录,不会覆盖非空目录。清单会校验每个文件;恢复还会执行 SQLite 完整性、外键和迁移校验和检查。
备份包含凭据、用户数据、支付记录和私有上传。请加密保存、限制访问,并定期演练恢复。
导入 Cloudflare 数据
先将 D1 导出为 SQL,并将 R2 对象导出到本地目录;对象在该目录中的相对路径必须保持原始 Object Key。然后将数据导入全新或空的 Bun 数据目录:
wrangler d1 export DB --remote --output ./d1-export.sql
GMPAY_DATA_DIR=/srv/gmpay bun run data -- import-cloudflare \
--d1-sql ./d1-export.sql \
--r2-dir ./r2-export \
--r2-manifest ./r2-metadata.json实例没有对象时可以省略 --r2-dir。--r2-manifest 也是可选参数,但必须与 --r2-dir 一起使用;它用于保留 R2 HTTP 元数据和自定义元数据。该文件是一个以原始 R2 Object Key 为键的 JSON 对象:
{
"evidence/receipt.txt": {
"httpMetadata": {
"contentType": "text/plain; charset=utf-8",
"cacheExpiry": "2026-09-01T00:00:00.000Z"
},
"customMetadata": { "orderId": "order-123" }
}
}支持的 HTTP 字段为 contentType、contentLanguage、contentDisposition、contentEncoding、cacheControl,以及 ISO 8601 格式的 cacheExpiry。未知字段、非字符串自定义元数据,以及找不到对应导出对象的清单 Key 都会被拒绝。不提供这个 Sidecar 时仍会导入对象内容和 Key,但无法还原 R2 元数据。
导入会确认 D1 导出包含仓库中的全部迁移,为 Bun 迁移器记录校验和,校验外键,并将 R2 Key 路径转换成私有对象的哈希布局。非空目标会被拒绝,因此失败或重复执行导入不会覆盖现有实例。
