feat(deploy): 优化部署脚本,支持问答式配置
- start.sh: 交互式选择 IP/域名访问,自动生成 .env、.env.tools、.env.ASG - start.sh: 移除内置克隆逻辑,需先 git clone 再执行 - 新增 docker/verify: Docker 验证环境与快速验证脚本 Made-with: Cursor
This commit is contained in:
parent
59a1a88e29
commit
bb2373d4f6
33
docker/verify/Dockerfile
Normal file
33
docker/verify/Dockerfile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# EasyAI 部署脚本验证环境
|
||||||
|
# 在 Docker 容器内运行 start.sh,通过挂载 Docker Socket 使用宿主机 Docker 启动服务
|
||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
curl \
|
||||||
|
ca-certificates \
|
||||||
|
gnupg \
|
||||||
|
lsb-release \
|
||||||
|
git \
|
||||||
|
sudo \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 安装 Docker CLI(使用宿主机 Docker 守护进程)
|
||||||
|
RUN install -m 0755 -d /etc/apt/keyrings \
|
||||||
|
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
|
||||||
|
&& chmod a+r /etc/apt/keyrings/docker.gpg \
|
||||||
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 创建工作目录
|
||||||
|
WORKDIR /workspace/easyai
|
||||||
|
|
||||||
|
# 复制项目文件(运行时通过 volume 挂载覆盖)
|
||||||
|
COPY . /workspace/easyai/
|
||||||
|
|
||||||
|
# 允许以 root 运行(容器内通常为 root)
|
||||||
|
ENV DEPLOY_ACCESS=ip
|
||||||
|
ENV DEPLOY_IP=127.0.0.1
|
||||||
24
docker/verify/run-verify-quick.sh
Executable file
24
docker/verify/run-verify-quick.sh
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 快速验证:仅测试配置生成,不拉取镜像、不启动服务
|
||||||
|
# 适合 CI 或快速检查脚本逻辑
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
|
||||||
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
|
echo "================================"
|
||||||
|
echo " EasyAI 部署脚本快速验证"
|
||||||
|
echo " (仅配置,不启动 Docker)"
|
||||||
|
echo "================================"
|
||||||
|
|
||||||
|
# 使用管道模拟用户输入:1=IP模式, 127.0.0.1=IP地址
|
||||||
|
printf '1\n127.0.0.1\n' | DEPLOY_DRY_RUN=1 DEPLOY_FORCE_RECONFIG=1 ./start.sh
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ 配置验证通过,检查生成的文件:"
|
||||||
|
ls -la .env .env.tools .env.ASG 2>/dev/null || true
|
||||||
|
echo ""
|
||||||
|
grep -E "NUXT_PUBLIC_(BASE_APIURL|BASE_SOCKETURL|SG_APIURL)" .env 2>/dev/null | head -3
|
||||||
46
docker/verify/run-verify.sh
Executable file
46
docker/verify/run-verify.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 在 Docker 容器中验证 EasyAI 部署脚本
|
||||||
|
# 用法: 在 easyai 项目根目录执行 ./docker/verify/run-verify.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
|
||||||
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
|
echo "================================"
|
||||||
|
echo " EasyAI 部署脚本 Docker 验证"
|
||||||
|
echo "================================"
|
||||||
|
echo "项目目录: $PROJECT_ROOT"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 构建验证镜像
|
||||||
|
echo "📦 构建验证镜像..."
|
||||||
|
docker build -f docker/verify/Dockerfile -t easyai-deploy-verify:latest .
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🚀 运行部署脚本(非交互模式,挂载 Docker Socket)..."
|
||||||
|
echo " 使用 DEPLOY_ACCESS=ip DEPLOY_IP=127.0.0.1"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 挂载 Docker Socket,使容器内 docker 命令使用宿主机 Docker
|
||||||
|
# 挂载项目目录,使用本地文件(避免容器内复制过时)
|
||||||
|
docker run --rm -it \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v "$PROJECT_ROOT:/workspace/easyai" \
|
||||||
|
-w /workspace/easyai \
|
||||||
|
-e DEPLOY_ACCESS=ip \
|
||||||
|
-e DEPLOY_IP=127.0.0.1 \
|
||||||
|
-e DEPLOY_FORCE_RECONFIG=1 \
|
||||||
|
easyai-deploy-verify:latest \
|
||||||
|
bash -c './start.sh'
|
||||||
|
|
||||||
|
EXIT_CODE=$?
|
||||||
|
echo ""
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo "✅ 部署脚本验证通过"
|
||||||
|
else
|
||||||
|
echo "❌ 部署脚本验证失败 (exit code: $EXIT_CODE)"
|
||||||
|
fi
|
||||||
|
exit $EXIT_CODE
|
||||||
20
start.sh
20
start.sh
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# EasyAI 一键部署脚本
|
# EasyAI 一键部署脚本
|
||||||
# 支持交互式问答配置,兼容 IP 与域名两种访问方式
|
# 支持交互式问答配置,兼容 IP 与域名两种访问方式
|
||||||
# 一行命令部署: bash -c "$(curl -fsSL https://git.51easyai.com/wangbo/easyai/raw/branch/main/start.sh)"
|
# 一行命令: git clone https://git.51easyai.com/wangbo/easyai && cd easyai && chmod +x ./start.sh && ./start.sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@ -9,30 +9,18 @@ set -e
|
|||||||
DEPLOY_DRY_RUN="${DEPLOY_DRY_RUN:-0}"
|
DEPLOY_DRY_RUN="${DEPLOY_DRY_RUN:-0}"
|
||||||
|
|
||||||
# ==================== 项目初始化 ====================
|
# ==================== 项目初始化 ====================
|
||||||
# 若通过 curl | bash 运行,需先克隆项目
|
|
||||||
init_project_dir() {
|
init_project_dir() {
|
||||||
local script_source
|
local script_source
|
||||||
script_source="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
script_source="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
||||||
if [ -f "${script_source}/docker-compose.yml" ]; then
|
if [ -f "${script_source}/docker-compose.yml" ]; then
|
||||||
echo "📁 检测到项目目录: ${script_source}"
|
echo "📁 项目目录: ${script_source}"
|
||||||
cd "$script_source"
|
cd "$script_source"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
echo "❌ 未找到 docker-compose.yml,请在 easyai 项目目录下运行 start.sh"
|
||||||
# 通过 curl 运行时,克隆项目
|
echo " 启动命令: git clone https://git.51easyai.com/wangbo/easyai && cd easyai && chmod +x ./start.sh && ./start.sh"
|
||||||
echo "📥 未检测到项目目录,正在克隆 EasyAI 仓库..."
|
|
||||||
EASYAI_DIR="${EASYAI_DIR:-$HOME/easyai}"
|
|
||||||
if [ -d "$EASYAI_DIR" ]; then
|
|
||||||
echo "📁 使用已有目录: $EASYAI_DIR"
|
|
||||||
cd "$EASYAI_DIR"
|
|
||||||
else
|
|
||||||
git clone --depth 1 https://git.51easyai.com/wangbo/easyai.git "$EASYAI_DIR" || {
|
|
||||||
echo "❌ 克隆失败,请检查网络或手动克隆: git clone https://git.51easyai.com/wangbo/easyai.git"
|
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
cd "$EASYAI_DIR"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==================== 配置变量(支持环境变量非交互模式) ====================
|
# ==================== 配置变量(支持环境变量非交互模式) ====================
|
||||||
DEPLOY_MODE="" # ip | domain
|
DEPLOY_MODE="" # ip | domain
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user