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/openGym
openGym 是一款自托管的健身房与体重记录应用,而它的管理员后台是多人使用实例的运营中枢:用邀请码控制谁能注册、用审计日志追踪每次登录与管理员操作、用用户管理功能查看、停用或删除任何账户。本指南带你 10 分钟掌握这三项核心能力,让你的实例安全可控。
一、管理员后台是什么 📋
管理员后台(Admin dashboard)是 openGym 面向实例管理员的运营页面,由一组卡片组成,覆盖运行实例的全部关键信息:
- 总览指标:用户总数、正在训练的人数、7 天内活跃数、被停用的账户数
- 正在训练:谁此刻正在做哪组动作,实时刷新
- 邀请码卡片:生成、复制、吊销注册邀请码
- 用户列表:点击任一用户查看其训练概况
- 活动日志:登录成功/失败、注册被拒、管理员操作全记录
这个页面刻意只展示统计数字,不会泄露任何人的具体训练数据。界面源码位于 frontend/src/views/Admin.jsx,对应的接口定义在 api/openapi.yaml 的 admin 标签组中。
二、三步开启管理员权限 ⚙️
openGym 默认是开放注册、无管理员模式。开启后台只需三步:
- 先注册自己的账户(passkey 档案)
- 复制你的账户 ID:进入设置 → 账户 → Account ID,点一下即可复制(它也存在
./data/db.json的users[].id字段中) - 在
.env中设置:ADMIN_UIDS=你的账户ID(多个管理员用逗号分隔),重启实例
完成后,你的设置页面会出现Admin dashboard入口。管理员权限由你的 passkey 把关并在服务端二次校验,无需独立登录。完整步骤见官方文档 docs/SELF_HOSTING.md 的「Multiple users」章节。
三、邀请码:控制谁能注册 🔑
想让健身房实例只对熟人开放?在.env中加入:
INVITE_ONLY=1—— 新账户必须持有邀请码才能创建档案ALLOW_GUEST=0—— 同时移除「无账户继续使用」的访客按钮(访客模式数据从不上服务器,在封闭实例里没有意义)
在后台的Invite codes卡片中:
| 操作 | 说明 |
|---|---|
| New code | 一键生成 16 位一次性邀请码并自动复制到剪贴板 |
| 点击代码 | 随时复制未使用的代码 |
| 删除图标 | 吊销未使用的代码;已兑换的代码不可吊销 |
| Already used 区 | 展示已用代码对应的是哪位用户 |
邀请码是一次性的,用掉即失效;切换到邀请制后,已有账户完全不受影响。
四、审计日志:谁登录了、谁失败了 🕵️
Activity log(审计日志)记录四类事件:登录/登出、失败尝试、被拒绝的注册,以及所有管理员操作(停用账户、创建/吊销邀请码、清空日志本身)。
日志以「每行一个 JSON 对象」的形式存在./data/audit.log,面板与命令行读的是同一份文件——你可以直接tail -f data/audit.log配合jq分析。日志条目的人话翻译规则在 frontend/src/lib/audit.js 中,涵盖从auth.login.fail到admin.invite.revoke的全部事件类型。
关键配置(均在.env):
| 变量 | 默认值 | 作用 |
|---|---|---|
AUDIT_LOG | 开启 | 设为0完全关闭审计 |
AUDIT_MAX | 5000 | 最多保留的事件条数 |
AUDIT_DAYS | 90 | 最长保留天数 |
AUDIT_IP | off | 设为net只记网段、full记完整 IP |
几个值得注意的隐私设计:
- 默认不记录 IP,也从不存储浏览器指纹或失败登录的 passkey ID
- 访客从不出现——访客模式与服务器零通信
- 被停用的账户会「安静」下来:它只会留下持续失败的登录尝试
- 清空日志本身也会被记录,且事件 ID 连续计数,任何缺口都一目了然
面板上可按All / Sign-ins / Admin / Failed四个标签筛选,失败事件会以红色failed徽章标出——连续误触 Face ID 也不会被渲染成「安全事件」,只是一排红色小徽章。
五、用户管理:查看、停用与删除 👥
点击用户列表中的任意一行,进入用户详情页:
- 概况:工作锻炼数、体重记录数、计划数、最近同步时间
- 标签:admin、disabled、邀请码来源、密码登录、注册日期一目了然
- 训练历史:最近 60 次锻炼的名称、日期、时长与总量
三种核心操作,破坏力递增:
- 停用账户(Disable)—— 对方在所有设备登出、无法再登录和同步,但数据原封保留,随时可一键重新启用。这是日常首选。
- 导出数据(Download their data)—— 把该用户的完整档案导出为 JSON 文件。删除前强烈建议先做这一步。
- 删除账户(Delete)—— 全应用唯一的破坏性操作,因此要求两次确认:抹掉其全部锻炼、体重、计划、passkey 与推送通知,不可恢复。
若实例开启了密码登录(PASSWORD_LOGIN=1),管理员还可以为用户生成一次性重置码:代码只显示一次、24 小时有效、仅以哈希存储;发放后旧密码立即失效、用户全局登出,但其 passkey 仍可正常使用。管理员账户之间无法互相重置,防止权限越权。
六、数据存在哪里、如何备份 💾
所有数据都集中在宿主机项目的./data目录:
| 文件 | 内容 |
|---|---|
db.json | 档案与 passkey 公开数据 |
state-<user>.json | 每个用户的计划、锻炼、体重与设置 |
audit.log | 管理员审计日志 |
secret | 会话 cookie 签名密钥 |
备份只需打包整个目录,例如:
tar czf opengym-backup-$(date +%F).tar.gz data/恢复时解回项目目录即可。由于 passkey 私钥从不上服务器(留在手机安全硬件或密码管理器中),./data就是你实例的全部家当。
七、安全小贴士 🔒
- 邀请码本身是 64 位随机值,防猜测靠的是长度,暴力尝试的拦截交给反向代理的限流
- 管理员路由全部在服务端强制校验(
401/403),前端隐藏页面不算安全边界 - 登录失败节流按账户+地址双维度计数,切换登录名称也绕不开暂停
- 更多细节可查阅 SECURITY.md 与 docs/SELF_HOSTING.md
写在最后
邀请码管住大门,审计日志看住动静,用户管理兜住善后——三张卡片加起来,就是 openGym 管理员后台的全部。对于家庭健身房、跑团或小型团队来说,这套纯.env配置 + 面板操作的方案,足够以最小成本守住你的自托管健身实例。
【免费下载链接】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),仅供参考