humanus.cpp/.devops/scripts/start-dev.sh

90 lines
2.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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