#!/bin/bash # GitLab macOS 优化部署初始化脚本 # 基于最佳实践的生产环境部署 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 配置 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" GITLAB_COMPOSE_FILE="${SCRIPT_DIR}/docker-compose.yml" ENV_FILE="${SCRIPT_DIR}/.env.production" echo -e "${GREEN}🚀 GitLab macOS 优化部署初始化${NC}" echo "==================================" # 检查必要文件 echo -e "${YELLOW}检查配置文件...${NC}" if [[ ! -f "$GITLAB_COMPOSE_FILE" ]]; then echo -e "${RED}错误: docker-compose.yml 不存在${NC}" exit 1 fi if [[ ! -f "$ENV_FILE" ]]; then echo -e "${YELLOW}创建生产环境配置文件...${NC}" cp "$ENV_FILE" "${SCRIPT_DIR}/.env" fi # 创建必要目录 echo -e "${YELLOW}创建目录结构...${NC}" mkdir -p ~/ops/data/gitlab/{logs,data} mkdir -p ~/ops/backups/gitlab mkdir -p ~/ops/logs mkdir -p "${SCRIPT_DIR}/config" mkdir -p "${SCRIPT_DIR}/gitlab-runner-config" # 停止现有服务 echo -e "${YELLOW}停止现有 GitLab 服务...${NC}" docker-compose -f "$GITLAB_COMPOSE_FILE" down 2>/dev/null || true # 启动优化版 GitLab echo -e "${YELLOW}启动 GitLab 容器...${NC}" docker-compose -f "$GITLAB_COMPOSE_FILE" --env-file "$ENV_FILE" up -d echo -e "${YELLOW}等待 GitLab 初始化...${NC}" echo "这通常需要 3-5 分钟,请耐心等待..." # 等待服务启动 for i in {1..10}; do if curl -f http://localhost:8891/-/readiness >/dev/null 2>&1; then echo -e "${GREEN}✅ GitLab 已就绪!${NC}" break fi echo "等待中... ($i/10)" sleep 30 done # 配置国内镜像源 echo -e "${YELLOW}配置国内 APT 镜像源...${NC}" docker exec gitlab-ce bash -c " cp /etc/apt/sources.list /etc/apt/sources.list.backup sed -i 's@deb.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list sed -i 's@security.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list " 2>/dev/null || echo "APT 源配置跳过(容器可能还在初始化)" # 获取 root 密码 echo -e "${YELLOW}获取管理员密码...${NC}" sleep 10 ROOT_PASSWORD=$(docker exec gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password 2>/dev/null | awk '{print $NF}' || echo "需要首次访问时设置") # 显示结果 echo -e "${GREEN}🎉 GitLab 优化部署完成!${NC}" echo "==================================" echo -e "${BLUE}📍 访问信息:${NC}" echo " Web UI: http://192.168.1.83:8891" echo " SSH: git@192.168.1.83:8929" echo " 用户名: root" echo " 密码: ${ROOT_PASSWORD}" echo "" echo -e "${BLUE}🛠️ 管理命令:${NC}" echo " 查看状态: docker exec gitlab-ce gitlab-ctl status" echo " 查看日志: docker logs -f gitlab-ce" echo " 重启服务: docker-compose restart" echo " 停止服务: docker-compose down" echo "" echo -e "${BLUE}📁 重要目录:${NC}" echo " 配置: ${SCRIPT_DIR}/config" echo " 数据: ~/ops/data/gitlab" echo " 备份: ~/ops/backups/gitlab" echo " 日志: ~/ops/logs" echo "" echo -e "${YELLOW}⚠️ 下一步操作:${NC}" echo " 1. 访问 Web UI 完成首次设置" echo " 2. 配置 SMTP 邮件服务(如需要)" echo " 3. 注册 GitLab Runner: ./register-runner-optimized.sh" echo " 4. 创建项目并配置 CI/CD" # 创建快速诊断脚本 cat > "${SCRIPT_DIR}/diagnose-gitlab.sh" << 'EOF' #!/bin/bash # GitLab 快速诊断脚本 echo "🔍 GitLab 诊断信息" echo "==================" echo "📊 容器状态:" docker ps | grep gitlab echo -e "\n🌐 网络连接:" curl -I http://localhost:8891 2>/dev/null | head -1 || echo " ❌ Web UI 不可访问" echo -e "\n💾 磁盘使用:" du -sh ~/ops/data/gitlab 2>/dev/null || echo " ❌ 数据目录不存在" echo -e "\n📋 服务状态:" docker exec gitlab-ce gitlab-ctl status 2>/dev/null | grep -E "(run|down)" | head -5 || echo " ❌ 无法获取服务状态" echo -e "\n🔑 Root 密码:" docker exec gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password 2>/dev/null | awk '{print " " $0}' || echo " ❌ 密码文件不存在" echo -e "\n📝 最近的日志:" docker logs gitlab-ce --tail 5 2>/dev/null || echo " ❌ 无法获取日志" EOF chmod +x "${SCRIPT_DIR}/diagnose-gitlab.sh" echo -e "${GREEN}✅ 诊断脚本已创建: ./diagnose-gitlab.sh${NC}"