151 lines
4.4 KiB
Bash
151 lines
4.4 KiB
Bash
#!/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 ""
|
||
|