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
|
||||
22
start.sh
22
start.sh
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# EasyAI 一键部署脚本
|
||||
# 支持交互式问答配置,兼容 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
|
||||
|
||||
@ -9,29 +9,17 @@ set -e
|
||||
DEPLOY_DRY_RUN="${DEPLOY_DRY_RUN:-0}"
|
||||
|
||||
# ==================== 项目初始化 ====================
|
||||
# 若通过 curl | bash 运行,需先克隆项目
|
||||
init_project_dir() {
|
||||
local script_source
|
||||
script_source="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
||||
if [ -f "${script_source}/docker-compose.yml" ]; then
|
||||
echo "📁 检测到项目目录: ${script_source}"
|
||||
echo "📁 项目目录: ${script_source}"
|
||||
cd "$script_source"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 通过 curl 运行时,克隆项目
|
||||
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
|
||||
}
|
||||
cd "$EASYAI_DIR"
|
||||
fi
|
||||
echo "❌ 未找到 docker-compose.yml,请在 easyai 项目目录下运行 start.sh"
|
||||
echo " 启动命令: git clone https://git.51easyai.com/wangbo/easyai && cd easyai && chmod +x ./start.sh && ./start.sh"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ==================== 配置变量(支持环境变量非交互模式) ====================
|
||||
|
||||
Loading…
Reference in New Issue
Block a user