健身#MCP

openGym:跑在自己服务器上的健身追踪器

openGym 是自托管健身追踪器:1,324 个动画动作、进阶规则与肌肉地图,数据存自己服务器的 JSON 文件,Docker 一条命令起。

项目资料

GitHub Ecosystem
仓库地址github.com/DuarteSantos8/openGym
许可证
AGPL-3.0
主语言
JavaScript
星标
4,203
核查时间
2026-10-06

以上快照资料以核查当日为准,可能随版本或运营策略变化。

在健身房里打开 Hevy 或 Strong,练到第三年,弹出来的先是订阅页,三年的训练记录躺在别人的服务器上。openGym 是一个自托管的健身与体重追踪器:计划、每一组的重量和体重曲线都存你自己服务器的一个文件夹里,AGPL-3.0 开源,截至 2026-10-06 仓库有 4,203 颗星,最新版 v1.3.9 发布于 2026-09-28。它最有意思的地方不是记,是看——除了训练量,肌肉地图还能告诉你哪些肌群正在恢复、哪些已经太久没练。

openGym 引导训练屏:卧推动作动画、按上次记录预填的重量、杠铃配重和 RIR 输入

核心功能

  • 训练引导:当天的课自己开——重量按上次预填、组间休息自动计时、破 PR 当场提示。超级组、热身组、降机组、rest-pause、计时动作(平板支撑、悬挂)和按时间与速度记的有氧都在同一条记录流里。
  • 1,324 个动作:每个动作带动画演示,在身体地图上按肌群浏览,按你手头有的器械过滤;库里没有的动作可以自己建,配自己的照片、GIF 或短视频,上传前会在设备端抹掉位置信息。
  • 进阶规则写得明明白白:线性、Greyskull LP、双进程(visible rep range)三种规则,每个目标旁边都写着为什么是这个数;没练完的组不加重量,卡住自动排 deload。另有估算 1RM 曲线和 Poliquin、Thibaudeau、ATG 三套结构性平衡比值。
  • 肌肉三态地图:训练量去了哪、哪些肌群还在恢复、哪些已经脱训,三种模式切换;一年活动热力图和对着目标线的体重曲线同屏。上图的引导屏里,「Bar 20 kg · 28.8 kg per side」的配重计算和「Every rep last time — 2.5 kg more」的线性进阶提示就是这条逻辑在跑。
  • 数据自有:每个 profile 一个 JSON 文件放在 ./data,备份这个文件夹等于备份一切;两台设备同时写按版本号合并而不是互相覆盖,断网照常记、联网补传。passkey 私钥不出设备,服务器上只有公钥。
  • 搬家不丢数据:从 FitNotes、Strong、Hevy(CSV 或 API key)和 Apple Health 体重导出一键导入,随时全量导出成一个 JSON;17 种语言含从右到左的阿拉伯语。Android 直接装 APK(刻意不上架 Play Store),iPhone 用 Safari 把 PWA 加到主屏。想让 AI 读训练史,可选的只读 MCP server 和接手环数据的 whoop-mcp-server 是同一个思路,也可以开自备 key 的 AI 教练——改动都要你批准。

openGym 统计屏:一年训练热力图和按训练量着色的肌肉平衡地图

典型使用场景

  • 在意数据归属的训练者:训练史、体重曲线、PR 全在自家磁盘上,不订阅、不看广告、没有遥测。
  • 信号差的健身房或居家地下室:PWA 离线可用,练完联网自动同步,两部手机同时记也不冲突。
  • 从订阅制 app 搬家的人:Hevy、Strong 的历史记录直接导进来,不用从头攒数据。

快速上手

先不装也可以试:官方 demo 就是完整应用加示例数据,浏览器打开 opengym.duarte-santos.ch/demo 就能点。自托管需要 Docker:

git clone https://github.com/DuarteSantos8/openGym
cd openGym
cp .env.example .env
docker compose pull      # 预构建镜像,amd64 + arm64
docker compose up -d

打开 localhost:8080 建档案,首次启动会下载约 140 MB 的动作媒体。手机上用 passkey 需要 HTTPS——官方自托管指南给了 Cloudflare Tunnel、Caddy、Traefik 和 nginx 四种走法。架构就三层:nginx 托管静态前端并代理 /api,Node API 存 JSON 文件,下图里的 AI 教练和 MCP server 是可选项。

openGym 架构图:nginx 提供 web 并把 /api 代理给 Node api,数据落在 ./data,AI 教练与 MCP 为可选项

小结

适合把训练数据当自己的数据、愿意跑一个 Docker 容器的人;不想碰服务器的 iPhone 用户会别扭——苹果不允许侧载,原生 app 排在 2027 年 3 月之后的路线图里,现在只能 PWA。三个提醒:动作图片和动画的版权有争议(数据集标注来自 Gym visual,ExerciseDB/AscendAPI 也主张权利),不在 AGPL 授权范围内,你的实例是首次启动时下载的,商用部署前要自行确权;路线图显示 2027 年 1 月的 v1.4.0 会把 JSON 存储换成数据库,官方标注为唯一一次破坏性变更;AGPL-3.0 意味着改完拿去当网络服务运营,得开放同版本源码。技术栈值得一看:前端 React 19 加 Vite,后端是纯 node:http、只有 @simplewebauthn/server 和 web-push 两个依赖,HTTP API 有 OpenAPI 规范。维护者公开说明大部分代码用 Claude Code 起草,靠单元测试、staging 实例和真机验证把关,默认安装不调用任何 AI 服务——两周一个版本,v1.3.9 一次收了 39 个社区 PR。把个人数据搬回自己服务器的做法,之前介绍过的自托管知识库 Xnote 是同一个方向。