63 lines
1.8 KiB
Bash
63 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# ============================================================
|
|
# AI Knowledge Link — 一键更新脚本
|
|
# 用法: bash update.sh
|
|
# ============================================================
|
|
|
|
set -e
|
|
|
|
echo "=== AI Knowledge Link 更新 ==="
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
|
|
# 1. 拉取最新代码
|
|
echo "[1/4] 拉取最新代码..."
|
|
if ! git pull; then
|
|
echo ""
|
|
echo "错误:git pull 失败。通常是服务器上有本地修改与远程冲突。"
|
|
echo "如果确认要放弃服务器上的修改,执行:"
|
|
echo " git checkout -- . && git pull"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 重新构建
|
|
echo ""
|
|
echo "[2/4] 重新构建镜像..."
|
|
docker compose build
|
|
|
|
# 3. 重启服务
|
|
echo ""
|
|
echo "[3/4] 重启服务..."
|
|
docker compose up -d
|
|
|
|
# 4. 等待后端就绪后执行迁移(兜底,容器启动时也会自动迁移)
|
|
echo ""
|
|
echo "[4/4] 等待后端就绪并执行迁移..."
|
|
for i in $(seq 1 30); do
|
|
if docker compose exec -T backend python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')" 2>/dev/null; then
|
|
echo "后端已就绪(第 ${i} 次探测)"
|
|
break
|
|
fi
|
|
if [ "$i" -eq 30 ]; then
|
|
echo "警告:后端 30 秒内未就绪,跳过迁移步骤(容器启动时会自动迁移)"
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
docker compose exec -T backend alembic upgrade head 2>/dev/null || true
|
|
|
|
# 5. 结果
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " 更新完成!$(date '+%H:%M:%S')"
|
|
echo "=========================================="
|
|
echo ""
|
|
docker compose ps
|
|
echo ""
|
|
|
|
# 健康检查
|
|
if curl -s -f http://127.0.0.1:8000/api/healthz > /dev/null 2>&1; then
|
|
echo "✅ 后端健康检查通过"
|
|
else
|
|
echo "❌ 后端健康检查失败,查看日志:docker compose logs backend --tail 50"
|
|
fi |