ARTICLE · 1130441
openGym:把健身App订阅换成自己服务器
连续几周被 Agent 框架、记忆系统、token 优化刷屏之后,今天 GitHub Trending 榜首出现了意外的面孔——一个健身房应用。openGym 单日 +1,433 星,总量 4,261。我把它从头到尾看了一遍,觉得它的价值不在“健身”,而在于它示范了一个独立开发者如何把订阅制 SaaS 完整地搬回自托管世界。
📋 项目速览
项目:openGym(DuarteSantos8)
Star:4,261★(截至 10 月 6 日早,今日 +1,433,GitHub API 实测)
技术栈:Java 后端 + React/Vite 前端,Docker 三容器部署
License:AGPL-3.0 | 建仓 2026-07-18 | 最新版 v1.3.9(9 月 28 日)
链接:github.com/DuarteSantos8/openGym | 官网 opengym.duarte-santos.ch(在线 demo 即完整应用+示例数据)
它解决什么问题
健身 App 的商业模式是订阅:Hevy、Strong、JEFIT 每年几十上百元,换来的是把你的训练历史、体重曲线、动作照片放在别人的服务器上。健身数据是典型的健康敏感数据——体重波动、伤病恢复周期,足够画出一个人的身体画像。更现实的风险是关停:小体量健身 App 一倒,几年的训练记录就没了。
openGym 的答案是整个产品搬回你的机器:docker compose up 一行命令,数据落在你控制的文件夹里,没有账号、没有订阅、没有广告、没有遥测。而功能并不打折:1,324 个动作比多数商业应用更多,分析功能比多数免费版更深,却一分钱不收。
核心能力:五个值得展开的细节
1. 动作库与计划:按“你拥有的器械”过滤
1,324 个动作全带动画演示,可以在人体地图上按肌肉浏览,也可以按器械过滤——家里只有一对哑铃,库会自动只剩哑铃动作。推拉腿、上下分化、全身、5×5 四个新手计划以普通计划形式载入,随便改。自建动作只需名字+部位,可配自己的照片、GIF 甚至短视频,上传前设备端先剥离位置信息。
2. 引导式训练:杠铃片数学这种细节也管
当天该练什么它自己知道,重量按上次预填,组间休息自动倒计时,PR 边练边检测。杠铃片数学是个容易被忽略的杀手级细节:按你实际拥有的配重片算出每边该挂什么,而不是给一个理论重量。超级组、热身组、降组、rest-pause、平板支撑这类计时动作、按时间+速度的有氧都有;RIR/RPE 按等级配色,训练中屏幕常亮,嘈杂的健身房里计时结束还能闪屏提示。
3. 渐进规则与分析:每个数字都解释“为什么”
线性、Greyskull LP、双重渐进、加时四种渐进规则,按计划或按动作设置;每个目标重量都解释“为什么是这个数”,漏练不加重量、停滞自动触发减载。分析端有 1RM 估算曲线、结构平衡比(Poliquin、Thibaudeau、ATG 三套体系)、GitHub 风格的年度训练热图,以及三模式肌肉地图:容量去了哪里、哪里还在恢复、哪里被你遗忘了。
4. 数据主权工程:合并而不是覆盖
Passkey 登录(Face ID/指纹),密码登录默认关闭,新设备扫码或一次性配对码接入。两台设备同时记录会做合并而不是覆盖——这是自托管应用最容易翻车的地方,它处理了。导入做得很全:FitNotes、Strong、Hevy(CSV 或 Pro API key)、Apple Health 体重,识别不了的动作自动变成自定义动作,数据不丢。一键 JSON 导出,kg↔lb 切换还会主动问你要不要换算存量数据。
5. 可选的 AI 层:默认关闭,跑在你服务器上
AI 教练默认关闭,要用得自己填 provider key(Anthropic/OpenAI/Gemini,或局域网里的 Ollama),跑在你自己的服务器上;它读你真实的训练记录提改进建议,每条带证据、需要你批准、可以撤销。另有一个只读 MCP server,让 Claude Desktop 直接回答“我上周卧推了多少”。这两样都不在默认 Docker 构建里——不用 AI,它们就不存在。
技术实现:三个容器和一个干净的版权方案
前端是 React + Vite 的 PWA,可离线、可加主屏;后端 Java API。同一套代码库用 Capacitor 打包成安卓 APK——刻意不上架 Play Store,每个构建带 SHA256 校验和,应用内自检更新。iOS 因为苹果不允许侧载,只能走自托管 + PWA 路线。
部署是三个容器:web、api,外加一个一次性的 media 初始化容器(从上游数据集拉约 140MB 动作媒体)。版权处理值得点名表扬:动作图片和动画来自 ExerciseDB 数据集,元数据是 MIT 但图片版权归 Gym visual,openGym 的方案是不内置、不分发、由实例自行下载,NOTICE.md 写得明明白白——这是很多爬数据集的开源项目做不到的干净。镜像同时发布在 GitLab 与 GHCR,测试流水线和覆盖率徽章齐全,amd64/arm64 双架构。
快速上手
git clone https://github.com/DuarteSantos8/openGym cd openGym cp .env.example .env docker compose pull docker compose up -d打开 localhost:8080 创建 profile 就能用,首次启动下载 140MB 动作媒体。手机端想用 Passkey 需要给实例配 HTTPS 域名(.env 改两行,官方指南覆盖 Cloudflare Tunnel/Caddy/Traefik/nginx)。不想折腾服务器:直接下载签名 APK(离线版,无同步),或者先玩在线 demo。
为什么突然火了
我翻了 Reddit 和 HN,没有找到单一的引爆帖——这轮更像几股力量的合流,而不是病毒式单点。其一,自托管目录站 10 月初集中收录:selfhostedworld 10 月 3 日扫描更新、opensourcealternatives 与 zendot 先后发布专文,把项目推到了自托管社群的推荐位。其二,产品在持续打磨:v1.3.7/3.8/3.9 三周连发,9 月 20 日那版一口气修了 24 个社区报告——收录潮和更新节奏互为因果。其三,Hevy、Strong 的订阅疲劳真实存在,“健身 App 倒闭潮”在欧美自托管社区是常谈话题。其四,作者 DuarteSantos8 一个人贡献了 869 个 commit,完成度明显超过周末项目,口碑自传播。截至发稿还在加速:今天一天涨了总量的三分之一。
横向对比
wger 数据为 GitHub API 10 月 6 日实测:7,031★,2013 年立项。wger 是这条赛道 13 年的老兵,openGym 两个半月走完了它三分之一的星路——这也说明品类需求长期存在,缺的一直是“现代 App 手感”。
适合谁用,局限在哪
适合:家里有 NAS、树莓派或便宜 VPS 的 homelab 玩家;对健康数据敏感、不想喂给商业公司的人;正在给 Hevy/Strong 交订阅费的训练者;想共用一个实例的家庭或训练小组;想把健身数据接进 Claude 的 MCP 玩家。
局限也要说实话:手机端 Passkey 需要自备 HTTPS 域名,纯小白有门槛;iOS 没有原生应用只能 PWA;管理后台简陋,别拿去运营商业健身房;单人主导,bus factor 是 1;分析偏力量训练,瑜伽、团课、跑步覆盖弱;AI 教练要自备 API key。
写在最后
openGym 是我今年看到的最完整的“自托管替代订阅”范本:功能对齐商业 App,AI 克制地放在可选位,版权与安全细节处理干净。如果你恰好健身、又恰好有台吃灰的服务器,现在就是下手的最好时机——等它涨到一万星,今天这篇文章就是你的入坑证明。