diff --git a/.gitignore b/.gitignore index f8d5166..7a3087c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ __pycache__/ # RAG model weights and caches minirag/minirag/models/ minirag/minirag/cache/ + +# local deploy helper (contains secrets in some environments; keep out of git) +deploy.sh diff --git a/deploy.sh b/deploy.sh deleted file mode 100755 index b0494de..0000000 --- a/deploy.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/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] 结束"