GitLab CE/EE镜像仓库配置全攻略:SSH与密码双验证实践指南

一、GitLab镜像仓库基础配置

1.1 镜像仓库作用解析

GitLab镜像仓库主要用于构建分布式开发环境,通过将主仓库内容同步至多个节点,实现以下核心价值:

  • 负载均衡:分散Git克隆/拉取请求的带宽压力
  • 灾备恢复:当主仓库故障时快速切换备用节点
  • 地理优化:为不同区域的开发者提供就近访问
  • 权限隔离:对特定项目组开放独立镜像权限

典型应用场景包括跨国企业分布式团队、高校科研协作网络、开源项目全球镜像等。配置前需确保网络拓扑支持多节点通信,建议使用BGP多线机房降低延迟。

1.2 基础环境准备

系统要求:

  • CE版:2核4G内存起步,建议使用Ubuntu 20.04 LTS/CentOS 8
  • EE版:4核8G内存起步,需企业级Linux发行版
  • 存储配置:建议SSD RAID10,预留2倍代码库大小的存储空间

依赖安装(Ubuntu示例):

  1. sudo apt update
  2. sudo apt install -y curl openssh-server ca-certificates tzdata perl
  3. sudo apt install -y postfix # 邮件通知依赖

二、SSH密钥认证配置

2.1 密钥生成与管理

生成ED25519密钥(推荐):

  1. ssh-keygen -t ed25519 -C "gitlab-mirror@example.com"

生成RSA 4096位密钥(兼容旧系统):

  1. ssh-keygen -t rsa -b 4096 -C "legacy-mirror@example.com"

密钥管理最佳实践:

  • 公钥命名规范:mirror-node-<region>.pub
  • 私钥权限设置:chmod 400 ~/.ssh/id_ed25519
  • 使用ssh-agent管理多密钥:
    1. eval "$(ssh-agent -s)"
    2. ssh-add ~/.ssh/mirror-node-apac

2.2 GitLab仓库配置

在项目Settings > Repository > Deploy Keys中:

  1. 添加标题:Mirror Node - APAC
  2. 粘贴公钥内容
  3. 勾选Write access allowed(镜像需要推送权限)
  4. 设置过期时间(EE版支持)

2.3 镜像同步脚本示例

  1. #!/bin/bash
  2. # 配置参数
  3. MIRROR_URL="git@gitlab.example.com:group/project.git"
  4. LOCAL_PATH="/var/git/mirrors/project"
  5. LOG_FILE="/var/log/gitlab-mirror.log"
  6. # 执行同步
  7. cd $LOCAL_PATH || git clone --mirror $MIRROR_URL $LOCAL_PATH
  8. git fetch origin --prune
  9. git push --mirror git@mirror-node.example.com:group/project.git 2>&1 | tee -a $LOG_FILE

建议设置cron定时任务:

  1. 0 */6 * * * /usr/local/bin/gitlab-mirror-sync.sh

三、HTTP密码认证配置

3.1 访问令牌生成

在用户Settings > Access Tokens中创建:

  • 令牌名称:mirror-node-token
  • 过期日期:建议90天周期
  • 权限范围:勾选read_repositorywrite_repository

3.2 仓库URL配置

使用令牌的克隆URL格式:

  1. https://oauth2:<TOKEN>@gitlab.example.com/group/project.git

3.3 认证缓存优化

配置Git全局设置避免重复输入:

  1. git config --global credential.helper store
  2. # 或使用缓存(15分钟有效期)
  3. git config --global credential.helper 'cache --timeout=900'

四、安全加固方案

4.1 网络层防护

  • 配置防火墙规则仅允许特定IP访问Git端口
  • 使用TLS 1.2+协议,禁用SSLv3/TLS1.0
  • 实施IP白名单机制(EE版支持Geo限制)

4.2 认证安全增强

SSH配置建议:

  1. # /etc/ssh/sshd_config
  2. PermitRootLogin no
  3. PasswordAuthentication no
  4. ChallengeResponseAuthentication no
  5. UsePAM no
  6. MaxAuthTries 3
  7. ClientAliveInterval 300

HTTP认证建议:

  • 启用双因素认证(2FA)
  • 设置短有效期访问令牌
  • 监控异常登录尝试

4.3 日志与审计

关键日志路径:

  • /var/log/gitlab/gitlab-shell/current
  • /var/log/gitlab/gitlab-workhorse/current
  • /var/log/auth.log(SSH登录记录)

建议配置日志轮转:

  1. # /etc/logrotate.d/gitlab-mirror
  2. /var/log/gitlab-mirror/*.log {
  3. daily
  4. missingok
  5. rotate 14
  6. compress
  7. delaycompress
  8. notifempty
  9. create 640 gitlab-mirror adm
  10. }

五、故障排查指南

5.1 常见SSH问题

问题现象Permission denied (publickey)
排查步骤:

  1. 验证密钥是否在~/.ssh/authorized_keys
  2. 检查GitLab服务器/var/log/auth.log
  3. 确认SSH服务配置:
    1. sudo grep "AuthorizedKeysFile" /etc/ssh/sshd_config

5.2 同步失败处理

错误示例remote: HTTP Basic: Access denied
解决方案:

  1. 检查令牌权限是否足够
  2. 验证URL格式是否正确
  3. 测试基础认证:
    1. curl -u oauth2:<TOKEN> https://gitlab.example.com/api/v4/projects

5.3 性能优化建议

  • 对大仓库启用浅克隆:git clone --depth 1 --mirror
  • 使用git repack -a -d --window=250 --depth=250优化存储
  • 配置Git垃圾回收:
    1. git gc --prune=now --aggressive

六、企业级部署建议

6.1 高可用架构

典型三节点部署方案:

  1. 主节点(全功能服务)
  2. 镜像节点1(亚太区)
  3. 镜像节点2(欧美区)

配置同步拓扑:

  1. 主节点 <--> 镜像节点1
  2. ↕️
  3. 镜像节点2

6.2 监控告警设置

关键监控指标:

  • 仓库同步延迟(建议<15分钟)
  • 磁盘空间使用率(预留20%缓冲)
  • SSH连接成功率(>99.9%)

Prometheus监控配置示例:

  1. scrape_configs:
  2. - job_name: 'gitlab-mirror'
  3. static_configs:
  4. - targets: ['mirror-node1:9100', 'mirror-node2:9100']
  5. metrics_path: '/metrics'

6.3 备份恢复策略

完整备份方案:

  1. 仓库数据:rsync -avz /var/opt/gitlab/git-data/
  2. 配置文件:/etc/gitlab/gitlab.rb
  3. 数据库:sudo gitlab-rake gitlab:backup:create

恢复测试流程:

  1. 新服务器部署基础环境
  2. 恢复配置文件
  3. 执行sudo gitlab-ctl reconfigure
  4. 导入数据库备份
  5. 验证仓库访问权限

通过系统化的配置管理,GitLab镜像仓库可实现99.99%的可用性保障。建议每季度进行灾难恢复演练,确保备份数据的可恢复性。实际部署中,应根据团队规模选择合适的架构复杂度,中小团队可采用主备模式,大型企业建议构建全球镜像网络。