openGym 是一个可以部署在自己服务器上的开源健身记录应用,用来制定每周训练计划、引导每次训练、记录每一组动作和体重变化。它解决的是「健身数据归谁」的问题:没有订阅、没有广告、不收集遥测数据,所有记录以普通文件形式保存在你自己的硬盘上,备份一个文件夹就等于备份全部数据。

所谓自托管(self-hosted),就是把软件装在自己控制的机器上运行,而不是使用别人提供的在线服务。openGym 正是一个自托管方案:GitHub 上的 arvids-unavailable/openGym 项目(6.5k star、1.1k fork,AGPL-3.0 开源协议),用 Docker 一条命令即可部署到自己的服务器。

适合谁用:拥有或愿意折腾一台服务器(旧电脑、树莓派都行)的健身爱好者,注重数据隐私、不想把健康数据交给第三方的人,以及想给家人朋友开一个私人健身记录服务的人。完全不想碰服务器也没关系:它还有浏览器版(可安装成 PWA)和不联网的 Android 独立 App,数据只留在手机上。

它主要能做什么

  • 每周计划与动作库:给一周七天分别排训练内容,内置 1324 个动作的搜索库,每个动作带动态演示图,可按器械筛选。
  • 引导训练:开始训练后自动进入当天的安排,逐组引导,预填上次用的重量,带休息计时,还能检测个人纪录(PR,Personal Record,即某项动作的历史最好成绩)。
  • 体重与统计:体重曲线图、GitHub 风格的训练热力图、肌肉部位覆盖图;还有估算 1RM 的功能——1RM 指某个动作你最多只能完成一次的重量,是衡量力量水平的常用指标。
  • 渐进计划:内置 Greyskull LP 等渐进规则(一种经典的线性加重量力量计划),遇到停滞会自动建议减载(降低重量、恢复体能),练不动时不会盲目加重量。
  • 数据可带走:支持从 FitNotes、Strong、Hevy 等 App 导入历史记录,也可一键导出 JSON;体重可从苹果健康(Apple Health)导入。
  • 细节功能:超级组(两个动作连做、中间只休息一次)、平板支撑等计时动作、箭步蹲等双侧动作按「每侧 8 次」记录、有氧运动、计划分享、自定义动作。

部署方式

项目官方推荐用 Docker Compose 一键部署。Docker 是一种容器工具,把应用连同运行环境打包,避免自己配环境的麻烦;执行 docker compose up 后访问本机 8080 端口即可使用。数据存在服务器上的 ./data 目录,账号、计划、训练记录、体重全在里面,备份该目录即备份一切;首次启动会下载约 140MB 的动作演示素材。

登录与隐私

登录使用 Passkey(通行密钥):一种用设备指纹或人脸识别代替密码的无密码登录方式,私钥存在手机安全硬件或密码管理器里,服务器只保存公钥,不存密码,也不需要邮箱注册。数据通过你自己的服务器在手机与电脑间同步。网站可安装为 PWA(渐进式 Web 应用,把网页加到手机主屏幕,像原生 App 一样离线使用),训练时屏幕保持常亮、推送提醒等功能一应俱全。

技术栈

前端是 React 19 + Vite,配 Zustand(一个轻量级 React 状态管理库);后端是 Node.js 实现,没有用框架,唯一外部依赖是 @simplewebauthn/server;nginx 做反向代理,整体通过 Docker Compose 部署。AGPL-3.0 许可证保证:任何人都可以自托管、修改、分享,但若把改过的版本作为网络服务提供,必须同样开源——这从制度上防止它被改成闭源收费产品。

结论

如果你认同「健身数据应该由自己拥有」,又愿意花十分钟部署一个 Docker 服务,openGym 是当前功能相当完整的自托管选择:1324 个动作库、引导训练、渐进计划、多端同步,数据存在你自己的文件夹里。核心结论:openGym = 跑在自己服务器上的开源健身记录应用,数据自持、无订阅,适合有服务器且在意数据隐私的健身爱好者。