89865ec690
upgrade/deploy-production 等分流到 nexus-1panel upgrade;升级完成后提示安装 nx cron。 Co-authored-by: Cursor <cursoragent@cursor.com>
125 lines
3.6 KiB
Bash
125 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
||
# Nexus 6.0 — Upgrade Script(自动识别 Docker / Supervisor)
|
||
#
|
||
# sudo bash deploy/upgrade.sh
|
||
# sudo bash deploy/upgrade.sh --deploy-dir /opt/nexus
|
||
#
|
||
# Docker 1Panel:委托 deploy/nexus-1panel.sh upgrade(拉代码 + 备份 + 重建镜像)
|
||
# Supervisor 裸机:git pull + venv pip + supervisorctl restart
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
# shellcheck source=./detect_deploy_runtime.sh
|
||
source "${SCRIPT_DIR}/detect_deploy_runtime.sh"
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
error() { echo -e "${RED}[ERROR]${NC} $*"; }
|
||
|
||
DEPLOY_DIR=""
|
||
EXTRA_ARGS=()
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--deploy-dir) DEPLOY_DIR="$2"; shift 2 ;;
|
||
--no-backup|--require-backup|--no-cache|--prune|--check|--dry-run)
|
||
EXTRA_ARGS+=("$1"); shift ;;
|
||
-h|--help)
|
||
cat <<'EOF'
|
||
用法: sudo bash deploy/upgrade.sh [--deploy-dir PATH] [nexus-1panel 升级选项]
|
||
|
||
Docker 环境自动走 nexus-1panel.sh upgrade;Supervisor 环境走 venv + supervisorctl。
|
||
EOF
|
||
exit 0
|
||
;;
|
||
*) EXTRA_ARGS+=("$1"); shift ;;
|
||
esac
|
||
done
|
||
|
||
if [[ -z "$DEPLOY_DIR" ]]; then
|
||
DEPLOY_DIR="$(resolve_nexus_root 2>/dev/null || true)"
|
||
fi
|
||
|
||
if [[ -z "$DEPLOY_DIR" || ! -d "$DEPLOY_DIR/server" ]]; then
|
||
error "找不到 Nexus 安装目录,请使用 --deploy-dir 指定"
|
||
exit 1
|
||
fi
|
||
|
||
RUNTIME="$(detect_nexus_runtime "$DEPLOY_DIR")"
|
||
|
||
if [[ "$RUNTIME" == "docker" ]]; then
|
||
info "检测到 Docker Compose 运行时,委托 nexus-1panel.sh upgrade"
|
||
exec env NEXUS_ROOT="$DEPLOY_DIR" bash "$DEPLOY_DIR/deploy/nexus-1panel.sh" upgrade "${EXTRA_ARGS[@]}"
|
||
fi
|
||
|
||
VENV_DIR="$DEPLOY_DIR/venv"
|
||
ENV_FILE="$DEPLOY_DIR/.env"
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo " Nexus 6.0 Upgrade (Supervisor)"
|
||
echo "=========================================="
|
||
echo " Deploy: $DEPLOY_DIR"
|
||
echo ""
|
||
|
||
info "Step 1/4: Updating source code..."
|
||
if [[ -d "$DEPLOY_DIR/.git" ]]; then
|
||
cd "$DEPLOY_DIR"
|
||
OLD_REV="$(git rev-parse HEAD 2>/dev/null || echo unknown)"
|
||
git pull --ff-only 2>/dev/null || {
|
||
error "git pull failed. Resolve conflicts: cd $DEPLOY_DIR && git status"
|
||
exit 1
|
||
}
|
||
NEW_REV="$(git rev-parse HEAD 2>/dev/null || echo unknown)"
|
||
if [[ "$OLD_REV" == "$NEW_REV" ]]; then
|
||
info " Already up to date (no new commits)"
|
||
else
|
||
info " Updated: ${OLD_REV:0:8}..${NEW_REV:0:8}"
|
||
fi
|
||
else
|
||
warn " Not a git repo. Skip git pull"
|
||
fi
|
||
|
||
info "Step 2/4: Updating Python dependencies..."
|
||
if [[ -d "$VENV_DIR/bin" ]]; then
|
||
"$VENV_DIR/bin/pip" install -q --upgrade pip
|
||
"$VENV_DIR/bin/pip" install -q -r "$DEPLOY_DIR/requirements.txt" 2>/dev/null || {
|
||
warn " pip install had warnings, continuing..."
|
||
}
|
||
else
|
||
error " venv not found at $VENV_DIR. Run install.sh first."
|
||
exit 1
|
||
fi
|
||
|
||
info "Step 3/4: Restarting Nexus..."
|
||
supervisorctl restart nexus >/dev/null 2>&1 || {
|
||
warn " supervisorctl restart failed. Try: supervisorctl restart nexus"
|
||
}
|
||
|
||
info "Step 4/4: Verifying health..."
|
||
PORT="$(nexus_publish_port_for "$DEPLOY_DIR")"
|
||
HEALTH_OK=false
|
||
for _ in $(seq 1 15); do
|
||
if curl -sf "http://127.0.0.1:${PORT}/health" >/dev/null 2>&1; then
|
||
HEALTH_OK=true
|
||
break
|
||
fi
|
||
sleep 2
|
||
done
|
||
|
||
echo ""
|
||
if [[ "$HEALTH_OK" == true ]]; then
|
||
echo -e " ${GREEN}Upgrade complete! Nexus is healthy.${NC}"
|
||
suggest_ops_cron "$DEPLOY_DIR"
|
||
else
|
||
echo -e " ${YELLOW}Health check pending. Verify manually:${NC}"
|
||
echo " curl http://127.0.0.1:${PORT}/health"
|
||
echo " supervisorctl status nexus"
|
||
fi
|
||
echo ""
|