1. GitLab基础环境搭建
对于刚接触GitLab的开发团队或个人开发者来说,正确的初始配置是后续高效使用的基础。我建议从官方推荐的Omnibus包安装方式开始,这是最稳定且维护性最好的方案。以Ubuntu 20.04 LTS为例,安装前需要确保服务器满足最低配置要求:4核CPU、4GB内存(小型团队)或8GB内存(20人以上团队),存储空间根据代码库大小建议预留50GB以上。
安装依赖项时容易忽略的是邮箱服务配置:
sudo apt-get install -y curl openssh-server ca-certificates postfix注意:Postfix配置界面选择"Internet Site"后,系统域名建议填写完整FQDN(如gitlab.example.com),否则后续邮件通知可能无法正常发送。
Omnibus包的安装命令看似简单:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo EXTERNAL_URL="http://your-domain.com" apt-get install gitlab-ce但这里有三个关键细节:
- EXTERNAL_URL必须与后续访问地址完全一致,包括http/https协议
- 生产环境务必使用HTTPS,可提前准备SSL证书
- 首次安装后需等待约5分钟完成初始化,期间访问会显示502错误
安装完成后,通过sudo gitlab-ctl reconfigure应用配置变更,这个命令会重新生成所有服务的配置文件。我遇到过多次配置未生效的情况,都是因为没有执行这个关键步骤。
2. 账户体系与权限管理
GitLab的权限系统基于角色(Role)和项目访问级别(Access Level)的组合。首次登录后,应该立即修改root账户密码:
sudo gitlab-rake "gitlab:password:reset[root]"创建新用户时,建议关闭"Sign-up enabled"选项(Admin Area → Settings → General → Sign-up restrictions),改为由管理员手动创建账户。这样能避免垃圾账号注册问题。用户创建后需要特别注意:
- 每个用户的Primary Email必须验证后才能进行Git操作
- 二次认证(2FA)应该在安全要求高的团队中强制启用
- 外部用户(External users)标记可防止其参与所有项目
项目成员的权限分为5个级别:
- Guest:仅能查看和创建issue
- Reporter:可克隆代码,但不能推送
- Developer:可推送非保护分支
- Maintainer:可管理分支和标签
- Owner:完整项目控制权
实际经验:对于核心仓库,Maintainer角色应该严格控制,通常每个技术方向只设1-2人。我们团队曾因Maintainer过多导致分支混乱。
3. 项目仓库基础配置
新建项目时有两个容易混淆的选项:
- Visibility Level:控制谁可以看到项目
- Private:仅成员可见(推荐默认)
- Internal:登录用户可见
- Public:完全公开
- Initialize repository with a README:会立即创建第一个commit,空项目更适合需要完全自定义的情况
保护分支(Protected Branches)的设置尤为关键:
graph TD A[master/main] -->|默认保护| B[禁止Force Push] A --> C[合并需MR] A --> D[仅Maintainer可推送] E[release/*] --> F[同master规则] G[dev/*] --> H[允许Developer推送](注:实际配置在Settings → Repository → Protected Branches)
我们团队的标准配置方案:
- master/main:全保护,合并需CI通过+2个Approval
- release/*:同master规则,用于hotfix
- dev/*:开发者可推送,用于日常开发
- feature/*:不保护,允许force push
4. SSH密钥与API访问配置
Git操作认证推荐使用SSH方式,比HTTP更安全稳定。密钥生成时建议使用更强的Ed25519算法:
ssh-keygen -t ed25519 -C "your_email@example.com"常见问题解决方案:
密钥添加后仍提示权限拒绝:
- 确认~/.ssh/config没有冲突配置
- 测试连接:
ssh -T git@gitlab.example.com - 检查服务端authorized_keys:
sudo cat /var/opt/gitlab/.ssh/authorized_keys
CI/CD需要API访问时:
- 创建Project Access Token(比Personal Token更安全)
- 权限遵循最小化原则
- 通过环境变量传递而非硬编码在脚本中
HTTP认证缓存问题:
git config --global credential.helper cache # 或使用store长期存储(安全性较低)
5. 系统优化与日常维护
内存优化是GitLab性能调优的重点。通过调整/etc/gitlab/gitlab.rb中的以下参数:
unicorn['worker_processes'] = 2 # 默认是CPU核心数,建议设为物理核心的50% sidekiq['concurrency'] = 5 # 后台任务并发数 postgresql['shared_buffers'] = "256MB"备份策略应该包含:
# 手动备份(包含数据库和仓库) sudo gitlab-backup create # 自动备份配置 gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 # 保留7天监控方案推荐组合:
- 内置Prometheus:基础指标收集
- Grafana仪表板:可视化监控
- 日志集中管理:
sudo gitlab-ctl tail实时查看
6. 常见故障排查指南
问题1:仓库无法推送,提示"remote: GitLab: You are not allowed to push code to protected branches"
- 检查用户角色是否具备推送权限
- 查看分支保护规则
- 临时解决方案:创建Merge Request或联系Maintainer
问题2:Web界面响应缓慢
- 检查内存使用:
sudo gitlab-ctl status - 查看PostgreSQL负载:
gitlab-psql -c "SELECT * FROM pg_stat_activity;" - 可能的解决方案:增加SWAP空间或优化查询
问题3:CI/CD流水线卡住
- 检查Runner状态:
sudo gitlab-runner list - 查看作业日志:Job → Trace
- 常见原因:Docker镜像拉取超时或缓存冲突
经过多年维护GitLab的经验,我总结出一个黄金法则:任何配置变更后,先用测试项目验证,再应用到生产环境。曾经因为直接修改生产环境的gitlab.rb导致全站服务中断,这个教训值得每个管理员谨记。