本文件是每次部署的唯一依据,执行前必须完整阅读并遵守。
在 ./tools/java-deploy.sh deploy 之前,逐项确认:
AccessDeniedException 或 No thread-bound request 等已知异常/health、/api/v1/chat/stream、/api/v1/drug/search# Step 1: 确认当前状态
./tools/java-deploy.sh status
# Step 2: 一键部署(自动拉代码、编译、备份、重启)
./tools/java-deploy.sh deploy
# Step 3: 确认服务正常
curl -s http://localhost:9000/health | python3 -m json.tool
# Step 4: 检查启动日志无异常
./tools/java-deploy.sh logs 50
# Step 5: 等待 2-3 分钟,观察日志无新的 ERROR
sleep 180
tail -50 /var/log/pharmacopoeia/backend.log | grep -i "error\|exception\|access denied"
| 检查项 | 命令 | 预期 |
|---|---|---|
| 健康检查 | curl -s http://localhost:9000/health |
200 OK |
| 药品库搜索 | curl -s 'http://localhost:9000/api/v1/drug/search?keyword=布洛芬' |
返回数据 |
| 对话流式 | 用浏览器访问首页,发送一条问题 | SSE 正常走完,无网络异常 |
| 日志无异常 | tail -100 /var/log/pharmacopoeia/backend.log \| grep -i "error\|exception" |
无新增报错 |
所有操作统一用 ./tools/java-deploy.sh,不手动操作 jar 文件或进程。
| 命令 | 用途 |
|---|---|
./tools/java-deploy.sh status |
查看运行状态 |
./tools/java-deploy.sh deploy |
一键上线(pull → build → backup → restart) |
./tools/java-deploy.sh rollback |
回滚到上一个备份 |
./tools/java-deploy.sh rollback <path> |
回滚到指定备份文件 |
./tools/java-deploy.sh restart |
重启(不重新编译) |
./tools/java-deploy.sh logs |
最近 100 行日志 |
./tools/java-deploy.sh logf |
实时日志跟踪 |
deploy 命令会自动:
backend-java/backups/ 目录(按时间戳命名)# 方式 1: 自动回滚(使用最新备份)
./tools/java-deploy.sh rollback
# 方式 2: 回滚到指定备份
./tools/java-deploy.sh rollback /opt/pharmacopoeia-ai/backend-java/backups/pharmacopoeia-ai-20260724-143000.jar
# 方式 3: 回退 git commit 后重新部署
cd /opt/pharmacopoeia-ai
git revert <坏commit> --no-edit
./tools/java-deploy.sh deploy
回滚决策:
任何表结构或索引变更,必须:
IF NOT EXISTS(向前兼容)kill 进程或直接替换 jar(用脚本)-SNAPSHOT 版本