Workout.cool快速上手指南:5分钟搭建你的个人健身平台
2026-02-05 04:49:55作者:戚魁泉Nursing
你还在为找不到开源、可定制的健身追踪平台而烦恼吗?想拥有专属的锻炼计划管理系统却受制于商业软件的功能限制?本文将带你5分钟从零搭建Workout.cool——一个现代化、功能全面的开源健身平台,让你完全掌控自己的健身数据与训练方案。
读完本文你将能够:
- 快速部署完整的健身管理系统
- 配置用户认证与数据库
- 导入专业的健身动作库
- 个性化定制训练计划
- 掌握平台核心功能与扩展方法
🚀 环境准备与快速安装
系统要求清单
| 软件/工具 | 版本要求 | 用途 |
|---|---|---|
| Node.js | 18.x 或更高 | 运行JavaScript环境 |
| pnpm | 8.x+ 或 npm | 包管理工具 |
| PostgreSQL | 14.x+ | 数据库服务 |
| Docker | 可选 | 容器化部署 |
| Git | 最新版 | 代码版本控制 |
一键安装流程
# 1. 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/wo/workout-cool.git
cd workout-cool
# 2. 安装依赖包
pnpm install
# 3. 配置环境变量
cp .env.example .env
# 4. 使用Docker快速启动(推荐新手)
make init
# 5. 手动启动开发服务器(适用于已有PostgreSQL)
pnpm dev
执行上述命令后,系统将自动完成:
- 数据库初始化与迁移
- 基础数据导入
- 开发服务器启动(默认端口3000)
⚙️ 核心配置详解
环境变量关键参数
编辑.env文件,配置以下核心参数:
# 数据库连接(必填)
DATABASE_URL="postgresql://username:password@localhost:5432/workout_cool"
# 认证密钥(使用命令生成:openssl rand -base64 32)
BETTER_AUTH_SECRET="your-secure-random-string"
# 应用URL(开发环境默认值)
BETTER_AUTH_URL="http://localhost:3000"
# 可选:Google登录配置
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
# 可选:邮件服务(用于用户验证)
RESEND_API_KEY="re_your-api-key"
⚠️ 安全提示:生产环境必须更换默认密钥,使用强随机字符串并定期轮换
数据库结构概览
Workout.cool采用Prisma ORM管理数据库,核心数据模型关系如下:
erDiagram
User {
String id PK
String email
String name
UserRole role
DateTime createdAt
}
Exercise {
String id PK
String name
String description
String fullVideoUrl
}
WorkoutSession {
String id PK
String userId FK
DateTime startedAt
DateTime endedAt
}
WorkoutSet {
Int setIndex
Int valuesInt
Boolean completed
}
User ||--o{ WorkoutSession : "创建"
Exercise ||--o{ WorkoutSessionExercise : "包含"
WorkoutSession ||--o{ WorkoutSessionExercise : "包含"
WorkoutSessionExercise ||--o{ WorkoutSet : "包含"
主要数据实体说明:
- User: 用户信息与认证数据
- Exercise: 健身动作库,包含详细说明与视频链接
- WorkoutSession: 训练记录,关联用户与动作
- WorkoutSet: 每组训练数据,如重量、次数、完成状态
💪 动作数据库导入
导入命令与格式
Workout.cool支持CSV格式批量导入动作数据:
# 使用示例数据导入
pnpm run import:exercises-full ./data/sample-exercises.csv
# 自定义CSV导入
pnpm run import:exercises-full /path/to/your/exercises.csv
CSV文件需包含以下列(至少):
id,name,name_en,description,description_en,attribute_name,attribute_value
1,"深蹲","Squat","基础下肢训练动作","Basic lower body exercise",PRIMARY_MUSCLE,QUADRICEPS
1,"深蹲","Squat","基础下肢训练动作","Basic lower body exercise",EQUIPMENT,BODYWEIGHT
1,"深蹲","Squat","基础下肢训练动作","Basic lower body exercise",MECHANICS_TYPE,COMPOUND
支持的属性类型
系统支持多种动作分类属性,完整列表如下:
pie
title 动作类型分布
"力量训练(STRENGTH)" : 45
"自重训练(BODYWEIGHT)" : 30
"有氧训练(CARDIO)" : 15
"拉伸训练(STRETCHING)" : 10
主要属性类别:
- TYPE: 训练类型(力量、有氧、拉伸等)
- PRIMARY_MUSCLE: 主要肌群(股四头肌、胸肌、背阔肌等)
- EQUIPMENT: 所需器械(哑铃、杠铃、弹力带等)
- MECHANICS_TYPE: 动作机制(复合动作、孤立动作)
🔑 用户认证与权限
认证流程
sequenceDiagram
participant 用户
participant 应用
participant 数据库
用户->>应用: 访问登录页面
应用->>用户: 显示登录表单
用户->>应用: 提交邮箱/密码
应用->>数据库: 验证凭据
数据库-->>应用: 返回验证结果
alt 验证成功
应用->>用户: 创建会话并重定向
else 验证失败
应用->>用户: 显示错误信息
end
角色与权限管理
系统内置两种用户角色:
| 角色 | 权限范围 | 典型场景 |
|---|---|---|
| user | 个人训练记录管理 | 普通用户 |
| admin | 全平台数据管理 | 系统管理员 |
修改用户角色命令:
# 使用Prisma Studio可视化管理
pnpm prisma studio
# 或通过API更新(需管理员权限)
# PUT /api/admin/users/{id}
📊 功能使用指南
训练计划创建流程
-
创建训练会话:
- 访问
/onboarding设置训练目标 - 或直接进入
/workout-builder开始构建
- 访问
-
选择训练动作:
- 按肌群筛选(胸部、背部、腿部等)
- 按器械类型筛选(哑铃、杠铃、自重等)
- 查看动作详情与示范视频
-
设置训练参数:
- 组数与每组次数
- 重量/阻力设置
- 休息时间
- 完成状态跟踪
flowchart TD
A[开始训练] --> B[选择肌群]
B --> C{有器械?}
C -->|是| D[选择器械类型]
C -->|否| E[显示自重动作]
D --> F[筛选动作列表]
E --> F
F --> G[添加到训练计划]
G --> H[设置组数/次数]
H --> I[开始训练]
I --> J[记录完成情况]
J --> K[生成训练报告]
数据统计与进度跟踪
系统自动记录训练数据并生成统计报告:
- 训练频率分析
- 肌群训练分布
- 重量/次数进步曲线
- 完成率与训练时长统计
访问 /profile 查看个人数据仪表盘,或通过API导出数据进行自定义分析:
// 示例:获取用户训练历史
fetch('/api/workout-sessions', {
headers: {
'Authorization': `Bearer ${userToken}`
}
})
.then(res => res.json())
.then(data => console.log(data));
🛠️ 开发与扩展
项目架构概览
采用Feature-Sliced Design架构,代码组织如下:
src/
├── app/ # Next.js路由与页面
├── entities/ # 核心数据模型(用户、训练等)
├── features/ # 业务功能模块
│ ├── auth/ # 认证相关功能
│ ├── workout-builder/ # 训练计划创建
│ └── workout-session/ # 训练记录管理
├── shared/ # 共享组件与工具
└── widgets/ # UI组件
常用开发命令
# 运行开发服务器
pnpm dev
# 构建生产版本
pnpm build
# 运行单元测试
pnpm test
# 数据库迁移
pnpm prisma migrate dev --name add_new_feature
# 生成API文档
pnpm run docs
📝 部署指南
生产环境部署选项
1. 基础VPS部署
# 1. 准备环境
apt update && apt install -y nodejs postgresql pnpm
# 2. 配置数据库
sudo -u postgres psql -c "CREATE DATABASE workout_cool;"
# 3. 部署应用
git clone https://gitcode.com/gh_mirrors/wo/workout-cool.git
cd workout-cool
pnpm install
pnpm build
# 4. 使用PM2启动
pnpm add -g pm2
pm2 start npm --name "workout-cool" -- start
2. Docker Compose部署
# docker-compose.yml
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/workout_cool
- NODE_ENV=production
- BETTER_AUTH_SECRET=${SECRET}
db:
image: postgres:14
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_DB=workout_cool
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
启动命令:docker-compose up -d
❓ 常见问题解决
数据库连接失败
- 检查PostgreSQL服务是否运行:
systemctl status postgresql - 验证数据库URL格式:
postgresql://user:pass@host:port/dbname - 确认数据库用户权限:
GRANT ALL PRIVILEGES ON DATABASE workout_cool TO username;
动作导入失败
- 检查CSV文件编码(需UTF-8)
- 验证属性值是否符合枚举定义(见schema.prisma)
- 确保没有重复的slug字段值
认证服务无法启动
- 检查BETTER_AUTH_SECRET是否设置
- 确认JWT密钥长度至少32字符
- 验证BETTER_AUTH_URL与实际访问URL一致
📚 学习资源与社区
官方文档与教程
- 完整文档:访问
/docs目录或在线文档 - 视频教程:项目wiki中的"入门视频"系列
- API参考:
pnpm run docs生成Swagger文档
贡献代码指南
- Fork项目仓库
- 创建特性分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'feat: add amazing feature' - 创建PR并描述功能改进
贡献者将自动出现在README的贡献者墙中
📈 功能路线图
| 阶段 | 主要功能 | 预计时间 |
|---|---|---|
| v1.0 | 基础训练记录与动作库 | 已完成 |
| v1.1 | 高级统计与进度图表 | 进行中 |
| v1.2 | 移动响应式优化 | Q4 2025 |
| v2.0 | 社区功能与训练分享 | 2026 Q1 |
| v2.1 | 智能训练计划推荐 | 2026 Q2 |
感谢选择Workout.cool!如有问题或建议,请提交issue或参与社区讨论。开始你的健身数据管理之旅吧!
开源地址:https://gitcode.com/gh_mirrors/wo/workout-cool
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust047
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
ERNIE-ImageERNIE-Image 是由百度 ERNIE-Image 团队开发的开源文本到图像生成模型。它基于单流扩散 Transformer(DiT)构建,并配备了轻量级的提示增强器,可将用户的简短输入扩展为更丰富的结构化描述。凭借仅 80 亿的 DiT 参数,它在开源文本到图像模型中达到了最先进的性能。该模型的设计不仅追求强大的视觉质量,还注重实际生成场景中的可控性,在这些场景中,准确的内容呈现与美观同等重要。特别是,ERNIE-Image 在复杂指令遵循、文本渲染和结构化图像生成方面表现出色,使其非常适合商业海报、漫画、多格布局以及其他需要兼具视觉质量和精确控制的内容创作任务。它还支持广泛的视觉风格,包括写实摄影、设计导向图像以及更多风格化的美学输出。Jinja00
热门内容推荐
最新内容推荐
老旧Mac系统升级:让过时设备重获新生的完整解决方案高效解决输入设备控制难题:Input Remapper的灵活配置与自定义控制指南FSearch:让Linux文件搜索快如闪电的索引式搜索工具3步攻克音乐歌词获取难题:智能云音乐歌词解决方案Awoo Installer:3大突破破解Switch游戏安装难题的全方位解决方案详解Oni-Duplicity:打造专属《缺氧》世界的全能存档编辑工具告别ADB命令行困扰:ADB Explorer让Android设备管理如此简单VoTT:计算机视觉标注工具的全流程实践指南Universal-IFR-Extractor实战指南:从功能解析到配置优化的完整路径3个步骤掌握GPT Researcher:从智能研究助手到自动化报告生成
项目优选
收起
暂无描述
Dockerfile
682
4.36 K
Ascend Extension for PyTorch
Python
524
635
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
204
44
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
401
307
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
950
901
暂无简介
Dart
929
229
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.58 K
912
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
134
214
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
125
205
昇腾LLM分布式训练框架
Python
145
169