9276ab9028
## 新增功能 - 冲刺版 ¥49.9/月:完整支付→激活→权益扣减链路 - 每日一题定时推送(@nestjs/schedule,早8点微信订阅消息) - miniprogram-ci 编译上传脚本(scripts/upload-mp.js) ## Bug修复 - 套餐值统一:vip→growth/sprint(interview轮次限制、analyze次数检查) - member/pay 移除开发绕过:改为订单校验后激活 - progress→report 参数名不匹配:id→interviewId - result.vue resume.create() 参数传错(对象→独立参数) - resume.vue analyze请求缺少Authorization header - bank.vue contribution请求缺少Authorization header - member.vue startPay() 缺少try/catch导致网络错误崩溃 - login.vue 调试面板 v-if="true" 生产泄漏 ## 配置 - 微信支付生产证书就位(商户号1113760598) - .env 清理冗余文件(删除.example/.production) - WX_NOTIFY_URL 更新为 zhiyinwx.yzrcloud.cn ## 文档 - PROJECT-STATUS.md v4.1→v4.2,状态全面更新 - DEPLOYMENT.md 新增小程序编译上传章节、清理检查清单
252 lines
5.9 KiB
Markdown
252 lines
5.9 KiB
Markdown
# 职引 - 部署文档
|
||
|
||
> **最后更新**: 2026-06-09
|
||
> **生产环境**: 已部署(服务器已购 + 域名已配)
|
||
|
||
## 目录
|
||
1. [环境要求](#环境要求)
|
||
2. [生产域名](#生产域名)
|
||
3. [后端部署](#后端部署)
|
||
4. [前端部署(H5)](#前端部署h5)
|
||
5. [微信小程序部署](#微信小程序部署)
|
||
6. [数据库初始化](#数据库初始化)
|
||
7. [安全检查清单](#安全检查清单)
|
||
|
||
---
|
||
|
||
## 环境要求
|
||
|
||
### 生产服务器
|
||
- **操作系统**: Linux (Ubuntu 20.04+ / CentOS 7+)
|
||
- **Node.js**: 18.x 或更高版本
|
||
- **MongoDB**: 4.4+ (或 MongoDB Atlas 云服务)
|
||
- **Nginx**: 1.18+ (反向代理)
|
||
- **PM2**: 进程管理
|
||
|
||
### 本地开发
|
||
- **Node.js**: 18.x
|
||
- **MongoDB**: 本地或云服务
|
||
- **后端端口**: 3006(默认)
|
||
- **前端端口**: 8085(Vite 开发服务器)
|
||
|
||
---
|
||
|
||
## 生产域名
|
||
|
||
| 用途 | 域名 | 指向 |
|
||
|------|------|------|
|
||
| 后端 API(小程序服务端) | `https://zhiyinwx.yzrcloud.cn` | Nginx → `http://localhost:3006` |
|
||
| H5 网页端 | `https://zhiyin.yzrcloud.cn` | 静态目录 `/www/wwwroot/zhiyin.yzrcloud.cn` |
|
||
|
||
端口固定为 **3006**,由 `main.ts` 中 `process.env.PORT || 3006` 控制。
|
||
|
||
---
|
||
|
||
## 后端部署
|
||
|
||
### 1. 安装依赖
|
||
```bash
|
||
cd backend
|
||
npm install
|
||
```
|
||
|
||
### 2. 配置环境变量
|
||
创建 `.env` 文件(参考 `backend/.env`):
|
||
```env
|
||
MONGODB_URI=mongodb://localhost:27017/zhiyin
|
||
JWT_SECRET=your-strong-secret-at-least-32-chars
|
||
PORT=3006
|
||
AI_PRIMARY_KEY=your-deepseek-key
|
||
AI_BACKUP_KEY=your-nvidia-key
|
||
WECHAT_APPID=your-appid
|
||
WECHAT_MCHID=your-mchid
|
||
WECHAT_API_KEY=your-api-v3-key
|
||
WECHAT_SERIAL_NO=your-cert-serial
|
||
WECHAT_PRIVATE_KEY_PATH=/path/to/apiclient_key.pem
|
||
WX_DAILY_QUESTION_TMPL=在微信公众平台配置的订阅消息模板ID
|
||
```
|
||
|
||
### 3. 编译并启动
|
||
```bash
|
||
npm run build # 编译 TypeScript → dist/
|
||
node dist/main.js # 启动(或使用 PM2)
|
||
```
|
||
|
||
### 4. PM2 进程管理
|
||
```bash
|
||
npm install -g pm2
|
||
pm2 start dist/main.js --name zhiyin-backend
|
||
pm2 startup && pm2 save
|
||
```
|
||
|
||
### 5. Nginx 反向代理(后端 API)
|
||
```nginx
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name zhiyinwx.yzrcloud.cn;
|
||
|
||
ssl_certificate /etc/nginx/ssl/yzrcloud.cn.pem;
|
||
ssl_certificate_key /etc/nginx/ssl/yzrcloud.cn.key;
|
||
|
||
location / {
|
||
proxy_pass http://localhost:3006;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection 'upgrade';
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_cache_bypass $http_upgrade;
|
||
}
|
||
}
|
||
|
||
# HTTP → HTTPS 跳转
|
||
server {
|
||
listen 80;
|
||
server_name zhiyinwx.yzrcloud.cn;
|
||
return 301 https://$host$request_uri;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 前端部署(H5)
|
||
|
||
### 1. 配置 API 地址
|
||
编辑 `zhiyin-app/.env.production`:
|
||
```env
|
||
VITE_API_BASE_URL=https://zhiyinwx.yzrcloud.cn/api
|
||
```
|
||
|
||
### 2. 编译
|
||
```bash
|
||
cd zhiyin-app
|
||
npm run build:h5
|
||
# 输出: dist/build/h5/
|
||
```
|
||
|
||
### 3. 部署到 Web 服务器
|
||
```bash
|
||
scp -r dist/build/h5/* user@your-server:/www/wwwroot/zhiyin.yzrcloud.cn/
|
||
```
|
||
|
||
### 4. Nginx 配置
|
||
```nginx
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name zhiyin.yzrcloud.cn;
|
||
root /www/wwwroot/zhiyin.yzrcloud.cn;
|
||
index index.html;
|
||
|
||
ssl_certificate /etc/nginx/ssl/yzrcloud.cn.pem;
|
||
ssl_certificate_key /etc/nginx/ssl/yzrcloud.cn.key;
|
||
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf)$ {
|
||
expires 1y;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
}
|
||
|
||
# HTTP → HTTPS 跳转
|
||
server {
|
||
listen 80;
|
||
server_name zhiyin.yzrcloud.cn;
|
||
return 301 https://$host$request_uri;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 微信小程序部署
|
||
|
||
### 1. 修改 manifest.json
|
||
编辑 `zhiyin-app/manifest.json`,填写正式 appid。
|
||
|
||
### 2. 编译
|
||
```bash
|
||
cd zhiyin-app
|
||
npm run build:mp-weixin
|
||
# 输出: dist/build/mp-weixin/
|
||
```
|
||
|
||
### 3. 使用微信开发者工具上传
|
||
1. 导入 `dist/build/mp-weixin/`
|
||
2. 点击「上传」
|
||
3. 登录微信公众平台提交审核
|
||
|
||
---
|
||
|
||
## 数据库初始化
|
||
|
||
```bash
|
||
mongo
|
||
> use zhiyin
|
||
> db.createUser({
|
||
user: "zhiyin",
|
||
pwd: "strong-password",
|
||
roles: [{ role: "readWrite", db: "zhiyin" }]
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
## 小程序编译上传
|
||
|
||
### 环境要求
|
||
```bash
|
||
# 安装 miniprogram-ci(已在项目 devDeps 中)
|
||
cd zhiyin-app && npm install --save-dev miniprogram-ci
|
||
```
|
||
|
||
### 配置
|
||
确保以下文件就位:
|
||
- `dist/build/mp-weixin/` — uni-app 构建输出(`npm run build:mp-weixin`)
|
||
- 微信小程序私钥文件:`/root/opencode-workspace/微信小程序参数/宇之然AI磁场appid/private.wxf466b3c3bc411ffc.key`
|
||
- `project.config.json`(构建时自动生成,appid: wxf466b3c3bc411ffc)
|
||
|
||
### 编译与预览上传
|
||
```bash
|
||
cd zhiyin-app
|
||
|
||
# 构建微信小程序
|
||
npm run build:mp-weixin
|
||
|
||
# 预览(生成二维码)
|
||
node scripts/upload-mp.js
|
||
|
||
# 直接上传(修改脚本中 ci.preview → ci.upload)
|
||
```
|
||
|
||
### 版本号
|
||
当前线上版本:**1.0.3**(见 note.txt)
|
||
|
||
---
|
||
|
||
## 安全检查清单
|
||
|
||
- [ ] 修改默认 JWT_SECRET(当前已有环境变量值)
|
||
- [ ] 移除开发模式的固定验证码 123456
|
||
- [x] 移除 `member/pay` 开发绕过(已改为真实订单校验)
|
||
- [x] 套餐值统一:vip → growth/sprint(采访轮次、分析次数不再受限)
|
||
- [ ] 配置 CORS 白名单(当前: `origin: '*'`)
|
||
- [ ] 启用 HTTPS
|
||
- [ ] 配置 MongoDB 访问权限
|
||
- [ ] 移除 console.log(生产环境)
|
||
- [x] 配置微信支付生产密钥(证书已验证)
|
||
- [x] 配置微信小程序密钥(appid: wxf466b3c3bc411ffc)
|
||
- [ ] 配置每日一题订阅消息模板 ID(WX_DAILY_QUESTION_TMPL)
|
||
|
||
---
|
||
|
||
## 变更记录
|
||
|
||
| 日期 | 变更内容 | 操作者 |
|
||
|------|----------|--------|
|
||
| 2026-06-09 | 初版 | AI |
|
||
| 2026-06-09 | 更新生产域名:zhiyinwx.yzrcloud.cn(API :3006)、zhiyin.yzrcloud.cn(H5 静态目录) | 小之 |
|