Files
macos-tools/gitlab/init-gitlab-optimized.sh
gaoandClaude 2c616faba0 feat: 完成 GitLab macOS 优化部署和 CI/CD 配置
## 主要改进
- 升级 GitLab CE 到 16.11.7 (最新稳定版)
- 优化性能配置 (Puma worker, Sidekiq 并发控制)
- 禁用不必要服务节省资源 (Prometheus/Grafana)
- 配置国内 APT 镜像源加速更新
- 添加时区设置 Asia/Shanghai

## 新增功能
- 一键部署脚本 (init-gitlab-optimized.sh)
- 智能 Runner 注册 (register-runner-optimized.sh)
- 综合维护工具 (maintenance-gitlab.sh)
- SMTP 邮件配置向导 (setup-smtp.sh)
- 密码重置工具 (reset-gitlab-password.sh)
- 快速诊断脚本 (diagnose-gitlab.sh)

## CI/CD 配置
- 注册 Docker Runner (容器化构建)
- 注册 Shell Runner (本地脚本执行)
- 创建 CI/CD 模板文件
- Runner 配置优化和清理

## 文档完善
- 技术文档 (CLAUDE.md)
- 优化部署指南 (OPTIMIZATION_GUIDE.md)
- 使用说明和故障排除指南

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2025-11-04 11:49:57 +08:00

133 lines
4.3 KiB
Bash
Executable File

#!/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 '[email protected]@mirrors.aliyun.com@g' /etc/apt/sources.list
sed -i '[email protected]@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: [email protected]: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}"