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

157 lines
6.8 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
# 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)..."
# 尝试使用国内镜像源的 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || \
curl -fsSL https://mirrors.nwafu.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || {
echo "❌ 无法获取 Docker GPG 密钥。请检查网络或尝试手动下载。"
exit 1
}
sudo chmod a+r /etc/apt/keyrings/docker.gpg # 设置正确的权限
echo "🌍 添加 Docker 源 (Ubuntu)..."
# 配置国内镜像源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null || {
echo "❌ 无法添加 Docker 国内镜像源。请检查网络或源地址。"
exit 1
}
sudo apt-get update -y
echo "🐳 安装 Docker (Ubuntu)..."
# 安装推荐的 Docker CE 相关组件,包括 docker-buildx-plugin 和 docker-compose-plugin
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
echo "❌ Docker 或其组件安装失败。请检查错误日志。"
exit 1
}
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
echo "📦 安装依赖 (CentOS)..."
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
echo "🌍 添加 Docker 源 (CentOS)..."
# 备份原有 repo 文件
if [ -f "/etc/yum.repos.d/docker-ce.repo" ]; then
echo "🔄 备份原有 Docker CE repo 文件..."
sudo mv /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo.bak
fi
# 尝试配置阿里云镜像源
echo "尝试配置阿里云 Docker CE 镜像源..."
sudo tee /etc/yum.repos.d/docker-ce.repo <<-'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
enabled=1
EOF
# 禁用默认的 container-tools 模块 (CentOS 8+)
if [[ "$OS_VERSION" -ge "8" ]]; then
echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..."
sudo yum module disable -y container-tools || true # 允许失败,某些系统可能没有此模块
sudo yum module enable -y container-tools:docker || true # 允许失败
fi
echo "🐳 安装 Docker (CentOS)..."
# 尝试安装 Docker CE 及其组件,包括 buildx 插件和 compose 插件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
echo "❌ Docker 或其组件安装失败。请检查错误日志或尝试更换国内镜像源。"
echo "例如,您可以编辑 /etc/yum.repos.d/docker-ce.repo 将 baseurl 更改为其他镜像站,如清华大学:"
echo " https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/\$releasever/\$basearch/stable"
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)
if command -v docker-compose-plugin &> /dev/null; then
echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤"
elif command -v docker-compose &> /dev/null; then
echo "⚠️ 检测到旧版 Docker Compose 独立安装。为保持最新兼容性,推荐使用 Docker Compose 插件版。"
echo "如果您希望继续使用旧版,可以忽略此提示。"
echo "如果需要安装插件版,请先卸载旧版或手动安装 docker-compose-plugin。"
else
echo "⚙️ 安装 Docker Compose (插件版)..."
# 尝试安装 docker-compose-plugin它通常随 docker-ce 一起安装
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
sudo apt-get install -y docker-compose-plugin || {
echo "❌ 无法安装 docker-compose-plugin。请检查您的 APT 源或网络。"
exit 1
}
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
sudo yum install -y docker-compose-plugin || {
echo "❌ 无法安装 docker-compose-plugin。请检查您的 YUM 源或网络。"
exit 1
}
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应用启动成功"