dingdanquanliucheng/deploy/实时推送部署指南.md

258 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 实时推送功能部署指南
## 📋 部署清单
### 1. 后端部署
```bash
# 1.1 进入后端目录
cd /path/to/dingdanquanliucheng/backend
# 1.2 安装依赖redis 已在 requirements.txt 中)
pip install -r requirements.txt
# 1.3 确保 Redis 服务已安装并运行
# 检查 Redis 状态
redis-cli ping
# 如果返回 PONG 表示 Redis 正常运行
# 如果 Redis 未安装可以使用以下命令安装Ubuntu/Debian
# sudo apt update
# sudo apt install redis-server
# sudo systemctl start redis
# sudo systemctl enable redis
# 1.4 重启后端服务
# 如果使用 systemd
sudo systemctl restart order-flow
# 如果使用 uvicorn 直接运行:
uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 --reload
```
### 2. 小程序部署
```bash
# 2.1 进入小程序目录
cd /path/to/dingdanquanliucheng/frontend/mini-app
# 2.2 使用微信开发者工具编译上传
# 注意subscribe.js 中的模板ID已配置完成无需修改
# 2.3 在微信公众平台确认以下模板已添加:
# - 订单状态变更通知
# - 订单待审批通知
# - 物流任务分配通知
# - 物流超时提醒
# - 欠款提醒
# - 客户沉默提醒
```
### 3. Web 端部署
```bash
# 3.1 编译管理员端
cd /path/to/dingdanquanliucheng/frontend/web-admin
npm run build
# 将 dist 目录部署到 dda.gaowenbu.cn
# 3.2 编译业务员端
cd /path/to/dingdanquanliucheng/frontend/web-sales
npm run build
# 将 dist 目录部署到 ddy.gaowenbu.cn
```
### 4. Nginx 配置
```bash
# 4.1 复制 Nginx 配置文件
sudo cp /path/to/dingdanquanliucheng/deploy/dda.gaowenbu.cn.conf /www/server/panel/vhost/nginx/
sudo cp /path/to/dingdanquanliucheng/deploy/ddy.gaowenbu.cn.conf /www/server/panel/vhost/nginx/
# 4.2 测试 Nginx 配置
sudo nginx -t
# 4.3 重新加载 Nginx
sudo nginx -s reload
```
---
## 🔍 验证部署
### 1. 检查后端 WebSocket 端点
```bash
# 访问 WebSocket 状态接口
curl https://dda.gaowenbu.cn/ws/status
# 应该返回:
# {"active_users":0,"connections":{}}
```
### 2. 检查 Redis 连接
```bash
# 在服务器上执行
redis-cli ping
# 应该返回:
# PONG
```
### 3. 检查 WebSocket 连接
打开浏览器开发者工具F12在 Console 中执行:
```javascript
// 检查 WebSocket 是否连接
const ws = new WebSocket('wss://dda.gaowenbu.cn/ws/reminders?token=YOUR_TOKEN');
ws.onopen = () => console.log('连接成功');
ws.onmessage = (e) => console.log('收到消息:', e.data);
ws.onerror = (e) => console.error('连接错误:', e);
```
---
## 📊 功能说明
### 实时推送流程
```
业务事件触发
event_bus.emit() 创建提醒记录
┌───────────────────────────────────────┐
│ 后台线程异步执行: │
│ 1. Redis Pub/Sub → WebSocket 推送 │
│ 2. 微信订阅消息 API → 小程序推送 │
└───────────────────────────────────────┘
┌───────────────────────────────────────┐
│ 客户端接收: │
│ - Web端WebSocket + 声音 + 桌面通知 │
│ - 小程序:微信服务通知 + Tab角标 │
└───────────────────────────────────────┘
```
### 触发场景
| 场景 | 触发位置 | 通知对象 |
|------|----------|----------|
| 订单创建 | `order_service.create_order` | 管理层 |
| 订单审批通过 | `order_service.approve_order` | 业务员 |
| 订单审批拒绝 | `order_service.approve_order` | 业务员 |
| 订单发厂 | `order_service.confirm_supplier_text` | 业务员 |
| 物流任务分配 | `logistics_service.create_task` | 司机 |
| 物流状态更新 | `logistics_service._change_task_status` | 业务员+管理层 |
| 欠款超期 | `reminder_service.check_arrears` | 业务员 |
| 物流超时 | `reminder_service.check_logistics_timeout` | 业务员 |
| 沉默客户 | `reminder_service.check_inactive_customers` | 业务员 |
---
## ⚠️ 故障排查
### 1. WebSocket 连接失败
**症状**Web端通知铃铛不更新需要手动刷新
**排查步骤**
```bash
# 1. 检查 Nginx 配置是否包含 WebSocket 代理
grep -r "location /ws/" /www/server/panel/vhost/nginx/
# 2. 检查后端是否启动
curl https://dda.gaowenbu.cn/health
# 3. 检查 Redis 是否运行
redis-cli ping
# 4. 查看后端日志
tail -f /path/to/backend/logs/app.log | grep -i "websocket\|redis"
```
### 2. 小程序收不到推送
**症状**:小程序没有收到微信服务通知
**排查步骤**
1. 检查用户是否授权了订阅消息
2. 检查 `.env` 中的 `WECHAT_APP_ID``WECHAT_APP_SECRET` 是否正确
3. 检查模板ID是否与微信公众平台一致
4. 查看后端日志是否有微信API调用错误
```bash
# 查看微信通知相关日志
tail -f /path/to/backend/logs/app.log | grep -i "wechat\|subscribe"
```
### 3. Tab 角标不显示
**症状**:小程序 Tab 上没有显示数字
**排查步骤**
1. 检查 `badge.js` 是否正确引入
2. 检查 API 接口是否正常返回数据
3. 在小程序开发者工具中查看 Console 日志
---
## 🔄 回滚方案
如果实时推送功能出现问题,可以快速回滚:
### 1. 禁用 WebSocket保留原有功能
编辑 `backend/app/main.py`,注释掉 WebSocket 路由:
```python
# 挂载 WebSocket 路由(不通过 api_router直接挂载
# app.include_router(ws_router) # 注释此行
```
### 2. 禁用微信推送
编辑 `backend/.env`,清空微信配置:
```env
WECHAT_APP_ID=
WECHAT_APP_SECRET=
```
### 3. 重启服务
```bash
sudo systemctl restart order-flow
```
---
## 📝 配置文件清单
| 文件 | 说明 | 是否需要修改 |
|------|------|--------------|
| `backend/.env` | 后端环境变量 | ✅ 已配置完成 |
| `backend/app/core/pubsub.py` | Redis Pub/Sub | ❌ 无需修改 |
| `backend/app/api/ws.py` | WebSocket 端点 | ❌ 无需修改 |
| `backend/app/services/event_bus.py` | 事件总线 | ❌ 无需修改 |
| `frontend/mini-app/utils/subscribe.js` | 订阅消息授权 | ❌ 已配置模板ID |
| `frontend/mini-app/utils/badge.js` | Tab角标管理 | ❌ 无需修改 |
| `frontend/web-admin/src/utils/websocket.js` | Web端WebSocket | ❌ 无需修改 |
| `frontend/web-sales/src/utils/websocket.js` | Web端WebSocket | ❌ 无需修改 |
| `deploy/dda.gaowenbu.cn.conf` | Nginx配置 | ✅ 已添加WebSocket代理 |
| `deploy/ddy.gaowenbu.cn.conf` | Nginx配置 | ✅ 已添加WebSocket代理 |
---
## ✅ 部署完成检查清单
- [ ] Redis 服务运行正常
- [ ] 后端服务重启完成
- [ ] Nginx 配置已更新并重新加载
- [ ] Web端已重新编译并部署
- [ ] 小程序已上传新版本
- [ ] 访问 `https://dda.gaowenbu.cn/ws/status` 返回正常
- [ ] 创建测试订单,检查是否收到实时通知