90 lines
2.8 KiB
Bash
Executable File
90 lines
2.8 KiB
Bash
Executable File
#!/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 |