easyai/start.sh
2025-06-12 14:36:51 +08:00

155 lines
6.5 KiB
Bash
Executable File
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
set -e # 发生错误时终止脚本执行
echo "==========================="
echo "🚀 开始自动安装 Docker 和 Docker Compose"
echo "==========================="
# 获取操作系统类型和版本
OS_FAMILY=$(hostnamectl | grep "Operating System" | awk '{print $3}')
OS_VERSION=""
if [[ "$OS_FAMILY" == "CentOS" ]]; then
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=")[0-9.]+' /etc/os-release | cut -d'.' -f1)
elif [[ "$OS_FAMILY" == "Ubuntu" ]]; then
OS_VERSION=$(lsb_release -cs)
fi
# 函数:检查并等待网络连接
check_network() {
echo "🌐 检查网络连接..."
for i in {1..10}; do
if curl -sSf https://download.docker.com/ &> /dev/null; then
echo "✅ 网络连接正常。"
return 0
else
echo "⚠️ 网络连接异常或无法访问 Docker 仓库,等待 10 秒后重试... ($i/10)"
sleep 10
fi
done
echo "❌ 无法建立网络连接到 Docker 仓库,请检查您的网络配置。"
exit 1
}
# 预检网络连接
#check_network
# Docker 安装
if command -v docker &> /dev/null; then
echo "✅ Docker 已安装,跳过安装步骤"
else
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
echo "📦 安装依赖 (Ubuntu)..."
sudo apt update -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
echo "🔑 添加 Docker GPG 密钥 (Ubuntu)..."
# 使用国内镜像作为备用,或直接从 Docker 官方获取
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || \
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "🌍 添加 Docker 源 (Ubuntu)..."
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
echo "🐳 安装 Docker (Ubuntu)..."
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 确保安装 docker-compose-plugin 而不是旧版 docker-compose
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
echo "📦 安装依赖 (CentOS)..."
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
echo "🌍 添加 Docker 源 (CentOS)..."
# 尝试使用官方源,如果失败则提示用户检查网络或考虑配置国内镜像
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo || {
echo "❌ 无法添加 Docker 官方源。请检查您的网络连接或尝试手动配置国内镜像源。"
exit 1
}
# CentOS 8+ 可能会遇到 module 冲突,禁用默认的 container-tools 模块
if [[ "$OS_VERSION" -ge "8" ]]; then
echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..."
sudo yum module disable -y container-tools
sudo yum module enable -y container-tools:docker
fi
echo "🐳 安装 Docker (CentOS)..."
# 尝试安装 Docker CE 及其组件,包括 buildx 插件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
echo "❌ Docker 或其组件安装失败。请检查错误日志或尝试手动安装。"
echo "提示:如果遇到 'No more mirrors to try' 错误,可能是网络问题或防火墙阻止了访问。"
exit 1
}
else
echo "❌ 未知操作系统 ($OS_FAMILY),无法安装 Docker。"
exit 1
fi
echo "✅ 启动并设置 Docker 开机自启..."
sudo systemctl enable docker
sudo systemctl start docker
# 将当前用户添加到 docker 组,以便无需 sudo 运行 Docker 命令
if ! getent group docker | grep -qw "$USER"; then
echo "👥 将当前用户 ($USER) 添加到 docker 组..."
sudo usermod -aG docker "$USER"
echo "🔔 请注销并重新登录,以便更改生效。"
fi
fi
# Docker Compose 安装(使用 docker-compose-plugin 替代独立安装)
# 新版 Docker 建议使用 docker-compose-plugin它是 Docker CLI 的一部分
if command -v docker-compose &> /dev/null && ! command -v docker-compose-plugin &> /dev/null; then
echo "⚠️ 检测到旧版 Docker Compose 独立安装,建议升级到 docker-compose-plugin。"
echo "⚙️ 尝试安装 docker-compose-plugin..."
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
sudo apt-get install -y docker-compose-plugin
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
sudo yum install -y docker-compose-plugin
fi
# 移除旧版,如果旧版存在且已成功安装新版
if command -v docker-compose-plugin &> /dev/null && [[ -f "/usr/local/bin/docker-compose" ]]; then
echo "🗑️ 移除旧版 Docker Compose 独立安装..."
sudo rm -f /usr/local/bin/docker-compose
fi
elif command -v docker-compose-plugin &> /dev/null; then
echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤"
else
echo "⚙️ 安装 Docker Compose (插件版)..."
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
sudo apt-get install -y docker-compose-plugin
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
sudo yum install -y docker-compose-plugin
else
echo "❌ 未知操作系统,无法安装 Docker Compose 插件版。"
exit 1
fi
fi
echo "📌 Docker 运行状态:"
sudo systemctl status docker --no-pager || true
echo "📌 Docker Compose 版本:"
# 优先使用 docker compose 命令(新版),如果不行再尝试 docker-compose旧版或别名
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
docker compose version
elif command -v docker-compose &> /dev/null; then
docker-compose -v
else
echo "❌ 无法检测 Docker Compose 版本。"
fi
echo "🎉 Docker 和 Docker Compose 已就绪!"
echo "🚀 启动EasyAI"
# 对于新版 docker-compose-plugin命令是 'docker compose'
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
sudo docker compose pull && sudo docker compose up -d
else # 兼容旧版独立安装的 docker-compose
sudo docker-compose pull && sudo docker-compose up -d
fi
echo "🎉EasyAI应用启动成功"