134 lines
4.3 KiB
Bash
Executable File
134 lines
4.3 KiB
Bash
Executable File
#!/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应用更新成功"
|