Files
zhiyin/docs/DEPLOYMENT.md
T
yuzhiran 9276ab9028 v4.2 冲刺版+每日推送+支付修复+全量代码评审
## 新增功能
- 冲刺版 ¥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 新增小程序编译上传章节、清理检查清单
2026-06-09 20:03:05 +08:00

5.9 KiB
Raw Blame History

职引 - 部署文档

最后更新: 2026-06-09 生产环境: 已部署(服务器已购 + 域名已配)

目录

  1. 环境要求
  2. 生产域名
  3. 后端部署
  4. 前端部署(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(默认)
  • 前端端口: 8085Vite 开发服务器)

生产域名

用途 域名 指向
后端 API(小程序服务端) https://zhiyinwx.yzrcloud.cn Nginx → http://localhost:3006
H5 网页端 https://zhiyin.yzrcloud.cn 静态目录 /www/wwwroot/zhiyin.yzrcloud.cn

端口固定为 3006,由 main.tsprocess.env.PORT || 3006 控制。


后端部署

1. 安装依赖

cd backend
npm install

2. 配置环境变量

创建 .env 文件(参考 backend/.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. 编译并启动

npm run build        # 编译 TypeScript → dist/
node dist/main.js    # 启动(或使用 PM2

4. PM2 进程管理

npm install -g pm2
pm2 start dist/main.js --name zhiyin-backend
pm2 startup && pm2 save

5. Nginx 反向代理(后端 API

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

VITE_API_BASE_URL=https://zhiyinwx.yzrcloud.cn/api

2. 编译

cd zhiyin-app
npm run build:h5
# 输出: dist/build/h5/

3. 部署到 Web 服务器

scp -r dist/build/h5/* user@your-server:/www/wwwroot/zhiyin.yzrcloud.cn/

4. 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. 编译

cd zhiyin-app
npm run build:mp-weixin
# 输出: dist/build/mp-weixin/

3. 使用微信开发者工具上传

  1. 导入 dist/build/mp-weixin/
  2. 点击「上传」
  3. 登录微信公众平台提交审核

数据库初始化

mongo
> use zhiyin
> db.createUser({
    user: "zhiyin",
    pwd: "strong-password",
    roles: [{ role: "readWrite", db: "zhiyin" }]
  })

小程序编译上传

环境要求

# 安装 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

编译与预览上传

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
  • 移除 member/pay 开发绕过(已改为真实订单校验)
  • 套餐值统一:vip → growth/sprint(采访轮次、分析次数不再受限)
  • 配置 CORS 白名单(当前: origin: '*'
  • 启用 HTTPS
  • 配置 MongoDB 访问权限
  • 移除 console.log(生产环境)
  • 配置微信支付生产密钥(证书已验证)
  • 配置微信小程序密钥(appid: wxf466b3c3bc411ffc
  • 配置每日一题订阅消息模板 IDWX_DAILY_QUESTION_TMPL

变更记录

日期 变更内容 操作者
2026-06-09 初版 AI
2026-06-09 更新生产域名:zhiyinwx.yzrcloud.cnAPI :3006)、zhiyin.yzrcloud.cnH5 静态目录) 小之