diff --git a/docker/verify/Dockerfile b/docker/verify/Dockerfile new file mode 100644 index 0000000..d92ec30 --- /dev/null +++ b/docker/verify/Dockerfile @@ -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 diff --git a/docker/verify/run-verify-quick.sh b/docker/verify/run-verify-quick.sh new file mode 100755 index 0000000..2e31957 --- /dev/null +++ b/docker/verify/run-verify-quick.sh @@ -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 diff --git a/docker/verify/run-verify.sh b/docker/verify/run-verify.sh new file mode 100755 index 0000000..29eacbe --- /dev/null +++ b/docker/verify/run-verify.sh @@ -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 diff --git a/start.sh b/start.sh index a12614c..c2bf18d 100755 --- a/start.sh +++ b/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 } # ==================== 配置变量(支持环境变量非交互模式) ====================