#!/bin/sh # 脚本路径 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # 项目根目录 PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" echo "=== Humanus.cpp 开发环境启动脚本 ===" echo "项目根目录: $PROJECT_ROOT" # 确保在项目根目录执行 cd "$PROJECT_ROOT" || { echo "无法进入项目根目录"; exit 1; } # 确保脚本有执行权限 chmod +x .devops/scripts/*.sh # 检查网络连接 echo "正在检查网络连接..." if ! ping -c 1 -W 1 auth.docker.io > /dev/null 2>&1; then echo "警告: 无法连接到Docker认证服务器,可能会导致EOF错误" echo "推荐解决方案:" echo "1. 检查Docker Desktop设置中的DNS配置" echo "2. 添加Docker镜像加速器" echo "3. 检查网络连接和代理设置" echo "" echo "是否继续尝试构建? (可能会失败)" read -p "继续构建? (y/n): " CONTINUE_BUILD if [ "$CONTINUE_BUILD" != "y" ] && [ "$CONTINUE_BUILD" != "Y" ]; then echo "构建已取消" exit 1 fi fi # 提供使用备用构建选项 echo "选择构建方式:" echo "1. 标准构建 (docker-compose build)" echo "2. 使用--no-cache选项 (适用于之前构建失败)" echo "3. 使用host网络构建 (适用于网络问题)" read -p "请选择构建方式 [1-3,默认1]: " BUILD_OPTION BUILD_OPTION=${BUILD_OPTION:-1} # 构建Docker镜像 echo "正在构建Docker镜像(多阶段构建)..." case $BUILD_OPTION in 1) docker-compose -f .devops/docker-compose.yml build ;; 2) docker-compose -f .devops/docker-compose.yml build --no-cache ;; 3) docker-compose -f .devops/docker-compose.yml build --build-arg BUILDKIT_INLINE_CACHE=1 --network=host ;; *) echo "无效选项,使用标准构建" docker-compose -f .devops/docker-compose.yml build ;; esac # 检查构建结果 if [ $? -ne 0 ]; then echo "构建失败!请查看错误信息。" echo "如果看到EOF错误,请参考 .devops/DOCKER_README.md 中的网络问题解决方案。" exit 1 fi # 启动容器 echo "正在启动开发容器..." docker-compose -f .devops/docker-compose.yml up -d # 显示容器状态 echo "容器状态:" docker-compose -f .devops/docker-compose.yml ps echo "" echo "开发环境已启动。所有依赖(包括Node.js和npm)已预装在镜像中。" echo "" echo "您可以使用以下命令进入容器:" echo "docker-compose -f .devops/docker-compose.yml exec humanus bash" echo "" echo "要停止环境,请使用:" echo "docker-compose -f .devops/docker-compose.yml down" echo "" # 询问是否进入容器 read -p "是否立即进入容器? (y/n): " ENTER_CONTAINER if [ "$ENTER_CONTAINER" = "y" ] || [ "$ENTER_CONTAINER" = "Y" ]; then echo "进入容器..." docker-compose -f .devops/docker-compose.yml exec humanus bash fi