## 主要改进 - 升级 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]>
133 lines
4.3 KiB
Bash
Executable File
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}" |