1. 环境准备与系统要求
在Ubuntu 26.04上部署GitLab CE前,我们需要确保硬件配置满足最低要求。根据我多年部署经验,官方建议的4GB内存在实际使用中往往捉襟见肘,特别是当团队规模超过5人时。以下是经过实战验证的配置建议:
1.1 硬件配置基准
生产环境推荐配置:
- CPU:4核及以上(8核最佳,特别是启用CI/CD时)
- 内存:8GB起步(实测4GB内存运行GitLab+CI/CD会出现频繁OOM)
- 磁盘:100GB SSD(Git仓库体积会随时间膨胀)
- 带宽:100Mbps+(克隆大仓库时体验差异明显)
开发测试环境下限:
- CPU:2核
- 内存:4GB(需关闭部分服务)
- 磁盘:50GB
实测数据:在4核8GB的DigitalOcean实例上,10人团队日常使用内存占用稳定在5.2GB左右,CI/CD构建时会飙升到7.5GB。
1.2 系统依赖检查
Ubuntu 26.04作为新发布版本,需要特别注意依赖兼容性。以下是必须安装的基础组件:
# 更新软件源(Ubuntu 26.04默认使用deb822格式) sudo apt update && sudo apt upgrade -y # 安装核心依赖 sudo apt install -y curl openssh-server postfix ca-certificates关键组件说明:
postfix:邮件服务(可选但建议安装,后续配置通知系统会用到)ca-certificates:HTTPS证书验证必备(很多人会漏装这个)openssh-server:必须启用,否则git clone会失败
2. 软件源配置与优化
2.1 GPG密钥处理技巧
官方文档的密钥安装方式在国内经常超时,这里分享一个稳定方案:
# 使用国内镜像下载GPG密钥(避免连接超时) curl -fsSL "https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/gpgkey" | \ sudo gpg --dearmor -o /usr/share/keyrings/gitlab-ce-archive.gpg # 验证密钥指纹(安全必做步骤) gpg --show-keys /usr/share/keyrings/gitlab-ce-archive.gpg | grep -A1 "GitLab B.V."2.2 软件源配置实战
由于Ubuntu 26.04刚发布,GitLab官方源尚未适配,我们需要使用Ubuntu 24.04(noble)的源。这里给出两种配置方案:
方案一:清华镜像源(推荐国内用户)
sudo tee /etc/apt/sources.list.d/gitlab_gitlab-ce.sources <<EOF Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/noble Suites: noble Components: main Architectures: amd64 Signed-By: /usr/share/keyrings/gitlab-ce-archive.gpg EOF方案二:官方源(海外服务器适用)
sudo tee /etc/apt/sources.list.d/gitlab_gitlab-ce.sources <<EOF Types: deb URIs: https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu Suites: noble Components: main Architectures: amd64 Signed-By: /usr/share/keyrings/gitlab-ce-archive.gpg EOF更新软件源时建议增加重试机制:
for i in {1..3}; do sudo apt update && break || sleep 5; done3. GitLab CE安装详解
3.1 安装命令的隐藏参数
官方文档只给出基本安装命令,但实际部署时有几个关键参数需要注意:
# 完整安装命令(生产环境推荐) sudo EXTERNAL_URL="http://your-server-ip" \ GITLAB_ROOT_PASSWORD="your_strong_password" \ apt install -y gitlab-ce参数解析:
EXTERNAL_URL:必须设置为最终访问地址(后期修改很麻烦)GITLAB_ROOT_PASSWORD:直接设置root密码(避免依赖临时密码文件)-y:自动确认安装(脚本部署时必备)
3.2 安装过程监控技巧
GitLab安装过程较漫长(约15-30分钟),建议开两个终端窗口:
窗口1:跟踪下载进度
tail -f /var/log/apt/term.log窗口2:监控服务启动
watch -n 5 'sudo gitlab-ctl status | grep -v "running"'当所有服务显示"run"状态时,安装才算真正完成。常见卡顿点:
- PostgreSQL数据库初始化(首次可能耗时10分钟)
- Ruby gems编译安装(CPU密集型操作)
4. 关键配置调优
4.1 必须修改的配置项
编辑/etc/gitlab/gitlab.rb时,这些配置直接影响使用体验:
# 基础配置 external_url 'http://git.example.com' # 必须与安装时一致 nginx['listen_port'] = 80 nginx['listen_https'] = false # 未配置SSL时设为false # 邮件配置(SendGrid示例) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.sendgrid.net" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "apikey" gitlab_rails['smtp_password'] = "your_sendgrid_key" gitlab_rails['smtp_domain'] = "yourdomain.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['gitlab_email_from'] = 'gitlab@yourdomain.com' # 性能调优(4核8GB配置示例) puma['worker_processes'] = 4 sidekiq['max_concurrency'] = 10 postgresql['shared_buffers'] = "1GB" unicorn['worker_timeout'] = 604.2 配置生效技巧
修改配置后,使用以下命令序列确保完全生效:
# 语法检查(避免配置错误导致服务崩溃) sudo gitlab-rake gitlab:check # 应用配置(首次较慢) sudo gitlab-ctl reconfigure # 完整重启(非必须但推荐) sudo gitlab-ctl restart特别提醒:
reconfigure会重新生成所有服务的配置文件,大内存实例可能需要3-5分钟,期间不要中断操作。
5. 安全加固指南
5.1 防火墙规则配置
仅开放必要端口(Ubuntu 26.04默认使用nftables):
# 安装nftables(26.04默认未安装) sudo apt install -y nftables # 基础规则 sudo nft add table inet gitlab sudo nft add chain inet gitlab input { type filter hook input priority 0 \; } sudo nft add rule inet gitlab input tcp dport {22, 80, 443} ct state new accept sudo nft add rule inet gitlab input ct state established,related accept sudo nft add rule inet gitlab input drop # 持久化规则 sudo nft list ruleset > /etc/nftables.conf sudo systemctl enable --now nftables5.2 HTTPS强制实施
使用Let's Encrypt自动证书(需域名已解析):
# 在gitlab.rb中启用 letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com'] nginx['redirect_http_to_https'] = true然后执行:
sudo gitlab-ctl reconfigure sudo gitlab-ctl restart nginx6. 日常维护实战
6.1 备份策略设计
推荐采用三级备份方案:
# 本地每日备份(保留7天) 0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1 && find /var/opt/gitlab/backups -mtime +7 -delete # 远程备份脚本(需提前配置ssh密钥) #!/bin/bash BACKUP_FILE=$(ls -t /var/opt/gitlab/backups/*_gitlab_backup.tar | head -1) scp $BACKUP_FILE backupuser@remote-server:/gitlab-backups/$(date +\%Y\%m\%d).tar6.2 版本升级流程
遵循小版本升级原则:
# 查看当前版本 sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION # 升级步骤 sudo apt update sudo apt install gitlab-ce sudo gitlab-ctl reconfigure sudo gitlab-rake db:migrate大版本升级(如15.x→16.x)需要参考官方升级路径文档,不可跨版本升级
7. 故障排查手册
7.1 服务启动失败排查
现象:sudo gitlab-ctl status显示部分服务未运行
排查步骤:
# 查看具体错误日志 sudo journalctl -u gitlab-runsvdir -n 50 # 检查组件日志 sudo gitlab-ctl tail postgresql sudo gitlab-ctl tail puma # 常见修复命令 sudo gitlab-ctl reconfigure sudo gitlab-ctl restart7.2 502错误处理方案
可能原因及解决方案:
内存不足:
free -h sudo gitlab-ctl stop sidekiq sudo gitlab-ctl restart pumaPuma进程崩溃:
sudo gitlab-ctl restart puma sudo gitlab-rake cache:clearNginx配置错误:
sudo nginx -t sudo gitlab-ctl restart nginx
8. 性能监控方案
8.1 内置Prometheus配置
启用详细监控指标:
# 在gitlab.rb中 prometheus['enable'] = true prometheus['listen_address'] = 'localhost:9090' prometheus['monitor_kubernetes'] = false # 非K8s环境关闭访问方式:
http://your-server-ip/-/metrics8.2 关键指标监控项
- 内存使用:
process_resident_memory_bytes - HTTP请求延迟:
http_request_duration_seconds_bucket - Sidekiq队列积压:
sidekiq_enqueued_jobs
9. 高级功能配置
9.1 LDAP集成实战
# 示例:OpenLDAP配置 gitlab_rails['ldap_enabled'] = true gitlab_rails['ldap_servers'] = { 'main' => { 'label' => 'LDAP', 'host' => 'ldap.example.com', 'port' => 636, 'uid' => 'uid', 'bind_dn' => 'cn=admin,dc=example,dc=com', 'password' => 'your_ldap_password', 'encryption' => 'simple_tls', 'verify_certificates' => true, 'active_directory' => false, 'base' => 'ou=people,dc=example,dc=com' } }9.2 CI/CD Runner配置
# 添加官方源 curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash # 安装特定版本 sudo apt install gitlab-runner=16.5.0 # 注册Runner sudo gitlab-runner register \ --url "http://your-server-ip/" \ --registration-token "PROJECT_REGISTRATION_TOKEN" \ --executor "shell" \ --description "primary-runner"10. 终极优化方案
10.1 数据库分离部署
当用户超过100人时,建议将PostgreSQL分离部署:
# 在gitlab.rb中配置外部数据库 gitlab_rails['db_adapter'] = 'postgresql' gitlab_rails['db_encoding'] = 'unicode' gitlab_rails['db_host'] = 'postgresql-server-ip' gitlab_rails['db_port'] = 5432 gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_password'] = 'your_password'10.2 对象存储配置
使用S3兼容存储替代本地存储:
gitlab_rails['object_store']['enabled'] = true gitlab_rails['object_store']['connection'] = { 'provider' => 'AWS', 'aws_access_key_id' => 'your_key', 'aws_secret_access_key' => 'your_secret', 'region' => 'us-east-1', 'endpoint' => 'https://s3.example.com' } gitlab_rails['object_store']['objects']['artifacts']['bucket'] = 'gitlab-artifacts'经过以上优化,我们的GitLab实例已经可以支撑500+用户的团队协作。在实际运维中,建议每月检查一次磁盘空间和备份完整性,每季度进行一次安全审计。