nianjie/deploy.sh

90 lines
2.9 KiB
Bash
Executable File
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.

#!/usr/bin/env bash
# 一键部署脚本:打包本地 workspace排除模型与 .git上传到远端并重启服务
set -euo pipefail
SERVER="${SERVER:-120.55.190.8}"
USER="${USER:-root}"
# 强烈建议使用 SSH Key如需密码方式请通过环境变量传入
# export DEPLOY_PASS='your_password'
PASS="${DEPLOY_PASS:-}"
REMOTE_DIR="${REMOTE_DIR:-/root/workspace}"
# 通过环境变量注入 Moonshot Key不要写死在脚本里
# export MOONSHOT_API_KEY='sk-...'
MOONSHOT_KEY="${MOONSHOT_API_KEY:-}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ARCHIVE="/tmp/nianjie_deploy_$(date +%Y%m%d%H%M%S).tar.gz"
if ! command -v sshpass >/dev/null 2>&1; then
echo "[ERROR] 需要安装 sshpass 以使用密码方式非交互上传/执行。" >&2
exit 1
fi
if [ -z "${PASS}" ]; then
echo "[ERROR] 未设置 DEPLOY_PASS远端 SSH 密码)。" >&2
exit 1
fi
if [ -z "${MOONSHOT_KEY}" ]; then
echo "[WARN] 未设置 MOONSHOT_API_KEY云端 AI 模式可能无法调用外部模型。" >&2
fi
echo "[1/5] 打包本地 workspace -> ${ARCHIVE}"
# macOS: 避免打包扩展属性导致远端 tar 警告
COPYFILE_DISABLE=1 tar -czf "${ARCHIVE}" \
--exclude='.git' \
--exclude='*/.git*' \
--exclude='minirag/minirag/cache' \
-C "${SCRIPT_DIR}" .
echo "[2/5] 上传压缩包到 ${SERVER}:/root/"
sshpass -p "${PASS}" scp -o StrictHostKeyChecking=no "${ARCHIVE}" "${USER}@${SERVER}:/root/"
echo "[3/5] 远端处理(停服、清理、解压、重启)"
sshpass -p "${PASS}" ssh -o StrictHostKeyChecking=no "${USER}@${SERVER}" MOONSHOT_KEY="${MOONSHOT_KEY}" bash -s <<'EOF'
set -euo pipefail
ARCHIVE="$(ls -t /root/nianjie_deploy_*.tar.gz | head -n1)"
REMOTE_DIR="/root/workspace"
MODEL_PATH="${REMOTE_DIR}/minirag/minirag/models"
BACKUP_DIR="/root/model_backup_$(date +%s)"
echo " - 查杀 8081 端口进程"
if command -v lsof >/dev/null 2>&1; then
if pids=$(lsof -t -i:8081 || true); then
[ -n "$pids" ] && kill -9 $pids || true
fi
elif command -v fuser >/dev/null 2>&1; then
fuser -k 8081/tcp || true
fi
echo " - 备份旧模型(如存在)"
if [ -d "$MODEL_PATH" ]; then
mkdir -p "$BACKUP_DIR"
mv "$MODEL_PATH" "$BACKUP_DIR/"
echo " 备份到 $BACKUP_DIR/models"
fi
echo " - 清空远端 workspace 目录"
mkdir -p "$REMOTE_DIR"
rm -rf "$REMOTE_DIR"/*
echo " - 解压最新包到 workspace"
tar -xzf "$ARCHIVE" -C "$REMOTE_DIR"
echo " - 恢复模型"
if [ -d "$BACKUP_DIR/models" ]; then
mkdir -p "$REMOTE_DIR/minirag/minirag"
rm -rf "$REMOTE_DIR/minirag/minirag/models"
mv "$BACKUP_DIR/models" "$REMOTE_DIR/minirag/minirag/" || true
echo " 模型已恢复"
fi
echo " - 后台重启服务(注入 MOONSHOT_API_KEY"
cd "$REMOTE_DIR/dialog"
export MOONSHOT_API_KEY="${MOONSHOT_KEY:-}"
nohup python3 app.py > app.log 2>&1 &
echo " 启动完成pid: $!"
EOF
echo "[4/5] 部署完成,包保留在 ${ARCHIVE}(本机)与 /root/(远端)"
echo "[5/5] 结束"