Files
2025-08-14 08:11:03 +08:00

130 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
# 客户现场离线部署脚本 #专为无网络环境设计,使用预加载镜像
# 使用方法:./deploy-client-offline.sh [客户配置文件名]
set -e
# 默认配置文件
CONFIG_FILE=${1:-"custom-config.env"}
echo "==================== 智能穿戴系统离线部署 ===================="
echo "使用配置文件: $CONFIG_FILE"
echo "部署模式: 离线部署 (使用预加载镜像)"
# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
echo "错误: 配置文件 $CONFIG_FILE 不存在"
echo "请复制 custom-config.env 并根据客户需求修改配置"
exit 1
fi
# 检查Docker和docker-compose是否安装
if ! command -v docker > /dev/null 2>&1; then
echo "错误: Docker 未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose > /dev/null 2>&1; then
echo "错误: docker-compose 未安装,请先安装docker-compose"
exit 1
fi
# 加载配置文件
. "$CONFIG_FILE"
echo ""
echo "==================== 离线镜像检查 ===================="
echo "�� 离线部署模式 - 检查预加载镜像"
# 从docker-compose.yml动态读取版本号 #确保使用正确的镜像标签
MYSQL_IMAGE=$(egrep '^ *image:.*ljwx-mysql:' docker-compose.yml | sed 's/.*ljwx-mysql:\([^ ]*\).*/\1/' | head -1)
REDIS_IMAGE=$(egrep '^ *image:.*ljwx-redis:' docker-compose.yml | sed 's/.*ljwx-redis:\([^ ]*\).*/\1/' | head -1)
BOOT_IMAGE=$(egrep '^ *image:.*ljwx-boot:' docker-compose.yml | sed 's/.*ljwx-boot:\([^ ]*\).*/\1/' | head -1)
BIGSCREEN_IMAGE=$(egrep '^ *image:.*ljwx-bigscreen:' docker-compose.yml | sed 's/.*ljwx-bigscreen:\([^ ]*\).*/\1/' | head -1)
ADMIN_IMAGE=$(egrep '^ *image:.*ljwx-admin:' docker-compose.yml | sed 's/.*ljwx-admin:\([^ ]*\).*/\1/' | head -1)
echo "�� 检查本地镜像:"
echo "- ljwx-mysql:$MYSQL_IMAGE"
echo "- ljwx-redis:$REDIS_IMAGE"
echo "- ljwx-boot:$BOOT_IMAGE"
echo "- ljwx-bigscreen:$BIGSCREEN_IMAGE"
echo "- ljwx-admin:$ADMIN_IMAGE"
# 检查本地镜像是否存在 #确保所有必需镜像已预加载
MISSING_IMAGES=""
FOUND_IMAGES=0
for img in "ljwx-mysql:$MYSQL_IMAGE" "ljwx-redis:$REDIS_IMAGE" "ljwx-boot:$BOOT_IMAGE" "ljwx-bigscreen:$BIGSCREEN_IMAGE" "ljwx-admin:$ADMIN_IMAGE"; do
if docker images --format "table {{.Repository}}:{{.Tag}}" | grep -q "^$img$"; then
echo "✅ 找到镜像: $img"
FOUND_IMAGES=$((FOUND_IMAGES + 1))
else
MISSING_IMAGES="$MISSING_IMAGES $img"
echo "❌ 缺失镜像: $img"
fi
done
if [ $FOUND_IMAGES -eq 0 ]; then
echo ""
echo "❌ 严重错误: 未找到任何必需镜像!"
echo "请确保已通过以下方式之一加载镜像:"
echo "1. docker load -i ljwx-images.tar"
echo "2. 或单独加载: docker load -i ljwx-mysql.tar"
echo "3. 或使用镜像导入脚本"
exit 1
elif [ -n "$MISSING_IMAGES" ]; then
echo ""
echo "⚠️ 警告: 发现缺失镜像,但已找到 $FOUND_IMAGES/5 个镜像"
echo "🔧 系统将尝试继续部署,如果失败请补充缺失镜像"
echo "💡 缺失的镜像: $MISSING_IMAGES"
sleep 3
else
echo "✅ 所有必需镜像已就绪 ($FOUND_IMAGES/5)"
fi
echo ""
echo "==================== 开始部署 ===================="
# 停止现有服务但保留数据卷
echo "停止现有服务(保留数据卷)..."
docker-compose -f docker-compose.yml down
# 启动所有服务 #使用配置文件启动docker-compose服务
echo "🚀 正在启动所有服务..."
docker-compose -f docker-compose.yml --env-file $CONFIG_FILE up -d
# 等待服务初始化
echo "⏳ 等待服务初始化..."
sleep 15
echo ""
echo "==================== 服务状态检查 ===================="
docker-compose -f docker-compose.yml ps
# 替换前端应用中的大屏URL
echo ""
echo "🔄 更新前端大屏链接地址..."
if [ -f "replace-bigscreen-url.sh" ]; then
./replace-bigscreen-url.sh
echo "✅ 大屏链接地址更新完成"
else
echo "⚠️ 警告: replace-bigscreen-url.sh 脚本不存在"
fi
echo ""
echo "🎉==================== 离线部署完成 ===================="
echo "✅ 所有服务已成功启动!"
echo ""
echo "📱 访问地址:"
echo "- 管理端: http://localhost:8080 或 http://$SERVER_IP:8080"
echo "- 大屏端: http://localhost:8001 或 http://$SERVER_IP:8001"
echo ""
echo "🔐 默认登录信息:"
echo "- 用户名: admin"
echo "- 密码: admin123"
echo ""
echo "🔌 离线部署特性:"
echo "- ✅ 无需网络连接"
echo "- ✅ 使用预加载镜像"
echo "- ✅ 自动配置客户定制设置"