#!/bin/bash set -e # 发生错误时终止脚本执行 # 参数解析 SKIP_COMPOSE_UPDATE=false # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in --skip-compose-update|-s) SKIP_COMPOSE_UPDATE=true shift ;; --help|-h) echo "用法: $0 [选项]" echo "" echo "选项:" echo " -s, --skip-compose-update 跳过 docker-compose.yml 的更新" echo " -h, --help 显示此帮助信息" echo "" exit 0 ;; *) echo "❌ 未知参数: $1" echo "使用 --help 或 -h 查看帮助信息" exit 1 ;; esac done # 更新 docker-compose.yml 文件 if [ "$SKIP_COMPOSE_UPDATE" = false ]; then echo "" echo "===========================" echo "📄 检查并更新 docker-compose.yml" echo "===========================" COMPOSE_FILE="docker-compose.yml" COMPOSE_URL="https://git.51easyai.com/wangbo/easyai/raw/main/docker-compose.yml" TEMP_FILE=$(mktemp) # 检查本地文件是否存在 if [ ! -f "$COMPOSE_FILE" ]; then echo "⚠️ 本地 $COMPOSE_FILE 不存在,直接下载最新版本..." curl -fsSL "$COMPOSE_URL" -o "$COMPOSE_FILE" echo "✅ $COMPOSE_FILE 已下载" else echo "📥 正在下载远程 $COMPOSE_FILE..." if curl -fsSL "$COMPOSE_URL" -o "$TEMP_FILE"; then # 比较本地文件和远程文件的内容 if cmp -s "$COMPOSE_FILE" "$TEMP_FILE"; then echo "✅ 本地 $COMPOSE_FILE 已是最新版本,无需更新" rm -f "$TEMP_FILE" else echo "🔄 检测到新版本,正在更新..." # 备份原文件 BACKUP_FILE="${COMPOSE_FILE}.bak" cp "$COMPOSE_FILE" "$BACKUP_FILE" echo "💾 原文件已备份为 $BACKUP_FILE" # 替换为新文件 mv "$TEMP_FILE" "$COMPOSE_FILE" echo "✅ $COMPOSE_FILE 已更新到最新版本" fi else echo "❌ 无法下载远程文件,跳过更新步骤" rm -f "$TEMP_FILE" fi fi echo "" else echo "⏭️ 跳过 docker-compose.yml 更新(已使用 --skip-compose-update 参数)" echo "" fi echo "===========================" echo "🚀 开始自动安装 Docker 和 Docker Compose" echo "===========================" # 检查 Docker 是否已安装 if command -v docker &> /dev/null; then echo "✅ Docker 已安装,跳过安装步骤" else # 原有的 Docker 安装步骤 echo "📦 安装依赖..." sudo apt update -y sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release echo "🔑 添加 Docker GPG 密钥..." curl -fsSL https://mirrors.nwafu.edu.cn生成注释ker-ce/linux/ubuntu/gpg | sudo apt-key add - echo "🌍 添加 Docker 源..." sudo add-apt-repository -y "deb [arch=amd64] https://mirrors.nwafu.edu.cn生成注释ker-ce/linux/ubuntu/ $(lsb_release -cs) stable" sudo apt-get update -y echo "🐳 安装 Docker..." sudo apt-get install -y docker.io echo "✅ 启动并设置 Docker 开机自启..." sudo systemctl enable docker sudo systemctl start docker fi # 检测并使用正确的 Docker Compose 命令 # 优先使用新版本的 docker compose(作为 docker 的子命令) if docker compose version &> /dev/null; then DOCKER_COMPOSE_CMD="docker compose" echo "✅ 检测到 Docker Compose (新版本: docker compose)" elif command -v docker-compose &> /dev/null; then DOCKER_COMPOSE_CMD="docker-compose" echo "✅ 检测到 Docker Compose (旧版本: docker-compose)" else echo "⚙️ 安装 Docker Compose..." sudo mv ./docker-compose-linux-x86_64 /usr/bin/docker-compose #设置权限 chmod +x /usr/bin/docker-compose DOCKER_COMPOSE_CMD="docker-compose" echo "✅ Docker Compose 安装完成" fi echo "📌 Docker 运行状态:" sudo systemctl status docker --no-pager || true echo "📌 Docker Compose 版本:" $DOCKER_COMPOSE_CMD version echo "🎉 Docker 和 Docker Compose 已就绪!" echo "🚀 重新启动EasyAI" sudo $DOCKER_COMPOSE_CMD pull && sudo $DOCKER_COMPOSE_CMD up -d echo "🎉EasyAI应用更新成功"