- update.sh: 改为 git pull 拉取整个仓库,命令行内选择更新方式(默认拉取+更新) - update.ps1: 新增 Windows 更新脚本,功能与 Linux 版一致 - README: 更新 update 脚本说明及 Windows 使用方式 Made-with: Cursor
124 lines
4.2 KiB
Bash
Executable File
124 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
set -e # 发生错误时终止脚本执行
|
||
|
||
# 仅支持 -h/--help 快速查看
|
||
if [[ "${1:-}" =~ ^(-h|--help)$ ]]; then
|
||
echo "用法: $0"
|
||
echo ""
|
||
echo "脚本将提示选择更新方式,默认拉取仓库并更新镜像。"
|
||
exit 0
|
||
fi
|
||
|
||
# 进入脚本所在目录(项目根目录)
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
||
cd "$SCRIPT_DIR"
|
||
|
||
# 命令行内选择更新方式(默认:更新并拉取仓库)
|
||
echo ""
|
||
echo "请选择更新方式:"
|
||
echo " [1] 更新并拉取仓库(git pull)+ 更新镜像并重启(默认)"
|
||
echo " [2] 仅更新镜像并重启(跳过 git pull)"
|
||
read -r -p "请选择 [1/2,回车默认 1]: " choice
|
||
choice="${choice:-1}"
|
||
SKIP_REPO_UPDATE=false
|
||
case "$choice" in
|
||
2) SKIP_REPO_UPDATE=true ;;
|
||
1) ;;
|
||
*) echo "❌ 无效选择,将使用默认:更新并拉取仓库"; SKIP_REPO_UPDATE=false ;;
|
||
esac
|
||
|
||
# 拉取整个仓库更新
|
||
if [ "$SKIP_REPO_UPDATE" = false ]; then
|
||
echo ""
|
||
echo "==========================="
|
||
echo "📥 拉取仓库最新代码"
|
||
echo "==========================="
|
||
|
||
if [ ! -d .git ]; then
|
||
echo "❌ 当前目录不是 Git 仓库,无法执行 git pull"
|
||
echo " 请使用 git clone 克隆项目后即可使用 update.sh 更新"
|
||
echo " 克隆命令: git clone https://git.51easyai.com/wangbo/easyai && cd easyai"
|
||
exit 1
|
||
fi
|
||
|
||
echo "📥 正在执行 git pull..."
|
||
if git pull; then
|
||
echo "✅ 仓库已更新到最新版本"
|
||
else
|
||
echo "❌ git pull 失败,请检查网络或远程仓库配置"
|
||
exit 1
|
||
fi
|
||
|
||
# 确保环境配置文件存在(从 .sample 生成,不覆盖已有文件)
|
||
echo ""
|
||
echo "📝 检查环境配置文件..."
|
||
[ ! -f .env ] && [ -f .env.sample ] && cp .env.sample .env && echo " ✓ .env"
|
||
[ ! -f .env.tools ] && [ -f .env.tools.sample ] && cp .env.tools.sample .env.tools && echo " ✓ .env.tools"
|
||
[ ! -f .env.ASG ] && [ -f .env.ASG.sample ] && cp .env.ASG.sample .env.ASG && echo " ✓ .env.ASG"
|
||
[ ! -f .env.AMS ] && [ -f .env.AMS.sample ] && cp .env.AMS.sample .env.AMS && echo " ✓ .env.AMS"
|
||
|
||
echo ""
|
||
else
|
||
echo "⏭️ 跳过仓库更新,仅更新镜像并重启"
|
||
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应用更新成功"
|