openGym数据备份与迁移:为什么一个文件夹就装下你全部训练历史
openGym数据备份与迁移为什么一个文件夹就装下你全部训练历史【免费下载链接】openGymhttps://github.com/DuarteSantos8/openGym项目地址: https://gitcode.com/gh_mirrors/ope/openGymopenGym 是一款自托管的健身训练记录应用gym body-weight tracker它的最大特点是你的所有数据不躺在某个云数据库里而是以纯 JSON 文件形式存放在服务器上的./data文件夹中。这意味着openGym 数据备份这件事被压缩到了极致——备份这一个文件夹就等于备份了全部训练历史、每周计划、体重曲线和所有用户档案而 openGym 数据迁移换服务器、换域名、重装系统也只是复制文件夹 改两行配置的事。本文用不到 5 分钟讲清楚这件事。为什么备份可以这么简单openGym 的数据架构理解备份之前先理解 openGym 的设计哲学没有数据库服务器没有云依赖。后端 api/server.js 是一个无框架的 Node.js 服务唯一运行时依赖是 WebAuthn 验证库所有数据都写成./data下的普通 JSON 文件前端 frontend/ 是 React Vite 构建的静态文件由 nginx 容器web/nginx.conf托管整个系统由 docker-compose.yml 拉起数据通过 volume 挂到你的宿主机上。普通健身应用的数据锁在厂商服务器里账号没了数据就没了。而 openGym 的数据就在你自己机器上一个你能ls出来的文件夹里——它天然就是可备份的。数据文件夹解剖data 目录里到底有什么./data文件夹里只有几类小文件全部是人类可读的 JSON文件内容备份重要度db.json所有用户档案profile 公开的通行密钥passkey 公钥、订阅、邀请码⭐⭐⭐state-用户ID.json每个用户的核心数据训练计划、每次训练记录、体重记录、设置⭐⭐⭐secret会话 Cookie 的签名密钥丢了它只是要重新登录⭐⭐vapid.json推送通知的 VAPID 密钥首次运行时自动生成无需配置⭐以仓库中的 data/db.json 为例它的结构一目了然{ users: [ { id: piYdx5GveQarq8u9, name: Arvids, created: ... } ], creds: [ { id: ..., userId: ..., publicKey: pQECAyYg... } ], subs: [], invites: [] }两个值得注意的细节隐私设计passkey 的私钥永远不会接触服务器它只存在于你手机的 Secure Enclave / 密码管理器中db.json里存的是公钥。所以备份文件拷出去也不等于交出登录权限。媒体库不占备份首次启动时下载的训练动作图片/GIFmedia/img、media/gif属于可重新下载的资源见 scripts/fetch-media.sh备份时可排除。一键备份一行命令打包全部训练历史在 docs/SELF_HOSTING.md 的 Backups 一节中官方给出的备份方法只有一行tar czf opengym-backup-$(date %F).tar.gz data/这个压缩包就包含了所有用户的档案、passkey 记录和全部训练历史。推荐做法定期自动备份把上面这行写进 cron例如每天凌晨执行异地存储把opengym-backup-*.tar.gz同步到网盘或另一台机器只留在本地等于没备备份体积很小纯 JSON 文本用几年的数据通常也只有几 MB。从备份恢复3 步找回训练记录恢复restore与备份完全对称三步完成在目标位置重新部署 openGymdocker compose up -d或确认原实例还在把备份包解压回项目根目录让data/文件夹恢复到原来的位置docker compose up -d重启服务。打开应用、用 passkey 登录后你会发现每周计划、历史训练、体重曲线都原样回来了。个人级备份不碰服务器也能导出 JSON如果你只关心自己的数据比如使用移动端独立 APK或作为访客模式使用不需要登录服务器。openGym 在设置 → 备份里内置了单用户 JSON 导出/导入一键导出生成一个包含你个人全部数据的 JSON 文件可直接通过手机分享面板保存或传输一键导入选择备份文件后确认当前数据会被备份内容整体替换应用会明确提示这是替换全部数据的操作见 frontend/src/views/Settings.jsx 中的导出/导入逻辑。这条路径对手机丢了换设备这类场景特别友好新手机上装 APK → 导入 JSON → 继续训练全程不需要服务器。跨应用迁移从 FitNotes、Strong、Hevy 把训练历史搬进 openGymopenGym 数据迁移不只是自己的数据搬家它也支持把别的健身应用的训练历史接过来设置中选择Import from another app导入 FitNotesAndroid/iOS 导出的 CSV/XML、Strong、Hevy 的文件应用会把文件中的动作名与内置的 1,324 个动作库做匹配无法识别的动作自动转成自定义动作保证文件里的任何一条记录都不会丢失还支持从 Apple Health 导出文件直接导入体重记录。相关导入逻辑位于 frontend/src/sheets.jsx界面入口在 frontend/src/views/Settings.jsx。换服务器 / 换域名迁移实操清单需要把 openGym 从旧服务器迁到新服务器或换新域名时按这个清单走打包旧服务器上tar czf opengym-backup.tar.gz data/部署新服务器上部署 openGymcompose 配置见 docker-compose.yml还原解压data/到新服务器对应目录重启容器改域名如需要在.env中更新RP_ID和ORIGIN为新域名再重启。⚠️一个关键坑passkey 绑定的是精确主机名RP_ID。域名一变旧 passkey 全部失效所有用户需要重新录入指纹/Face ID。所以官方建议见 docs/SELF_HOSTING.md在有人注册之前就定好域名。数据本身不受影响只是登录方式要重新登记一次。常见问题 FAQQ备份文件里能直接看到训练记录吗能。state-*.json是纯 JSON用文本编辑器打开就能看到你的训练数据和设置这也是数据真正属于你的最直接证明。Qguest访客模式的数据在哪里访客模式数据只存在浏览器本地不在data/里。换设备前务必先用设置中的导出功能保存一份 JSON 备份。Q升级版本会丢数据吗不会。官方更新流程是git pulldocker compose pulldocker compose up -d应用壳走版本号刷新./data和已下载媒体完全不受影响。Q多人共用的实例备份会包含所有人的数据吗会。每个用户一个state-id.json都在data/里一个备份包即全部用户。总结拥有一个文件夹就是拥有全部数据openGym 的数据模型可以浓缩成一句话备份./data你就备份了一切。全部用户档案 passkey 公钥 →db.json每人一份训练历史、计划、体重记录 →state-用户ID.json会话密钥、推送密钥 →secret/vapid.json一行tar命令完成备份解压回原位即完成恢复个人用户还能在 App 内一键导出 JSON从 FitNotes/Strong/Hevy 迁移历史则只需一次文件导入。对于想长期记录训练、又不想把数据交给别人的自托管用户来说这套文件夹级的备份与迁移方案简单得几乎没有学习成本。【免费下载链接】openGymhttps://github.com/DuarteSantos8/openGym项目地址: https://gitcode.com/gh_mirrors/ope/openGym创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考