16 KiB
蝶雅采购智能体平台 — 生产环境部署指南
适用场景:将开发/测试环境上的蝶雅智能体平台完整迁移到新的生产服务器
核心原则:开发环境与生产环境隔离互不影响,后续通过升级包方式更新生产环境
目录
- 环境要求
- 准备工作
- 第一步:新电脑基础环境配置
- 第二步:传输项目文件
- 第三步:使用一键迁移脚本
- 第四步:手动迁移(如有需要)
- 第五步:验证部署
- 第六步:配置小龙虾(OpenClaw)
- 常见问题排查
- 日常升级流程
1. 环境要求
开发环境(旧电脑)
- 操作系统:Ubuntu 24.04(或其他 Linux 发行版)
- 已安装:MySQL 8.0+、Python 3.12+、pip、OpenClaw(小龙虾)
- 项目路径:
~/.openclaw/workspace/dy-dashboard/ - 数据平台:Flask/Gunicorn 运行中,端口 18888
生产环境(新电脑)
- 操作系统:Ubuntu 24.04(推荐与开发环境一致)
- 网络:需要固定的内网 IP,请提前配置好
- SSH:需要开启 SSH Server 以便远程操作
- 用户:请记录新电脑的登录用户名(本例中为
dieya)
2. 准备工作
2.1 确认开发环境(旧电脑)状态
在旧电脑上运行以下命令,确认当前服务正常:
# 检查 MySQL 是否运行
sudo systemctl status mysql
# 检查 Gunicorn 是否运行
ps aux | grep gunicorn
# 检查数据平台能否访问
curl -s http://127.0.0.1:18888/ | head -c 100
# 检查 OpenClaw 状态
openclaw status
确认所有服务正常运行后再开始迁移。
2.2 记录关键信息
| 信息项 | 示例值 | 说明 |
|---|---|---|
| 新电脑 IP | 192.168.11.79 |
内网固定 IP |
| 新电脑用户名 | dieya |
登录新电脑的账号 |
| 新电脑 SSH 端口 | 22 |
默认,如有修改请记录 |
| 数据库用户名 | dy_app |
无特殊需要不必修改 |
| 数据库密码 | dy_data_2026 |
无特殊需要不必修改 |
| 数据库名 | dy_data |
无特殊需要不必修改 |
| 平台端口 | 18888 |
无特殊需要不必修改 |
2.3 配置旧电脑到新电脑的免密 SSH 登录(推荐)
在旧电脑上执行:
ssh-copy-id dieya@192.168.11.79
按提示输入新电脑的登录密码。完成后测试:
ssh dieya@192.168.11.79 "echo 连接成功"
如果不配置免密登录,迁移过程中每次 SSH 操作都需要手动输入密码,效率较低。
3. 第一步:新电脑基础环境配置
以下操作在新电脑上执行,可通过 SSH 登录后操作。
3.1 登录新电脑
ssh dieya@192.168.11.79
3.2 更新系统包
sudo apt update
sudo apt upgrade -y
3.3 安装 SSH Server(如果尚未安装)
sudo apt install openssh-server -y
sudo systemctl enable ssh
sudo systemctl start ssh
3.4 配置免密码 sudo(可选)
如果后续要一键执行部署脚本,需要配置免密码 sudo,否则每个
sudo命令都需要手动输入密码。
echo 'dieya ALL=(ALL) NOPASSWD:***' | sudo tee /etc/sudoers.d/dieya
sudo chmod 440 /etc/sudoers.d/dieya
请将
dieya替换为实际的用户名。
3.5 确保项目目录存在
mkdir -p /home/dieya/.openclaw/workspace/dy-dashboard
4. 第二步:传输项目文件
4.1 方法一:SCP 传输(推荐小项目)
在 旧电脑 上执行:
# 传输整个项目目录(排除不必要的文件)
cd ~/.openclaw/workspace
rsync -avz --exclude='venv/' --exclude='.git/' --exclude='__pycache__/' --exclude='logs/' --exclude='backups/*.tar.gz' --exclude='*.sql' dy-dashboard/ dieya@192.168.11.79:/home/dieya/.openclaw/workspace/dy-dashboard/
4.2 方法二:打包后传输(推荐大项目)
在 旧电脑 上执行:
cd ~/.openclaw/workspace
tar czf dy-dashboard.tar.gz dy-dashboard/ --exclude=venv --exclude=.git --exclude='__pycache__' --exclude='logs' --exclude='backups/*.tar.gz' --exclude='*.sql'
scp dy-dashboard.tar.gz dieya@192.168.11.79:/home/dieya/
在 新电脑 上执行:
cd /home/dieya
mkdir -p .openclaw/workspace
tar xzf dy-dashboard.tar.gz -C .openclaw/workspace/
rm -f dy-dashboard.tar.gz
4.3 验证文件传输成功
在 新电脑 上执行:
ls -la /home/dieya/.openclaw/workspace/dy-dashboard/
应看到 app.py、config.py、routes/、services/、static/ 等文件和目录。
5. 第三步:使用一键迁移脚本
旧电脑上已经编写了
migrate_to_prod.sh脚本,可以自动完成剩余的迁移步骤。前提条件:上一节的文件传输已完成,且新电脑已配置免密码 sudo。
5.1 运行迁移脚本
在 旧电脑 上执行:
cd ~/.openclaw/workspace/dy-dashboard
bash migrate_to_prod.sh
5.2 回答交互问题
脚本会依次询问:
请输入新电脑 IP 地址: 192.168.11.79
请输入新电脑 SSH 用户名(默认 gxd): dieya
请输入新电脑项目路径(默认 /home/gxd/.openclaw/workspace/dy-dashboard): 直接回车(会自动识别为 /home/dieya/.openclaw/workspace/dy-dashboard)
5.3 脚本执行流程
脚本会自动完成以下 9 个步骤:
| 步骤 | 操作 | 耗时 |
|---|---|---|
| 1 | 测试 SSH 连接 | 约 3 秒 |
| 2 | 配置新电脑免密码 sudo(需输一次密码) | 约 5 秒 |
| 3 | 检查旧电脑 MySQL | 约 2 秒 |
| 4 | 导出旧电脑数据库(dy_data) | 约 1-5 分钟(视数据量) |
| 5 | 传输 SQL 文件到新电脑 | 约 1-3 分钟 |
| 6 | 新电脑安装 MySQL + 建库 + 导入数据 | 约 3-10 分钟 |
| 7 | 新电脑安装 Python 依赖 + 启动 Gunicorn | 约 3-5 分钟 |
| 8 | 新电脑配置定时任务(自动更新 + 每日备份) | 约 5 秒 |
| 9 | 新电脑重启小龙虾(OpenClaw) | 约 3 秒 |
5.4 脚本可能遇到的错误及处理
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| SSH 连接失败 | 未配置免密登录或 IP 错误 | 检查 IP / 执行 ssh-copy-id |
| sudo 密码输入超时 | ssh -tt 交互超时 |
重新运行脚本,快速输入密码 |
| 项目目录不存在 | 文件尚未传输或路径错误 | 先完成 [第二步:传输项目文件] |
| MySQL 安装失败 | apt 源问题或网络问题 | 手动 sudo apt install mysql-server 后重新运行 |
| Gunicorn 启动失败 | 需进一步排查(见常见问题) | 查看日志:tail -50 logs/error.log |
| OpenClaw 无法重启 | 数据库损坏 | 参考 [第六步:配置小龙虾] |
6. 第四步:手动迁移(如有需要)
如果一键迁移脚本执行失败,可按以下步骤手动完成。
6.1 新电脑安装 MySQL
sudo apt install mysql-server -y
sudo systemctl enable mysql
sudo systemctl start mysql
6.2 创建数据库和用户
sudo mysql -e "
CREATE DATABASE IF NOT EXISTS dy_data CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'dy_app'@'localhost' IDENTIFIED BY 'dy_data_2026';
GRANT ALL PRIVILEGES ON dy_data.* TO 'dy_app'@'localhost';
ALTER USER 'dy_app'@'localhost' IDENTIFIED BY 'dy_data_2026';
FLUSH PRIVILEGES;
"
6.3 导出旧电脑数据库
在 旧电脑 上执行:
mysqldump -h 127.0.0.1 -u dy_app -p'dy_data_2026' --single-transaction --no-tablespaces --routines --triggers --default-character-set=utf8mb4 dy_data > /tmp/dy_data_full.sql
6.4 传输并导入数据库
# 旧电脑:传输 SQL 到新电脑
scp /tmp/dy_data_full.sql dieya@192.168.11.79:/tmp/
# 新电脑:导入数据
mysql -u dy_app -p'dy_data_2026' dy_data < /tmp/dy_data_full.sql
# 验证
mysql -u dy_app -p'dy_data_2026' -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='dy_data';"
6.5 新电脑部署数据平台
# 安装 Python 依赖工具
sudo apt install python3-venv python3-pip -y
# 进入项目目录
cd /home/dieya/.openclaw/workspace/dy-dashboard
# 创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install flask==3.1.3 pymysql==1.2.0 gunicorn==26.0.0 gevent==26.5.0 openpyxl==3.1.5 DBUtils==3.1.2 flask-cors==6.0.2 Flask-Login==0.6.3 Flask-Compress==1.24 python-dateutil
deactivate
# 创建日志目录
mkdir -p logs
# 清理 Python 缓存(避免新旧电脑字节码冲突)
find . -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null
find . -name '*.pyc' -delete 2>/dev/null
# 启动 Gunicorn
nohup venv/bin/gunicorn -w 4 -b 0.0.0.0:18888 --timeout 120 --access-logfile logs/access.log --error-logfile logs/error.log app:app > /dev/null 2>&1 &
# 验证启动
sleep 3
curl -s http://127.0.0.1:18888/ | head -c 100
6.6 配置定时任务
# 添加自动更新(每天 7:00 / 12:00 / 18:00)
(crontab -l 2>/dev/null; echo "0 7,12,18 * * * cd /home/dieya/.openclaw/workspace/dy-dashboard && python3 auto_update.py >> /home/dieya/.openclaw/workspace/dy-dashboard/logs/auto_update.log 2>&1") | crontab -
# 添加每日备份(每天 8:30)
(crontab -l 2>/dev/null; echo "30 8 * * * cd /home/dieya/.openclaw/workspace/dy-dashboard && bash backup.sh >> /home/dieya/.openclaw/workspace/dy-dashboard/logs/backup.log 2>&1") | crontab -
# 查看定时任务
crontab -l
7. 第五步:验证部署
7.1 验证 MySQL
# 新电脑
mysql -u dy_app -p'dy_data_2026' -e "SELECT COUNT(*) AS 表数量 FROM information_schema.tables WHERE table_schema='dy_data';"
7.2 验证数据平台
-
本地验证(在新电脑上):
curl -s http://127.0.0.1:18888/ | head -c 100 # 应返回 <!doctype html><html lang=en>... -
远程访问(在任何同网段电脑的浏览器):
http://192.168.11.79:18888应该看到登录页面。
7.3 验证定时任务
crontab -l
# 应包含 auto_update.py 和 backup.sh 两条任务
7.4 验证错误日志为空
tail -20 /home/dieya/.openclaw/workspace/dy-dashboard/logs/error.log
# 不应有新的 ERROR 日志
8. 第六步:配置小龙虾(OpenClaw)
如果新电脑需要运行 OpenClaw(小龙虾)与用户对话,请按以下步骤配置。
8.1 基础配置
# 初始化
openclaw setup
# 启动网关
openclaw gateway run --force
8.2 添加智能体
openclaw agents add "dingtalk-assistant" --workspace /home/dieya/.openclaw/workspace/dingtalk-assistant
8.3 访问方式
-
终端对话(在新电脑 SSH 中):
openclaw chat -
WebChat 浏览器访问(需要修改绑定地址):
openclaw config set gateway.bind "0.0.0.0" openclaw gateway run --force然后从浏览器访问:
http://192.168.11.79:18789/
8.4 常见问题:数据库损坏
现象:openclaw 命令报错 database disk image is malformed
解决:
# 完全重置状态(不影响 workspace 文件)
rm -rf /home/dieya/.openclaw/state
rm -rf /home/dieya/.openclaw/agents
rm -rf /home/dieya/.openclaw/openclaw.json
rm -rf /home/dieya/.openclaw/openclaw.json.*
rm -rf /home/dieya/.openclaw/cron
rm -rf /home/dieya/.openclaw/tasks
rm -rf /home/dieya/.openclaw/flows
rm -rf /home/dieya/.openclaw/completions
rm -rf /home/dieya/.openclaw/session-delivery-queue
rm -rf /home/dieya/.openclaw/delivery-queue
# 重新初始化
openclaw setup
openclaw gateway run --force
9. 常见问题排查
9.1 Gunicorn 启动失败
查看错误日志:
tail -50 /home/dieya/.openclaw/workspace/dy-dashboard/logs/error.log
常见错误及解决:
| 错误 | 原因 | 解决 |
|---|---|---|
No module named 'dateutil' |
缺少依赖 | pip install python-dateutil |
bad marshal data |
Python 缓存冲突 | 删除 __pycache__ 和 .pyc |
No module named 'flask' |
虚拟环境未激活 | 检查 venv/bin/ 下是否有 gunicorn |
bind: Address already in use |
端口被占用 | kill $(lsof -t -i:18888) |
9.2 MySQL 连接失败
# 检查 MySQL 是否运行
sudo systemctl status mysql
# 测试连接
mysql -u dy_app -p'dy_data_2026' -e "SELECT 1"
# 如果连接被拒绝,检查配置
sudo mysql -e "SELECT user, host FROM mysql.user WHERE user='dy_app';"
9.3 网页访问超时或无法连接
# 服务端检查端口监听
ss -tlnp | grep 18888
# 检查防火墙
sudo ufw status
# 如果 ufw 开启,放行 18888 端口
sudo ufw allow 18888
9.4 页面打开但报"网络错误"
查看后端错误日志:
tail -50 /home/dieya/.openclaw/workspace/dy-dashboard/logs/error.log
常见代码错误:
- 变量未初始化(如
bom_json = None问题) - 数据库查询 SQL 兼容性问题
- Python 版本差异导致的语法问题
9.5 定时任务未执行
# 检查 crontab 配置
crontab -l
# 检查日志
tail -50 /home/dieya/.openclaw/workspace/dy-dashboard/logs/auto_update.log
tail -50 /home/dieya/.openclaw/workspace/dy-dashboard/logs/backup.log
10. 日常升级流程
此流程用于开发环境改完代码后,更新生产环境。
10.1 创建一键升级脚本
将以下内容保存为 ~/upgrade_prod.sh(在旧电脑上):
#!/usr/bin/env bash
# 蝶雅智能体平台 — 生产环境升级脚本
# 用法:bash upgrade_prod.sh
set -euo pipefail
REMOTE_IP="192.168.11.79"
REMOTE_USER="dieya"
REMOTE_DIR="/home/dieya/.openclaw/workspace/dy-dashboard"
LOCAL_DIR="/home/gxd/.openclaw/workspace/dy-dashboard"
echo "=========================================="
echo " 蝶雅智能体平台 — 生产环境升级"
echo "=========================================="
echo ""
# 1. 同步代码(仅变更的文件)
echo "[1/3] 同步代码到生产服务器..."
rsync -avz --delete \
--exclude='venv/' \
--exclude='.git/' \
--exclude='__pycache__/' \
--exclude='*.pyc' \
--exclude='logs/' \
--exclude='backups/' \
--exclude='*.tar.gz' \
--exclude='*.sql' \
"${LOCAL_DIR}/" "${REMOTE_USER}@${REMOTE_IP}:${REMOTE_DIR}/"
# 2. 清理缓存
echo "[2/3] 清理缓存..."
ssh "${REMOTE_USER}@${REMOTE_IP}" "find ${REMOTE_DIR} -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null; find ${REMOTE_DIR} -name '*.pyc' -delete 2>/dev/null; echo ' 缓存清理完成'"
# 3. 重启服务
echo "[3/3] 重启 Gunicorn..."
ssh "${REMOTE_USER}@${REMOTE_IP}" "
kill \$(lsof -t -i:18888) 2>/dev/null || true
sleep 2
cd ${REMOTE_DIR}
nohup venv/bin/gunicorn -w 4 -b 0.0.0.0:18888 --timeout 120 --access-logfile logs/access.log --error-logfile logs/error.log app:app > /dev/null 2>&1 &
sleep 3
if curl -s http://127.0.0.1:18888/ > /dev/null 2>&1; then
echo ' ✅ 服务重启成功'
else
echo ' ⚠️ 服务可能未启动,请检查日志'
fi
"
echo ""
echo "✅ 升级完成"
echo " 访问:http://${REMOTE_IP}:18888"
10.2 使用方式
每次在开发环境改完代码、测试通过后,在旧电脑执行:
bash upgrade_prod.sh
只需输入一次 SSH 密码(或免密则无需输入),即可完成:
- 增量同步代码(只传改动过的文件,秒级)
- 清理缓存
- 重启 Gunicorn
10.3 升级注意事项
- 避免在高峰期升级(建议午休或下班后操作)
- 升级前最好先备份生产数据库:
ssh dieya@IP "bash backup.sh" - 如果有数据库结构变更,需要单独导出导入 SQL
- 升级后最好做一次功能冒烟测试(登录、查询、下单)
文档版本:v1.0 | 最后更新:2026-06-26 | 编写人:OpenClaw