# health **Repository Path**: zzroot123/health ## Basic Information - **Project Name**: health - **Description**: No description available - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-05 - **Last Updated**: 2026-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 昭途日记 · 康复陪伴站(全栈版) 一个「真实内容 + 即用工具 + 低压力陪伴 + 轻商业化」的心理康复陪伴平台。 - **前端**:Next.js 16(App Router)+ TypeScript + Tailwind CSS v4 + Zustand + Recharts - **后端**:Spring Boot 3.2 + Spring Security(JWT 双令牌) + MyBatis-Plus + MySQL 8 + Redis 7 - **后台管理**:数据看板、用户管理、内容运营、社区审核、订单商品、IP 访问日志中心、系统配置 - **合规**:全站固定医疗免责声明;量表结果不作为诊断依据;树洞先审后发 + 敏感词自动过滤 ## 快速开始(克隆到新机器) ```bash # 1. 拉取代码 git clone https://gitee.com/zzroot123/health.git cd health # 2. 启动 MySQL 8 + Redis 7(有 Docker 最省事;没有就装原生服务) docker run -d --name xinyu-mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0 docker run -d --name xinyu-redis -p 6379:6379 redis:7 # 3. 初始化数据库(只执行一次;schema 内含 DROP TABLE,切勿对已有库重复执行) mysql -uroot -proot < backend/src/main/resources/db/schema.sql mysql -uroot -proot < backend/src/main/resources/db/seed.sql # 4. 启动后端(要求 JDK 17;若 JAVA_HOME 不是 17,请先切换) cd backend mvn spring-boot:run # http://localhost:8080 ,健康检查 /health # 5. 启动前端(另开一个终端) cd .. && npm install npm run dev # http://localhost:3000 ``` - 后台入口:`http://localhost:3000/admin/login`,默认账号 `admin / admin123` - 如果你的 MySQL root 密码不是 `root`:启动后端前 `export MYSQL_PASSWORD=你的密码` - Windows 下后端可一键运行:`backend\run.cmd`(自动切到 JDK 17) - 前端会把 `/api` 代理到 `http://localhost:8080`,如需改后端地址设环境变量 `API_BASE_URL` ## 本地启动(同上一节,展开说明) ### 1. 数据库与中间件 ```bash # MySQL 8.0 与 Redis 7 可用 Docker 快速启动 docker run -d --name xinyu-mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0 docker run -d --name xinyu-redis -p 6379:6379 redis:7 # 初始化数据库(先建表再灌测试数据) mysql -uroot -proot < backend/src/main/resources/db/schema.sql mysql -uroot -proot < backend/src/main/resources/db/seed.sql ``` ### 2. 后端(端口 8080) ```bash cd backend # 需 JDK 17(本机 JAVA_HOME 指向 JDK 8 时,先切换) mvn spring-boot:run ``` - 默认管理员:`admin / admin123`(首次启动自动创建,生产环境请立即修改) - 配置可经环境变量覆盖:`MYSQL_HOST`、`MYSQL_PASSWORD`、`REDIS_HOST`、`JWT_SECRET` 等 ### 3. 前端(端口 3000) ```bash npm install npm run dev # http://localhost:3000 npm run build # 生产构建(standalone) npm run lint ``` 前端通过 `next.config.ts` 中的 rewrites 将 `/api/*` 代理到后端 8080,无需额外跨域配置。 后端地址可用环境变量 `API_BASE_URL` 覆盖。 ## 主要路由 | 路由 | 说明 | |------|------| | `/` `/columns` `/articles/[slug]` `/stages` `/qa` | 内容:首页、专栏、文章、康复地图、问答库 | | `/tools/*` | 自救工具:呼吸引导、54321 接地、认知卡片、情绪日记、量表 | | `/treehole` `/community/checkin` `/community/drugs` | 社区:匿名树洞(本机版)、每日打卡、药感匿名数据库 | | `/shop/manuals` `/shop/member` | 商业化:电子手册、会员中心 | | `/login` `/user/profile` `/user/my-data` `/user/orders` | 账号:登录注册、资料、我的数据(云端同步)、订单 | | `/admin/login` `/admin` `/admin/users` `/admin/articles` `/admin/community` `/admin/orders` `/admin/logs` `/admin/settings` | 后台管理(admin / admin123) | ## 后端模块速览 ``` backend/src/main/java/com/xinyu/ ├── controller/ C 端接口:auth / article / qa / search / treehole / │ checkin / drugs / interact / toolbox / order / product / config ├── controller/admin/ 后台接口:auth / dashboard / users / content / │ community / products / orders / logs / settings ├── interceptor/ IP 封禁 → Redis 限流 → 访问日志(全量采集) ├── common/security/ JWT 双令牌 + C 端/管理员双链路鉴权 └── service/ 业务逻辑(敏感词自动审核、先审后发、订单支付等) ``` - **IP 访问日志**:拦截器全量记录 ip / 归属地 / 路径 / 方法 / UA / 用户 / 状态码 / 耗时; 支持多条件筛选、Top 统计、Excel 导出、一键封禁,默认保留 90 天(`xinyu.ip-log.retention-days`) - **每日统计**:`daily_stat` 表自动汇总 PV / UV / 独立 IP / 新增用户 / 订单 / 收入,供看板调用 ## 内容维护 - 文章、专栏、问答、敏感词、商品、系统配置均可在 `/admin` 后台直接维护 - 前端仍保留 `src/lib/content.ts` 等静态内容,作为后端未启动时的降级展示 ## 部署要点(Linux) > **腾讯云/宝塔用户请看**:[`deploy/deploy.md`](deploy/deploy.md) —— 内含 Docker Compose 一键部署全流程(MySQL+Redis+后端+前端+Nginx/HTTPS)、证书与安全收尾说明。 > 相关文件:`deploy/docker-compose.yml`、`deploy/backend.Dockerfile`、`deploy/frontend.Dockerfile`、`deploy/nginx.conf`。 1. **后端**:`mvn -DskipTests package`,用 systemd 或 Docker 运行 jar(端口 8080), 生产环境务必通过环境变量覆盖 `JWT_SECRET` 与数据库密码 2. **前端**:`npm run build` 后使用 `.next/standalone` 产物,PM2 守护: `node .next/standalone/server.js`(设置 `API_BASE_URL=http://127.0.0.1:8080`) 3. **Nginx**:HTTPS 强制跳转;`/api` 反代 Node(3000);Gzip、静态资源缓存、访问日志 4. **数据库**:MySQL 每日全量备份(`mysqldump` + crontab),备份文件异地留存 ## 提醒 本站所有内容均为个人经验分享,不构成任何医疗建议。你的康复,永远比网站更新重要。