7.2 KiB
7.2 KiB
保险智能客服系统 — 数据同步指南
一、数据类型说明
| 数据类型 | 存储位置 | 同步方式 |
|---|---|---|
| 用户数据 | PostgreSQL wecom_user_mapping 表 |
数据库导出/导入 |
| 知识库文档 | PostgreSQL + 文件存储 | 数据库 + 文件打包 |
| 对话记录 | PostgreSQL | 数据库导出/导入 |
| 应用配置 | PostgreSQL | 数据库导出/导入 |
| 上传文件 | Docker Volume api_storage |
文件拷贝 |
二、方式一:使用 migrate.sh(推荐)
2.1 导出本地数据
# 在本地开发机执行
cd D:\work\code\python\coding\baodanagent
# 导出迁移包(包含数据库 + 项目文件)
bash migrate.sh export
生成文件:migrate-package.tar.gz(包含完整数据库)
2.2 上传到服务器
# 上传迁移包
scp migrate-package.tar.gz root@服务器IP:/opt/
# SSH 登录服务器
ssh root@服务器IP
cd /opt
tar xzf migrate-package.tar.gz
2.3 在服务器导入
cd /opt/migrate-package
# 导入数据并启动服务
bash ../migrate.sh import
三、方式二:手动数据库同步
3.1 导出数据库(本地)
# 导出 baodan 数据库
docker exec baodanagent-db-1 pg_dump -U postgres baodan > baodan_backup.sql
# 导出插件数据库
docker exec baodanagent-db-1 pg_dump -U postgres dify_plugin > dify_plugin_backup.sql
# 查看导出文件大小
ls -lh baodan_backup.sql dify_plugin_backup.sql
3.2 上传到服务器
# 上传 SQL 文件
scp baodan_backup.sql dify_plugin_backup.sql root@服务器IP:/opt/baodanagent/
3.3 导入到服务器
# SSH 登录服务器
ssh root@服务器IP
cd /opt/baodanagent
# 启动数据库(如未启动)
docker compose -f docker-compose.dify.yml up -d db redis
sleep 10
# 创建插件数据库(如不存在)
docker exec baodanagent-db-1 psql -U postgres -c "CREATE DATABASE dify_plugin;" 2>/dev/null || true
# 导入数据
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < baodan_backup.sql
docker exec -i baodanagent-db-1 psql -U postgres -d dify_plugin < dify_plugin_backup.sql
# 重启所有服务
docker compose -f docker-compose.dify.yml restart
四、方式三:仅同步部分数据
4.1 只同步用户数据
# 导出用户表
docker exec baodanagent-db-1 pg_dump -U postgres -d baodan -t wecom_user_mapping > users.sql
# 导入用户表
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < users.sql
4.2 只同步知识库
# 导出知识库相关表
docker exec baodanagent-db-1 pg_dump -U postgres -d baodan \
-t datasets \
-t dataset_documents \
-t document_segments \
> knowledge_base.sql
# 导入
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < knowledge_base.sql
4.3 只同步应用配置
# 导出应用配置
docker exec baodanagent-db-1 pg_dump -U postgres -d baodan \
-t apps \
-t app_model_configs \
-t conversations \
> apps.sql
# 导入
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < apps.sql
五、同步文件存储
5.1 导出上传文件
# 本地导出
docker cp baodanagent-baodan-api-1:/app/api/storage ./api_storage_backup
# 打包
tar czf api_storage.tar.gz api_storage_backup/
5.2 上传并恢复
# 上传
scp api_storage.tar.gz root@服务器IP:/opt/baodanagent/
# 服务器上恢复
tar xzf api_storage.tar.gz
docker cp api_storage_backup baodanagent-baodan-api-1:/app/api/storage
六、完整同步流程
场景:从本地开发环境同步到生产服务器
# ========== 本地操作 ==========
# 1. 停止本地服务(可选,避免数据不一致)
docker compose -f docker-compose.dify.yml stop baodan-api baodan-worker
# 2. 导出完整数据
bash migrate.sh export
# 3. 重启本地服务
docker compose -f docker-compose.dify.yml start
# 4. 上传迁移包
scp migrate-package.tar.gz root@服务器IP:/opt/
# ========== 服务器操作 ==========
# 5. SSH 登录
ssh root@服务器IP
# 6. 解压
cd /opt
tar xzf migrate-package.tar.gz
# 7. 导入并启动
cd migrate-package
bash ../migrate.sh import
七、数据同步脚本
7.1 快速同步脚本(本地)
#!/bin/bash
# quick-sync.sh - 快速同步数据到服务器
SERVER_IP=$1
if [ -z "$SERVER_IP" ]; then
echo "用法: bash quick-sync.sh <服务器IP>"
exit 1
fi
echo "正在导出数据库..."
docker exec baodanagent-db-1 pg_dump -U postgres baodan > /tmp/baodan_sync.sql
docker exec baodanagent-db-1 pg_dump -U postgres dify_plugin > /tmp/dify_plugin_sync.sql
echo "正在上传到服务器..."
scp /tmp/baodan_sync.sql /tmp/dify_plugin_sync.sql root@$SERVER_IP:/tmp/
echo "正在服务器上导入..."
ssh root@$SERVER_IP << 'EOF'
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < /tmp/baodan_sync.sql
docker exec -i baodanagent-db-1 psql -U postgres -d dify_plugin < /tmp/dify_plugin_sync.sql
docker compose -f /opt/baodanagent/docker-compose.dify.yml restart baodan-api baodan-worker
EOF
echo "同步完成!"
rm -f /tmp/baodan_sync.sql /tmp/dify_plugin_sync.sql
7.2 使用方法
# 保存为 quick-sync.sh
chmod +x quick-sync.sh
# 执行同步
bash quick-sync.sh 192.168.1.100
八、验证同步结果
8.1 检查用户数据
# 服务器上执行
docker exec baodanagent-db-1 psql -U postgres -d baodan -c "SELECT id, username, role FROM wecom_user_mapping;"
8.2 检查知识库
docker exec baodanagent-db-1 psql -U postgres -d baodan -c "SELECT id, name FROM datasets;"
8.3 检查 API 服务
curl http://localhost:5001/health
# 预期返回:{"status":"ok","service":"baodanagent-api"}
8.4 检查前端登录
curl -X POST http://localhost:9080/insurance/auth/password-login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"taiyi1224"}'
九、常见问题
Q1: 数据库导入报错 "relation already exists"
# 使用 -c 选项先清理再导入
docker exec -i baodanagent-db-1 psql -U postgres -d baodan -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
docker exec -i baodanagent-db-1 psql -U postgres -d baodan < baodan_backup.sql
Q2: 导入后用户无法登录
检查密码哈希是否正确:
docker exec baodanagent-db-1 psql -U postgres -d baodan -c "SELECT username, password_hash IS NOT NULL FROM wecom_user_mapping;"
Q3: 知识库文档丢失
知识库文档存储在 Docker Volume 中,需要额外同步:
# 导出
docker cp baodanagent-baodan-api-1:/app/api/storage ./storage_backup
# 导入
docker cp storage_backup baodanagent-baodan-api-1:/app/api/storage
Q4: 同步后 API 返回 500 错误
检查数据库连接:
docker exec baodanagent-baodan-api-1 python -c "
from insurance.app import create_app
from insurance.db.compat import db
app = create_app()
with app.app_context():
print(db.session.execute(db.text('SELECT 1')).scalar())
"
十、定时同步(可选)
如果需要定期同步数据,可以设置 cron 任务:
# 编辑 crontab
crontab -e
# 每天凌晨 3 点同步数据
0 3 * * * /opt/baodanagent/scripts/sync-data.sh >> /var/log/sync.log 2>&1