flnxi-Wu/scripts/deploy/upgrade-to-pro.sh
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

151 lines
4.4 KiB
Bash
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.

#!/bin/bash
# ============================================
# 从标准版升级到Pro版脚本(Linux版本)
# 支持一键升级,保留数据
# ============================================
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 参数
DOCKER_REGISTRY="${DOCKER_REGISTRY:-}"
IMAGE_TAG="${IMAGE_TAG:-latest}"
REMOTE_PATH="${REMOTE_PATH:-/root/deploy}"
# 检查参数
if [ -z "$DOCKER_REGISTRY" ]; then
echo -e "${RED}错误: 必须设置 DOCKER_REGISTRY 环境变量${NC}"
echo ""
echo "用法示例:"
echo " export DOCKER_REGISTRY=your-registry.com"
echo " export IMAGE_TAG=latest"
echo " bash upgrade-to-pro.sh"
exit 1
fi
echo ""
echo -e "${CYAN}==========================================${NC}"
echo -e "${CYAN}从标准版升级到Pro版${NC}"
echo -e "${CYAN}==========================================${NC}"
echo ""
# 检查当前版本
echo -e "${CYAN}===> 检查当前版本...${NC}"
if [ ! -f "${REMOTE_PATH}/docker-compose.yml" ]; then
echo -e "${RED}错误: 未找到 docker-compose.yml${NC}"
exit 1
fi
CURRENT_CONFIG=$(readlink -f "${REMOTE_PATH}/docker-compose.yml" 2>/dev/null || echo "${REMOTE_PATH}/docker-compose.yml")
echo " 当前配置: $CURRENT_CONFIG"
if [[ "$CURRENT_CONFIG" == *"prod"* ]]; then
echo -e "${YELLOW}当前已经是Pro版,无需升级${NC}"
exit 0
fi
# 备份
echo -e "${CYAN}===> 备份当前配置和数据...${NC}"
BACKUP_DIR="${REMOTE_PATH}/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp "${REMOTE_PATH}/docker-compose.yml" "$BACKUP_DIR/" 2>/dev/null || true
cp "${REMOTE_PATH}/docker-compose.*.yml" "$BACKUP_DIR/" 2>/dev/null || true
echo -e "${GREEN}✓ 备份完成: $BACKUP_DIR${NC}"
# 备份数据库
echo -e "${CYAN}===> 备份数据库...${NC}"
cd "$REMOTE_PATH"
docker compose exec -T postgres pg_dump -U postgres youyidian3d > "${BACKUP_DIR}/backup_$(date +%Y%m%d_%H%M%S).sql" 2>&1 || echo "数据库备份可能失败,但继续执行"
echo -e "${GREEN}✓ 数据库备份完成${NC}"
# 停止服务
echo -e "${CYAN}===> 停止当前服务...${NC}"
cd "$REMOTE_PATH"
docker compose down
echo -e "${GREEN}✓ 服务已停止${NC}"
# 检查Pro版配置文件
if [ ! -f "${REMOTE_PATH}/docker-compose.prod.yml" ]; then
echo -e "${YELLOW}未找到 docker-compose.prod.yml,请先上传配置文件${NC}"
exit 1
fi
# 创建链接
echo -e "${CYAN}===> 切换到Pro版配置...${NC}"
cd "$REMOTE_PATH"
ln -sf docker-compose.prod.yml docker-compose.yml
echo -e "${GREEN}✓ 配置文件已切换${NC}"
# 配置环境变量
echo -e "${CYAN}===> 配置环境变量...${NC}"
cat > "${REMOTE_PATH}/.env.prod" << EOF
# Docker镜像仓库
DOCKER_REGISTRY=${DOCKER_REGISTRY}
# 镜像标签
IMAGE_TAG=${IMAGE_TAG}
# MinIO配置
MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin}
MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin123456}
S3_BUCKET=${S3_BUCKET:-youyidian3d}
EOF
echo -e "${GREEN}✓ 环境变量已配置${NC}"
# 拉取镜像
echo -e "${CYAN}===> 拉取Pro版镜像和依赖...${NC}"
echo " 拉取MinIO镜像..."
docker pull minio/minio:RELEASE.2025-04-22T22-12-26Z
docker pull minio/mc:RELEASE.2025-04-22T22-12-26Z
echo " 拉取应用镜像..."
APP_IMAGE="${DOCKER_REGISTRY}/youyidian-3d-material:pro-${IMAGE_TAG}"
docker pull "$APP_IMAGE"
echo -e "${GREEN}✓ 镜像拉取完成${NC}"
# 启动服务
echo -e "${CYAN}===> 启动Pro版服务...${NC}"
cd "$REMOTE_PATH"
docker compose --env-file .env.prod up -d
echo -e "${GREEN}✓ 服务已启动${NC}"
# 等待服务就绪
echo -e "${CYAN}===> 等待服务就绪...${NC}"
sleep 10
# 检查服务状态
echo " 服务状态:"
docker compose ps
# 验证
echo -e "${CYAN}===> 验证升级结果...${NC}"
if curl -s http://localhost:4320/api/health > /dev/null 2>&1; then
echo -e "${GREEN}✓ 应用健康检查通过${NC}"
else
echo -e "${YELLOW}⚠ 应用可能还在启动中,请稍后检查${NC}"
fi
echo ""
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN}升级完成!${NC}"
echo -e "${CYAN}==========================================${NC}"
echo ""
echo -e "${YELLOW}📋 升级信息:${NC}"
echo " 备份目录: $BACKUP_DIR"
echo " 应用地址: http://$(hostname -I | awk '{print $1}'):4320"
echo ""
echo -e "${YELLOW}💡 提示:${NC}"
echo " - 数据已自动迁移"
echo " - 如需回滚,请查看备份目录"
echo " - 建议测试所有功能确保正常"
echo ""