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

一、镜像仓库配置前的环境准备

1.1 服务器资源规划

GitLab CE/EE对硬件资源有明确要求:CE版建议4核CPU、8GB内存,EE版建议8核CPU、16GB内存。磁盘空间需预留镜像存储的3倍容量(原始镜像+构建层+元数据)。推荐使用SSD存储以提高I/O性能,特别是高频访问的镜像仓库场景。

1.2 依赖组件安装

配置镜像仓库前需确保以下组件就绪:

  1. # Ubuntu/Debian系统示例
  2. sudo apt-get install -y docker.io docker-compose git
  3. sudo systemctl enable docker
  4. # CentOS/RHEL系统示例
  5. sudo yum install -y docker docker-compose git
  6. sudo systemctl enable docker

建议配置Docker私有仓库加速,修改/etc/docker/daemon.json

  1. {
  2. "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
  3. }

1.3 GitLab版本选择

CE版适合中小团队,EE版提供高级功能如审计日志、高级权限控制。通过Docker部署时,建议使用官方镜像:

  1. docker pull gitlab/gitlab-ee:latest # 企业版
  2. docker pull gitlab/gitlab-ce:latest # 社区版

二、SSH密钥验证配置详解

2.1 密钥生成与配置

生成ED25519密钥(比RSA更安全高效):

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

将公钥添加到GitLab:

  1. 登录GitLab,进入Settings > SSH Keys
  2. 粘贴~/.ssh/id_ed25519.pub内容
  3. 设置过期时间(EE版支持精细控制)

2.2 仓库SSH访问配置

/etc/gitlab/gitlab.rb中配置:

  1. gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 自定义SSH端口
  2. gitlab_rails['gitlab_ssh_host'] = 'mirror.example.com'

应用配置:

  1. gitlab-ctl reconfigure
  2. gitlab-ctl restart

2.3 常见问题排查

  • 连接拒绝:检查/var/log/gitlab/gitlab-shell/current日志
  • 权限错误:确保.ssh/authorized_keys文件权限为600
  • 端口冲突:使用netstat -tulnp | grep 2222检查端口占用

三、密码验证配置方案

3.1 基础密码认证

/etc/gitlab/gitlab.rb中启用:

  1. gitlab_rails['disable_initial_root_password'] = false
  2. gitlab_rails['initial_root_password'] = 'SecurePassword123!' # 仅首次有效

3.2 LDAP集成认证(企业版)

配置示例:

  1. gitlab_rails['ldap_enabled'] = true
  2. gitlab_rails['ldap_servers'] = {
  3. 'main' => {
  4. 'label' => 'Company LDAP',
  5. 'host' => 'ldap.example.com',
  6. 'port' => 389,
  7. 'uid' => 'sAMAccountName',
  8. 'bind_dn' => 'CN=ServiceAccount,DC=example,DC=com',
  9. 'password' => 'ldap_password',
  10. 'active_directory' => true,
  11. 'base' => 'DC=example,DC=com',
  12. 'group_base' => 'OU=Groups,DC=example,DC=com'
  13. }
  14. }

3.3 双因素认证配置

EE版支持TOTP验证:

  1. 进入Admin > Settings > General启用2FA
  2. 用户可在Profile Settings > Account中配置
  3. 建议配合YubiKey等硬件令牌使用

四、镜像仓库高级配置

4.1 存储驱动优化

配置Overlay2存储驱动(性能优于devicemapper):

  1. # 修改/etc/docker/daemon.json
  2. {
  3. "storage-driver": "overlay2"
  4. }

4.2 镜像清理策略

设置自动清理旧镜像:

  1. # /etc/gitlab/gitlab.rb
  2. gitlab_rails['registry_cleanup_enabled'] = true
  3. gitlab_rails['registry_cleanup_days'] = 30 # 保留30天内镜像

4.3 访问控制配置

通过项目权限控制镜像访问:

  1. # 限制特定组访问
  2. gitlab_rails['registry_authorization_required'] = true
  3. gitlab_rails['registry_authorization_groups'] = ['developers', 'maintainers']

五、性能调优与监控

5.1 数据库优化

配置PostgreSQL连接池:

  1. # /etc/gitlab/gitlab.rb
  2. postgresql['pool'] = 50 # 默认5,高并发场景需增加

5.2 监控指标收集

启用Prometheus监控:

  1. prometheus_monitoring['enable'] = true

关键监控项:

  • gitlab_registry_requests_total:镜像拉取请求数
  • gitlab_registry_storage_bytes:存储使用量
  • gitlab_registry_response_time_seconds:响应时间

5.3 备份策略

配置每日备份:

  1. # /etc/gitlab/gitlab.rb
  2. gitlab_rails['backup_path'] = '/var/opt/gitlab/backups'
  3. gitlab_rails['backup_keep_time'] = 604800 # 7天(秒)

手动备份命令:

  1. gitlab-rake gitlab:backup:create

六、安全加固建议

6.1 网络隔离

配置防火墙规则:

  1. # 仅允许特定IP访问
  2. sudo ufw allow from 192.168.1.0/24 to any port 2222
  3. sudo ufw allow from 192.168.1.0/24 to any port 80,443

6.2 镜像签名验证

配置Cosign进行镜像签名:

  1. # 生成密钥对
  2. cosign generate-key-pair
  3. # 签名镜像
  4. cosign sign --key cosign.key example/image:tag

6.3 定期安全扫描

启用GitLab依赖扫描:

  1. # /etc/gitlab/gitlab.rb
  2. gitlab_rails['dependency_scanning_enabled'] = true

七、故障排除指南

7.1 常见错误处理

错误现象 可能原因 解决方案
502 Bad Gateway Puma进程崩溃 检查/var/log/gitlab/gitlab-rails/production.log
镜像拉取超时 网络配置错误 检查/etc/gitlab/gitlab.rb中的registry_external_url
SSH连接卡住 DNS解析问题 /etc/ssh/sshd_config中添加UseDNS no

7.2 日志分析技巧

关键日志路径:

  • /var/log/gitlab/registry/current:镜像仓库日志
  • /var/log/gitlab/gitlab-shell/current:SSH访问日志
  • /var/log/gitlab/sidekiq/current:后台任务日志

7.3 性能瓶颈定位

使用gitlab-ctl tail命令实时查看日志流:

  1. gitlab-ctl tail registry # 监控镜像仓库日志
  2. gitlab-ctl tail nginx # 监控Web服务日志

通过以上配置,您可以构建一个安全、高效的GitLab镜像仓库系统。实际部署时,建议先在测试环境验证配置,再逐步推广到生产环境。定期审查权限设置和备份策略,确保系统长期稳定运行。