文件
jw-beauty/docs/dev/02-配置说明.md
T
Guoguo 0feb900a1d 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
2026-05-18 08:11:30 -07:00

292 行
8.3 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 配置说明
## 环境变量总表
后端所有配置通过 `server/.env` 文件管理(通过 dotenv 加载)。下表列出全部变量:
| 变量名 | 用途 | 示例值 | 必填 | 默认值 |
|--------|------|--------|------|--------|
| `NODE_ENV` | 运行环境 | `development` / `production` | 否 | `development` |
| `PORT` | 监听端口 | `3000` | 否 | `3000` |
| `DB_HOST` | MySQL 主机地址 | `127.0.0.1` | 是 | 无 |
| `DB_PORT` | MySQL 端口 | `3306` | 否 | `3306` |
| `DB_USER` | MySQL 用户名 | `root` | 否 | `root` |
| `DB_PASSWORD` | MySQL 密码 | `mypassword` | 是 | 无 |
| `DB_NAME` | 数据库名 | `jw_beauty` | 否 | `jw_beauty` |
| `WECHAT_APPID` | 微信小程序 AppID | `wxc4045074ef298510` | 生产必填 | 无 |
| `WECHAT_SECRET` | 微信小程序 AppSecret | `abcdef1234567890...` | 生产必填 | 无 |
| `JWT_SECRET` | 用户 JWT 签名密钥 | `a-long-random-string` | 生产必填 | `dev-user-secret` |
| `ADMIN_JWT_SECRET` | 管理员 JWT 签名密钥 | `another-long-random-string` | 生产必填 | `dev-admin-secret` |
| `ADMIN_USERNAME` | 初始管理员用户名 | `admin` | 否 | `admin` |
| `ADMIN_PASSWORD` | 初始管理员密码 | `strongpassword` | 生产必填 | `admin` |
| `TENCENT_SECRET_ID` | 腾讯云 API SecretId | `AKIDxxxx` | COS 功能需要 | 无 |
| `TENCENT_SECRET_KEY` | 腾讯云 API SecretKey | `xxxx` | COS 功能需要 | 无 |
| `TENCENT_REGION` | 腾讯云默认地域 | `ap-guangzhou` | 否 | `ap-guangzhou` |
| `COS_BUCKET` | COS 存储桶名称 | `jw-bucket-1426323813` | 否 | `jw-bucket-1426323813` |
| `COS_REGION` | COS 存储桶地域 | `ap-guangzhou` | 否 | 同 `TENCENT_REGION` |
| `COS_CDN_DOMAIN` | COS CDN 加速域名 | `tx.vsai.net.cn` | 否 | `tx.vsai.net.cn` |
### 生产环境安全检查
`NODE_ENV=production` 时,服务启动会强制检查以下条件,不满足则拒绝启动:
- `JWT_SECRET` 不能是默认值 `dev-user-secret`
- `ADMIN_JWT_SECRET` 不能是默认值 `dev-admin-secret`
- `ADMIN_USERNAME``ADMIN_PASSWORD` 不能是默认值 `admin`
## 微信配置
### 获取 WECHAT_APPID 和 WECHAT_SECRET
1. 登录 [微信公众平台](https://mp.weixin.qq.com/) -> 开发管理 -> 开发设置
2. AppID(小程序ID) 即为 `WECHAT_APPID`
3. AppSecret(小程序密钥) 即为 `WECHAT_SECRET`(需要管理员扫码后才能查看,只显示一次)
```ini
WECHAT_APPID=wxc4045074ef298510
WECHAT_SECRET=你的AppSecret
```
### 开发环境
本地开发时不填这两个值也能运行,但微信登录(`wx.login` -> `code2Session`)会失败。此时可以通过 mock 端点绕过。
## 数据库配置
### 本地开发
```ini
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=你的本地MySQL密码
DB_NAME=jw_beauty
```
使用 Docker 快速启动 MySQL
```bash
docker run -d \
--name jw-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=jw_beauty \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
```
然后 `.env` 中填:
```ini
DB_HOST=127.0.0.1
DB_PASSWORD=rootpass
```
### 腾讯云 TencentDB
SCF 函数部署时,需要将函数放在与 TencentDB 同一 VPC/子网中:
```ini
DB_HOST=10.0.0.x # VPC 内网地址
DB_PORT=3306
DB_USER=root
DB_PASSWORD=腾讯云数据库密码
DB_NAME=jw_beauty
```
### 数据库表结构
共 10 张表(定义在 `server/sql/schema.sql`):
| 表名 | 说明 |
|------|------|
| `users` | 小程序用户,openid 唯一索引 |
| `devices` | 美容仪设备,device_id 为主键 |
| `bindings` | 用户-设备绑定关系 |
| `subscriptions` | 用户订阅记录(月卡/年卡) |
| `treatment_records` | 护理记录,含时长、模式、光密度等 |
| `device_events` | 设备事件日志(错误、告警等) |
| `device_commands` | 下发给设备的远程指令 |
| `operation_logs` | 操作审计日志 |
| `admin_accounts` | 管理员账号 |
| `system_settings` | 系统设置键值对(定价、功能开关等) |
| `firmware_files` | 固件版本记录 |
初始化时会自动插入默认系统设置:月卡 99 元、年卡 899 元、试用 7 天等。
## COS 配置
COS(对象存储)用于存储用户头像和固件文件,通过 CDN 域名对外提供访问。
```ini
TENCENT_SECRET_ID=AKIDxxxx # 腾讯云控制台 -> 访问管理 -> API密钥管理
TENCENT_SECRET_KEY=xxxx
COS_BUCKET=jw-bucket-1426323813 # 存储桶名称(含 APPID 后缀)
COS_REGION=ap-guangzhou # 存储桶所在地域
COS_CDN_DOMAIN=tx.vsai.net.cn # CDN 加速域名(可选,不填有默认值)
```
### 获取密钥
1. 登录 [腾讯云控制台](https://console.cloud.tencent.com/)
2. 访问管理 -> API 密钥管理 -> 新建密钥
3. 复制 SecretId 和 SecretKey
> 建议创建子用户,只授予 COS 相关权限,不要使用主账号密钥。
### 本地开发
不配置 COS 相关变量时,头像上传和固件上传功能会报错,但不影响其他功能开发。
## 安全配置
### JWT_SECRET
用于签发用户端 JWT token,有效期 7 天。生成方法:
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
将输出填入 `.env`
```ini
JWT_SECRET=生成的64位十六进制字符串
```
### ADMIN_JWT_SECRET
用于签发管理后台 JWT token,必须与 `JWT_SECRET` 不同。用同样的方法生成:
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
```ini
ADMIN_JWT_SECRET=另一个64位十六进制字符串
```
### 管理员初始密码
`npm run db:init` 会使用 `.env` 中的 `ADMIN_USERNAME``ADMIN_PASSWORD` 创建管理员账号(bcrypt 哈希存储)。
```ini
ADMIN_USERNAME=admin
ADMIN_PASSWORD=一个强密码
```
> 生产环境不能使用默认值 `admin/admin`,服务启动时会报错退出。
### CORS
当前 CORS 设置为 `Access-Control-Allow-Origin: *`(见 `server/src/app.js`),允许所有来源。这是开发阶段的配置,生产环境应收紧为具体域名。
允许的自定义请求头:
```
Content-Type, Authorization, X-Device-Id, X-App-Version, X-Platform
```
## 小程序配置
### env.js
文件路径:`miniprogram/config/env.js`
```js
var ENV = 'test' // 可选值:local / test / prod
var API_BASES = {
local: 'http://localhost:3000',
test: 'https://api.vsai.net.cn',
prod: 'https://api.vsai.net.cn'
}
var __DEV__ = ENV !== 'prod'
```
#### ENV 取值说明
| 值 | API 地址 | `__DEV__` | 说明 |
|----|---------|-----------|------|
| `local` | `http://localhost:3000` | `true` | 本地开发 |
| `test` | `https://api.vsai.net.cn` | `true` | 连接测试环境 |
| `prod` | `https://api.vsai.net.cn` | `false` | 生产环境 |
#### `__DEV__` 的作用
`__DEV__``true` 时:
- 启用 mock 绑定设备(无需蓝牙握手)
- 启用 mock 购买订阅(无需微信支付)
- 可能显示额外的调试信息
发布正式版时务必将 `ENV` 设为 `prod`
### project.config.json
文件中的 `appid` 字段需要与实际的小程序 AppID 一致:
```json
{
"appid": "wxc4045074ef298510",
"projectname": "hox-beauty"
}
```
如果没有该 AppID 权限,在微信开发者工具中可以选择测试号。
## 管理后台配置
### env.js
文件路径:`admin-console/src/config/env.js`
```js
const ENV = 'test' // 可选值:local / test / prod
const API_BASES = {
local: 'http://localhost:3000',
test: 'https://api.vsai.net.cn',
prod: 'https://api.vsai.net.cn'
}
```
与小程序的 `env.js` 功能一致,本地开发时改为 `local`
### Vite base path
`admin-console/vite.config.js` 配置了 base 路径:
```js
export default defineConfig({
base: process.env.PUBLIC_PATH || '/admin/',
plugins: [uni()]
})
```
- 默认 base 为 `/admin/`,意味着所有静态资源路径都会加上 `/admin/` 前缀
- 部署到 COS 后通过 `https://你的域名/admin/` 访问
- 本地开发时访问地址为 `http://localhost:5173/admin/`
- 如需改变路径前缀,设置环境变量 `PUBLIC_PATH`
```bash
PUBLIC_PATH=/console/ npm run build:h5
```
### 构建与部署
```bash
# 开发
npm run dev
# 构建 H5 产物
npm run build:h5
# 构建并部署到 COS
npm run deploy:cos
```
`deploy:cos` 脚本会将 `dist/build/h5/` 目录的文件上传到 COS 存储桶,需要在 `server/.env`(或管理后台自己的 `.env`)中配置好 `TENCENT_SECRET_ID``TENCENT_SECRET_KEY``COS_BUCKET` 等变量。