
一条docker compose命令跑起私人健身房记录系统openGym快速开始【免费下载链接】openGymSelf-hosted gym body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGymopenGym是一个开源的自托管健身房与体重记录系统自己安排训练计划、逐组记录力量训练支持超级组、热身组、有氧还能看到哪些肌肉在训练、在恢复或在退化并支持从 FitNotes / Strong / Hevy 导入数据全程使用通行密钥passkey登录。你的数据存在你自己的服务器上。这篇文章带你用一条docker compose命令5 分钟把这套私人健身房记录系统跑起来——无需安装 Node无需数据库一个文件夹搞定一切。openGym 是什么为什么值得自己部署大多数健身 App 把数据放在别人的服务器上靠订阅收费公司一关服数据就没了。openGym 的思路相反自托管整套系统跑在你的机器上NAS、VPS 都行没有账号体系强加给你没有订阅、没有广告、没有遥测功能完整每周计划、引导式训练、休息计时、渐进超负荷规则线性、Greyskull LP、双渐进、1324 个带动画演示的动作库、肌肉热力图、体重曲线、17 种语言数据归你所有数据就是一个./data文件夹随时tar打包备份也可以随时一键导出 JSON部署前准备只装一个 Docker唯一的硬性依赖是带 Compose 插件的 Dockerdocker compose version # 能输出版本号就说明 OKopenGym 的架构非常轻一个 nginx 容器web负责前端页面并代理/api一个 Node 容器api负责业务和 passkey 认证数据全部落在宿主机的./data目录。完整架构见官方自托管文档docs/SELF_HOSTING.md。一键部署clone docker compose upgit clone https://gitcode.com/GitHub_Trending/op/openGym cd openGym cp .env.example .env docker compose pull # 拉取预构建镜像不想拉镜像可跳过改用 --build 从源码构建 docker compose up -d就这样。首次启动时media容器会一次性下载约 140 MB 的动图与 GIF 到media/img、media/gif之后自动跳过然后打开http://localhost:8080→ 创建一个 profile按提示录入 passkey→ 开始记录训练顺手验证一下健康状态docker compose ps curl http://localhost:8080/api/health # 返回 {ok:true,...} 即成功常用运维命令操作命令看日志docker compose logs -f停止docker compose down改完.env后生效docker compose up -d注意restart不会重读环境变量不想拉镜像从源码构建docker compose up -d --build构建上下文在 api/Dockerfile 和 web/Dockerfile同样不需要本地装 Node。关键一步给手机用必须上 HTTPSopenGym 用passkeyWebAuthn登录浏览器有两条铁律passkey 绑定精确的主机名RP_ID只在HTTPS下可用——唯一例外是http://localhost所以在运行 Docker 的那台机器上http://localhost:8080完全没问题但手机通过http://内网IP:8080打开时不会弹出 passkey 登录框。想在手机/外网使用需要给一个真实域名套上 TLS。最常见的三种姿势详见 docs/SELF_HOSTING.md 第 3 节Cloudflare Tunnel零开放端口自动 HTTPSCaddy自动申请 Lets Encrypt 证书一行reverse_proxy localhost:8080Traefik / nginx / NPM任意反代把 HTTPS 路由指到web:80然后修改.env并重启# .env RP_IDgym.example.com ORIGINhttps://gym.example.com WEB_PORT8080⚠️ 两个高频坑RP_ID是纯主机名无协议、无端口、无斜杠ORIGIN是带协议、无尾斜杠的完整地址事后改RP_ID会让所有人的 passkey 全部失效——先定域名再让人注册实在没有域名局域网内可以先用访客模式数据只存浏览器或在.env里开PASSWORD_LOGIN1启用密码登录。手机与电脑数据怎么同步openGym 不是单设备 App同一 profile 在多台设备上登录每次保存都携带基线版本号baseRev。两台设备同时改数据时后提交的一方会收到 409 冲突客户端自动把本地改动合并到服务器最新版本再提交——合并而不是互相覆盖。同步时序如下手机端还可以用官方独立 App在已登录的浏览器里打开 设置 → Pair the mobile app生成一次性配对码/二维码手机扫一下即完成绑定App 说明见 docs/MOBILE.md。多人使用与可选加固默认实例是开放注册任何能访问到地址的人都能创建自己的 profile彼此数据隔离。如果是家庭/健身房内部使用建议在.env里加三道锁ADMIN_UIDSyouruserid # 你的账号 ID获得管理后台用户列表、活动日志、禁用账号 INVITE_ONLY1 # 新注册必须用邀请码 ALLOW_GUEST0 # 去掉无账号继续的访客入口账号 ID 在 设置 → Account → Account ID 里点一下即可复制。活动日志默认开启保存在./data/audit.log一行一个 JSONtail -f直接可读默认保留最近 5000 条或 90 天。备份与更新各一行命令备份——所有 profile、passkey、训练历史都在./datatar czf opengym-backup-$(date %F).tar.gz data/更新git pull docker compose pull docker compose up -d源码构建模式则用docker compose up -d --build。你的./data和已下载的媒体文件原封不动。常见问题速查症状解法手机不弹 passkey 登录框你走的是http://或裸 IP没有 HTTPS——按上文给域名套 TLS登录提示 verification failedRP_ID/ORIGIN与地址栏不一致先看docker compose logs api \| grep gym-api on确认服务器实际加载的值端口 8080 被占用.env里设WEB_PORT9090动作图片没下载下来docker compose logs media重跑docker compose up -d或执行 scripts/fetch-media.sh想重置卡住的登录删掉浏览器 cookie 即可会话就是一张签名 cookie更多细节Kubernetes 部署、子路径部署、通知推送、密码重置分别见 docs/SELF_HOSTING_KUBERNETES.md、docs/SELF_HOSTING.md 和 docs/FAQ.md。小结5 分钟拥有自己的健身房记录系统✅ 一条docker compose up -d无数据库、无额外依赖✅ 数据只有一个./data文件夹备份一行tar✅ passkey 登录 多端同步数据永远在你自己的服务器上✅ 支持从 FitNotes / Strong / Hevy 导入历史训练无缝迁移部署完成后把https://gym.example.com添加到手机主屏幕它就会像一个原生 App 一样存在——而你的每一组数据只属于你自己。【免费下载链接】openGymSelf-hosted gym body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGym创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考