README 的“Why openGym”和“Quick start”写明项目运行在自己的设备上,使用 Docker Compose 启动。
openGym:用 Docker 自建训练计划与身体数据追踪器
给想自管训练数据的人用的健身追踪器,Docker部署,数据不离开自己的服务器。
🧭 决策指南
为什么现在热: 无法从材料判断
适合,如果你
-
你希望用Docker在自己的服务器运行训练计划和体重记录。
-
你需要1,324个动作、肌肉地图、Supersets和RIR/RPE记录。README 的“Features”章节列出1,324 exercises、muscle map、supersets以及RIR/RPE。
-
你要迁移FitNotes、Strong或Hevy的历史训练数据。README 的“Accounts and data”列出从 FitNotes、Strong、Hevy 导入数据。
-
你需要手机和笔记本之间同步,并希望使用Passkey登录。README 首页描述支持passkey sign-in和phone/laptop同步;“Accounts and data”说明设备间同步。
不适合,如果你
-
你不能提供HTTPS域名,却需要在手机上使用Passkeys。README 的“Quick start”明确写明手机使用passkeys需要HTTPS on a domain。
-
你不愿运行Docker或在主机管理./data数据目录。README 的“Quick start”要求Docker with Compose,并说明DATA_DIR映射到主机./data。
-
你需要云端托管、订阅服务或官方托管账户体系。README 的“Why openGym”强调项目运行在自己的服务器上,没有他人服务器账户和订阅。
-
你要求AI教练无需外部Provider密钥即可工作。README 的“Optional extras, off by default”说明AI coach使用自有provider key。
前置条件
- 需要 Docker with Compose。
- 默认Web端口为 8080,API端口为 3000。
- 首次启动会下载约 140 MB exercise media。
- 手机使用Passkeys需要HTTPS on a domain。
- 主机不需要安装Node;README说明Docker部署无需Node on the host。
第一步命令(README 原文)
docker compose up -d
要注意
-
切换到手机Passkeys前,要在.env配置HTTPS域名相关设置。README 的“Quick start”说明需要HTTPS on a domain,并指出只需修改.env中的两行。
-
使用GHCR镜像时需要替换docker-compose.yml中的image行。README 的“Quick start”说明默认从GitLab Registry拉取,也可改用GHCR。
-
启用AI coach时需将API_TARGET设为coach并配置Provider密钥。README 配置表列出API_TARGET的coach选项;AI coach章节要求自有provider key。
-
审计日志默认开启,AUDIT_MAX默认保留5,000条、AUDIT_DAYS默认保留90天。README 的配置表给出AUDIT_LOG、AUDIT_MAX和AUDIT_DAYS的默认值。
材料未说明
- README未提供最低CPU、内存或磁盘要求。
- README未说明单实例可支持的用户数量或训练记录规模。
- README未说明Android APK与Docker版本之间的功能差异。
- README未提供数据库迁移、备份恢复或灾难恢复流程的完整细节。
- README未说明10位贡献者和5个版本对应的长期维护计划。
- README未提供Passkeys在不同浏览器和反向代理组合下的兼容性矩阵。
💡 深度解析
6
适合
我现在使用 FitNotes、Strong 或 Hevy,想把历史训练迁移到自己的服务器,并在以后导出完整 JSON;openGym 能满足这个迁移约束吗?
适合读者: 正在从 FitNotes、Strong 或 Hevy 迁移到自托管系统,并要求保留历史训练和可导出 JSON 的健身者
适合,README 直接覆盖这些来源的导入和完整 JSON 导出,但迁移结果仍取决于原应用数据字段能否正确映射。
- Accounts and data 章节列出 FitNotes、Strong、Hevy 导入;FitNotes 等支持 CSV,Strong 和 Hevy 还可使用 API key,另有 Apple Health 体重导入。
- 同一章节说明可以随时将全部数据导出为一个 JSON 文件,符合自托管和可迁移要求。
- Progress 章节支持编辑已保存训练、补录纸面训练和修改日期,修正后会重新读取历史记录。
- README 没有承诺不同应用的字段、单位、动作名称和日期格式会完全一致,因此迁移后仍需要核对历史内容。
- Accounts and data:"Import from FitNotes, Strong, Hevy (CSV or API key) and Apple Health weight exports."
- Accounts and data:"Export everything as one JSON file whenever you like."
- Progress:"Edit any saved workout after the fact... Records are re-read from the corrected history."
不适合
我计划在 Kubernetes 上部署 openGym,开启邀请制注册、管理员面板和审计日志,供多个个人档案使用;它适合组织级健身管理吗?
适合读者: 准备在 Kubernetes 上为多个个人档案部署 openGym,并需要邀请制注册、管理员面板和审计日志的运维者
不适合把它直接当作组织级健身管理系统;它能覆盖小规模多档案自托管,但 README 没有承诺教练审批、团队权限或高并发能力。
- README 提供单独的 Kubernetes 自托管指南,说明部署形态可行。
- Configuration reference 支持
INVITE_ONLY、ADMIN_UIDS和AUDIT_LOG,Accounts and data 也提供可选管理员面板。 - 但项目洞察明确指出 JSON 文件存储更适合个人或小规模实例,不适合大量用户、高并发、多租户和复杂查询。
- 同一分析还指出项目面向个人健身追踪,缺少医疗数据治理、教练审批工作流和组织级权限模型。
因此,家庭或小型私有实例可以考虑;需要正式团队管理时,现有权限和数据层不足以直接支撑。
- Quick start:"there are separate guides for ... Kubernetes"
- Configuration reference:`ADMIN_UIDS`、`INVITE_ONLY`、`AUDIT_LOG`
- 项目洞察 usage_limitations:"适合个人或小规模实例;对于大量用户、高并发、多租户..."
- 项目洞察 usage_limitations:"并非医疗、康复或专业运动队管理系统"
视情况
我只有一台 ARM64 NAS,想用 Docker 部署 openGym,并让手机通过 Passkey 在家外记录训练;这个方案适合我吗?
适合读者: 拥有 ARM64 NAS、希望用 Docker 在家中自托管,并从手机通过 Passkey 记录训练的个人用户
视情况,适合 ARM64 NAS 的基础部署,但手机远程 Passkey 使用取决于 HTTPS 和域名配置是否正确。
- README 明确提供 amd64 与 arm64 预构建镜像,并说明宿主机不需要安装 Node.js。
- 数据保存在用户控制的文件夹中,适合 NAS 做持久化和备份。
- README 要求手机 Passkey 使用 HTTPS 域名,并正确设置
RP_ID与ORIGIN;仅执行 Compose 启动并不足够。 - 首次启动还要下载约 140 MB 的训练媒体,NAS 的带宽和存储需要能承受这次初始化。
因此,局域网使用较直接;远程使用则必须完成反向代理或 Cloudflare Tunnel 等配置。
- Quick start:"prebuilt images, amd64 + arm64"
- Quick start:"Either way you don't need Node on the host."
- Quick start:"To reach it from your phone with passkeys you need HTTPS on a domain"
- Configuration reference:`RP_ID`、`ORIGIN`
docker compose up -d
适合
我按 Push/Pull/Legs 或 5×5 训练,记录 RIR/RPE,并希望使用双重进阶、估算 1RM 和恢复肌群分析;openGym 是否比简单重量次数日志更合适?
适合读者: 使用 Push/Pull/Legs 或 5×5、依赖 RIR/RPE 和双重进阶,并希望查看肌群恢复状态的中高级训练者
适合,因为它把计划、努力程度、进阶和肌群状态放在同一套训练记录中,而不是只保存重量与次数。
- Planning 章节提供 Push/Pull/Legs、Upper/Lower、Full Body 和 5×5 模板,而且模板仍可编辑。
- Training 章节支持可选 RIR 或 RPE、预填上次重量、PR 检测,以及超级组、热身组和递减组。
- Progress 章节提供线性、Greyskull LP、双重进阶和时间进阶;失败次数不会增加重量,停滞会触发减量。
- 同一章节还提供估算 1RM、训练量、恢复中肌群和未训练肌群视图,因此与需要长期训练反馈的场景匹配。
限制是这些指标依赖动作分类和训练记录质量,不能当作医学或精确生理测量。
- Planning:"Four starter plans (Push/Pull/Legs, Upper/Lower, Full Body, 5×5)"
- Training:"Optional effort column as RIR or RPE"
- Progress:"linear, Greyskull LP, double progression"
- Progress:"A muscle map in three modes: where your volume went, what is still recovering, and what has gone untrained."
适合
我想让 AI 教练使用自己的 Anthropic、OpenAI、Gemini 或 Ollama 密钥,并让 Claude Desktop 只读查询训练历史;这些能力在 openGym 中是否能一起使用?
适合读者: 希望在自有服务器上使用 Anthropic、OpenAI、Gemini 或 Ollama,并让 Claude Desktop 查询训练历史的开源开发者
适合,但这是两个默认关闭且部署边界不同的可选能力,不能把 MCP 当作 Docker 核心服务的一部分。
- Optional extras 章节说明 AI 教练在服务器运行,使用用户自己的 provider key,支持 Anthropic、OpenAI、Gemini、OpenAI-compatible endpoint 和 Ollama。
- AI 教练只起草训练周计划或提出变更,README 明确要求用户批准每次修改,适合不希望 AI 自动改计划的约束。
- MCP server 面向 Claude Desktop,默认只读、只在本地查询训练历史。
- README 同时明确 MCP 不属于 Docker build,因此需要按独立文档配置,不能假设
docker compose up -d会自动启用它。
- Optional extras, off by default:"your own provider key (Anthropic, OpenAI, Gemini or any OpenAI-compatible endpoint, Ollama included)"
- Optional extras, off by default:"You approve every change."
- Optional extras, off by default:"Read-only and local; not part of the Docker build."
视情况
我会在健身房用手机离线记录,再用笔记本查看或修改;有时两个设备会同时编辑训练记录,openGym 能避免简单的最后写入覆盖吗?
适合读者: 在手机和笔记本之间切换、需要离线训练并由两个设备同时编辑记录的个人用户
视情况,README 明确支持离线、多设备同步和并行编辑合并,但没有把它描述成完整的版本控制系统。
- Why openGym 章节说明应用可安装到主屏幕、离线工作,并在手机和笔记本之间同步。
- Accounts and data 章节明确写出两个设备同时编辑时会合并,而不是互相覆盖。
- 训练界面还提供屏幕常亮、组间休息计时和提醒,符合健身房手机使用场景。
- 但项目洞察指出复杂冲突仍可能需要用户复核;README 的已提供片段没有说明冲突优先级、离线时长上限或恢复历史界面。
所以普通训练记录适合,多设备同时改同一条复杂计划时不能假设所有冲突都自动解决。
- Why openGym:"works offline, syncs between your phone and your laptop."
- Accounts and data:"Two devices editing at once merge instead of overwriting each other"
- Training:"the screen stays awake" 和 "a rest-timer alert"
✨ 核心亮点
-
内置1,324个动作、动画演示与肌肉地图
-
Docker一条命令自建,数据存于主机./data
-
支持Passkeys、离线使用与跨设备同步
-
可导入FitNotes、Strong和Hevy数据
-
AI教练默认关闭且需要自有Provider密钥
🔧 工程化
-
React 19前端提供计划、引导训练、PR与热力图
-
支持Supersets、RIR/RPE、递进规则与deload
-
node:http API用JSON保存数据并提供OpenAPI文档
-
Docker部署包含amd64与arm64预构建镜像
⚠️ 风险
-
手机使用Passkeys必须为域名配置HTTPS
-
首次启动需下载约140MB训练媒体
-
AI教练需Anthropic、OpenAI或Gemini等Provider密钥
-
项目采用AGPL-3.0,分发修改版需关注许可证义务
👥 适合谁?
-
想用Docker在自有服务器管理训练数据的个人
-
已有FitNotes、Strong或Hevy历史数据的用户
-
需要React 19与Passkeys示例的开源开发者
-
拥有HTTPS域名并使用手机训练的自托管用户