docs: complete developer documentation (5 guides + index)

- 01-快速开始: local setup for all 3 modules, common issues
- 02-配置说明: all env vars, WeChat/Pay/DB/COS config details
- 03-架构说明: system overview, directory structure, data flows
- 04-部署指南: Tencent Cloud SCF/COS deployment, launch checklist
- 05-API接口文档: all 42 endpoints with params and response format
- README index with audience guide and quick links
这个提交包含在:
Guoguo
2026-05-18 08:11:30 -07:00
父节点 7e036576e3
当前提交 0feb900a1d
修改 6 个文件,包含 2630 行新增0 行删除
+335
查看文件
@@ -0,0 +1,335 @@
# 部署指南
本文档面向将 jw-beauty 项目部署到腾讯云生产环境的运维人员。
---
## 1. 部署架构
```
┌─────────────┐ HTTPS ┌──────────────────┐
│ 微信小程序 │ ───────────────► │ SCF HTTP 函数 │
└─────────────┘ │ jw-beauty-api │
│ (Node.js 18) │
┌─────────────┐ HTTPS │ │ VPC 内网 ┌──────────────┐
│ 管理后台H5 │ ──► COS/CDN │ scf_bootstrap │ ──────────────────► │ TencentDB │
│ (UniApp) │ │ → local-server │ │ MySQL 5.7+ │
└─────────────┘ └──────────────────┘ └──────────────┘
│ COS SDK
┌──────────────────┐
│ COS Bucket │
│ 头像/固件/后台H5 │
└──────────────────┘
```
| 组件 | 服务 | 说明 |
|------|------|------|
| 后端 API | 腾讯云 SCF (HTTP 函数) | Express 应用,通过 scf_bootstrap 启动 |
| 数据库 | TencentDB for MySQL | 同 VPC 内网连接,端口 3306 |
| 对象存储 | COS | 存放头像、固件包、管理后台静态文件 |
| API 域名 | api.vsai.net.cn | 指向 SCF 函数 URL / API 网关 |
| CDN 域名 | tx.vsai.net.cn | COS 自定义域名,用于头像和固件下载 |
| 小程序 | 微信小程序 | 通过微信开发者工具上传并提审 |
---
## 2. 后端部署(SCF
### 2.1 打包
部署包以 `server/` 为根目录打包,包含以下文件和目录:
```
index.js # SCF 入口 (exports.main_handler)
package.json
package-lock.json
scf_bootstrap # HTTP 函数启动脚本
scripts/ # local-server.js 等
src/ # 应用源码
sql/ # schema.sql
node_modules/ # 依赖
```
**不要**`.env` 文件打进部署包。
打包命令:
```bash
cd server
npm install --production
rm -f /tmp/hox-http-function.zip
zip -qry /tmp/hox-http-function.zip \
index.js package.json package-lock.json \
scripts scf_bootstrap src sql node_modules
```
### 2.2 scf_bootstrap 配置
当前使用 HTTP 函数模式,`scf_bootstrap` 内容:
```bash
#!/bin/bash
set -e
export PORT=9000
node scripts/local-server.js
```
`scf_bootstrap` 必须有可执行权限。SCF 平台会直接运行此文件启动 HTTP 服务,监听 `PORT` 端口。
> 备注:`index.js` 中的 `main_handler` 是事件函数入口,目前未使用。如果切换到事件函数触发模式,SCF 入口改为 `index.main_handler`。
### 2.3 环境变量设置
在 SCF 控制台的函数配置中添加以下环境变量:
| 变量名 | 必填 | 说明 |
|--------|------|------|
| `NODE_ENV` | 是 | 必须设为 `production` |
| `PORT` | 否 | 默认 `9000`,scf_bootstrap 已设置 |
| `TENCENT_SECRET_ID` | 是 | 腾讯云 API 密钥 IDCOS 签名用) |
| `TENCENT_SECRET_KEY` | 是 | 腾讯云 API 密钥 Key |
| `TENCENT_REGION` | 否 | 默认 `ap-guangzhou` |
| `DB_HOST` | 是 | 数据库内网地址 |
| `DB_PORT` | 否 | 默认 `3306` |
| `DB_USER` | 是 | 数据库用户名 |
| `DB_PASSWORD` | 是 | 数据库密码 |
| `DB_NAME` | 否 | 默认 `jw_beauty` |
| `COS_BUCKET` | 否 | 默认 `jw-bucket-1426323813` |
| `COS_REGION` | 否 | 默认 `ap-guangzhou` |
| `COS_CDN_DOMAIN` | 否 | 默认 `tx.vsai.net.cn` |
| `WECHAT_APPID` | 是 | 微信小程序 AppID |
| `WECHAT_SECRET` | 是 | 微信小程序 AppSecret |
| `JWT_SECRET` | 是 | 用户 JWT 签名密钥(随机长字符串) |
| `ADMIN_JWT_SECRET` | 是 | 管理员 JWT 签名密钥(随机长字符串) |
| `ADMIN_USERNAME` | 是 | 初始管理员用户名(不要用默认 admin) |
| `ADMIN_PASSWORD` | 是 | 初始管理员密码(不要用默认 admin) |
> 生产环境安全检查:代码在 `NODE_ENV=production` 时会校验 `JWT_SECRET` 和 `ADMIN_JWT_SECRET` 不是默认值,`ADMIN_USERNAME` / `ADMIN_PASSWORD` 不是 `admin/admin`,否则启动报错。
参考模板文件:`server/.env.production.example`
### 2.4 VPC 网络配置
SCF 函数必须配置与 TencentDB 相同的 VPC 和子网,才能通过内网地址访问数据库。
操作步骤:
1. 在 SCF 控制台 → 函数管理 → 选择函数 → 函数配置 → 网络配置
2. 选择与 TencentDB 实例相同的 VPC 和子网
3. 确认安全组允许 SCF 访问数据库端口(默认 3306)
### 2.5 注意事项
- **冷启动**SCF 冷启动时需加载 Node.js 运行时和 `node_modules`,首次请求延迟较高(约 1-3 秒)。可配置预置并发实例减少冷启动。
- **超时设置**:建议函数超时设为 30 秒以上。
- **内存**:建议 256MB 或以上。
- **日志**:错误日志通过 `console.error` 输出,可在 SCF 日志服务中查看。
---
## 3. 数据库初始化
### 3.1 连接 TencentDB
本地连接 TencentDB 需要:
- 数据库已开启公网访问,或通过 VPN/跳板机连接内网
- 安全组白名单中已添加本机公网 IP
- `DB_PORT` 使用控制台显示的公网端口
`server/.env` 中配置连接信息后执行:
```bash
cd server
npm install
npm run db:init
```
### 3.2 执行 schema.sql
`db:init` 脚本会自动执行 `sql/schema.sql`,创建以下业务表:
| 表名 | 说明 |
|------|------|
| `users` | 用户信息 |
| `devices` | 设备(产品码) |
| `bindings` | 用户-设备绑定关系 |
| `subscriptions` | 订阅记录 |
| `treatment_records` | 护理记录 |
| `device_events` | 设备事件 |
| `device_commands` | 远程指令队列 |
| `operation_logs` | 操作日志 |
| `admin_accounts` | 管理员账户 |
| `system_settings` | 系统设置 |
| `firmware_files` | 固件版本 |
同时写入默认系统设置(月卡价格、年卡价格、试用天数等)。
### 3.3 初始管理员创建
`db:init` 会使用环境变量 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 创建初始管理员账户。
首次登录后应立即在管理后台修改默认密码。
---
## 4. 管理后台部署(COS
### 4.1 构建
确认 `admin-console/src/config/env.js``ENV` 已设为 `prod`(或 API 地址正确):
```js
const ENV = 'prod'
```
然后构建:
```bash
cd admin-console
npm install
npm run build:h5
```
构建产物位于 `admin-console/dist/build/h5/`
### 4.2 上传到 COS
方式一:使用部署脚本(推荐)
```bash
cd admin-console
npm run deploy:cos
```
脚本会读取 `server/.env` 中的 COS 凭证,将构建产物上传到 COS bucket 的 `admin/` 前缀下。
可通过环境变量自定义前缀:
```bash
ADMIN_COS_PREFIX=admin-test/ npm run deploy:cos
```
方式二:手动上传
通过 COS 控制台或 COSCMD 工具将 `dist/build/h5/` 目录下所有文件上传到 bucket 的 `admin/` 目录。
### 4.3 CDN/域名配置
管理后台通过 COS 的自定义域名(`tx.vsai.net.cn`)访问:
- 在 COS 控制台为 bucket 绑定自定义域名
- 配置 CDN 加速(可选)
- 访问地址:`https://tx.vsai.net.cn/admin/`
### 4.4 base path 设置
管理后台的路由 base path 为 `/admin/`,确保 COS 上传前缀与此一致。
如果需要配置单页应用(SPA)的 history 模式回退,可在 COS 静态网站配置中设置错误文档为 `/admin/index.html`
---
## 5. 小程序发布
### 5.1 环境切换
发布前将 `miniprogram/config/env.js` 中的 `ENV` 改为 `prod`
```js
var ENV = 'prod'
```
### 5.2 微信开发者工具上传
1. 打开微信开发者工具
2. 导入项目目录 `miniprogram/`
3. 确认 AppID 正确
4. 点击"上传",填写版本号和备注
5. 在微信公众平台 → 版本管理 → 提交审核
### 5.3 审核注意事项
- **用户协议** 和 **隐私政策** 页面必须存在且内容完整,否则审核不通过
- 涉及蓝牙权限的小程序需要在 `app.json` 中声明并说明用途
- 隐私信息收集弹窗需符合微信规范
- 建议提交审核前在体验版充分测试
---
## 6. 域名和证书
### 6.1 API 域名
| 域名 | 用途 | 指向 |
|------|------|------|
| `api.vsai.net.cn` | 后端 API | SCF 函数 URL / API 网关 |
需要配置 HTTPS 证书(腾讯云可申请免费 SSL 证书)。
### 6.2 COS CDN 域名
| 域名 | 用途 | 指向 |
|------|------|------|
| `tx.vsai.net.cn` | 头像/固件下载/管理后台 | COS bucket CDN |
在 COS 控制台绑定自定义域名并配置 HTTPS。
### 6.3 小程序合法域名配置
在微信公众平台 → 开发管理 → 开发设置 → 服务器域名中配置:
| 类型 | 域名 |
|------|------|
| request 合法域名 | `https://api.vsai.net.cn` |
| downloadFile 合法域名 | `https://tx.vsai.net.cn` |
| uploadFile 合法域名 | `https://api.vsai.net.cn` |
---
## 7. 上线检查清单
### 环境配置
- [ ] `NODE_ENV=production` 已设置
- [ ] `JWT_SECRET``ADMIN_JWT_SECRET` 已更换为强随机字符串
- [ ] `ADMIN_USERNAME` / `ADMIN_PASSWORD` 已更换默认值
- [ ] 数据库连接使用 VPC 内网地址
- [ ] 安全组规则正确(SCF → MySQL 3306
- [ ] COS 凭证配置正确
### 数据库
- [ ] `schema.sql` 已执行成功,所有表已创建
- [ ] 初始管理员已创建并更改了默认密码
- [ ] 默认系统设置已写入 `system_settings`
### 后端
- [ ] `GET /health` 返回 `{"code":0}`
- [ ] `POST /api/v1/admin/login` 可正常登录
- [ ] `GET /api/v1/admin/dashboard` 返回统计数据
- [ ] `GET /api/v1/admin/settings` 返回系统设置
### 管理后台
- [ ] 构建时 `ENV` 已设为 `prod`
- [ ] 构建产物已上传到 COS `admin/` 目录
- [ ] `https://tx.vsai.net.cn/admin/` 可正常访问
- [ ] 管理员可登录并查看仪表盘
### 小程序
- [ ] `miniprogram/config/env.js``ENV='prod'`
- [ ] 微信公众平台已配置 request/download/upload 合法域名
- [ ] 小程序登录流程正常
- [ ] 蓝牙扫码绑定流程正常
- [ ] 护理记录同步正常
- [ ] 用户协议和隐私政策页面内容完整
### 安全
- [ ] `.env` 文件未包含在部署包中
- [ ] 生产环境 `mock-bind``mock-purchase` 接口已自动禁用
- [ ] CORS 策略按需收紧(当前为 `*`
- [ ] Rate limiting 已生效(登录 15min/10次,管理员 15min/5次)