easyai/update.sh
wangbo 512dd66762 feat: 优化 update 脚本,新增 Windows 版 update.ps1
- update.sh: 改为 git pull 拉取整个仓库,命令行内选择更新方式(默认拉取+更新)
- update.ps1: 新增 Windows 更新脚本,功能与 Linux 版一致
- README: 更新 update 脚本说明及 Windows 使用方式

Made-with: Cursor
2026-03-20 18:35:33 +08:00

124 lines
4.2 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 # 发生错误时终止脚本执行
# 仅支持 -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应用更新成功"