架构选型与规划
高可用主备架构方案
企业级GitLab高可用部署主要有以下几种主流方案:
方案一:DRBD + Pacemaker + Corosync(主备模式)
该架构为Active/Passive(主/备)模式,只有主节点运行GitLab服务并挂载存储,备节点通过DRBD实时同步数据。当主节点宕机时,Pacemaker自动将VIP和存储切换到备节点。此方案适合中小型企业,硬件成本低,约比单节点增加40%。
方案二:GitLab Geo(地理分布式)
GitLab企业版(EE)原生提供的Geo功能,可实现完整的实例级复制。主站点可读写,辅助站点只读,支持自动故障转移。需要GitLab Premium或Ultimate订阅。
方案三:分层高可用架构(官方参考架构)
将GitLab各组件拆分部署:前端负载均衡(HAProxy/Nginx)+ 多个GitLab应用节点 + PostgreSQL集群(Patroni+etcd)+ Redis Sentinel + 共享存储(NFS/Ceph)。适合大规模企业。
本文推荐方案一(DRBD + Pacemaker) ,性价比高、部署相对简单,适合大多数企业场景。如团队规模超过200人,建议升级到方案三。
1.2 硬件配置建议
| 团队规模 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| 5-20人 | 4核 | 8GB | 100GB SSD | 100Mbps |
| 20-100人 | 8核 | 16GB | 500GB NVMe SSD | 1Gbps |
| 100人以上 | 16核+ | 32GB+ | RAID10 SSD阵列 | 多网卡绑定 |
⚠️ 生产环境强烈建议使用SSD存储,GitLab官方建议禁用swap分区。
1.3 服务器规划示例
| 角色 | 主机名 | IP地址 | 配置 |
|---|---|---|---|
| 主节点 | gitlab-primary | 192.168.1.10 | 8核16G + 500GB SSD |
| 备节点 | gitlab-secondary | 192.168.1.11 | 8核16G + 500GB SSD |
| 虚拟IP(VIP) | gitlab.local | 192.168.1.100 | 浮动IP |
二、基础环境准备(两台节点均需执行)
2.1 系统更新与依赖安装
bash
# 更新系统 sudo apt update && sudo apt upgrade -y # 安装必要依赖 sudo apt install -y \ curl \ openssh-server \ ca-certificates \ tzdata \ perl \ postfix \ wget \ gnupg \ lsb-release \ software-properties-common
安装postfix时,如选择“Internet Site”,输入你的邮件域名;如暂不需要邮件功能可跳过。
2.2 配置防火墙
bash
sudo ufw allow 22/tcp # SSH访问 sudo ufw allow 80/tcp # HTTP服务 sudo ufw allow 443/tcp # HTTPS服务 sudo ufw allow 9090/tcp # Prometheus监控(可选) sudo ufw enable
2.3 系统优化配置
bash
# 禁用swap(GitLab官方建议) sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 配置时区 sudo timedatectl set-timezone Asia/Shanghai # 优化系统文件句柄限制 echo "fs.file-max = 65536" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
2.4 配置SSH免密登录(主备节点间)
bash
# 在主节点生成SSH密钥 ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa # 将公钥复制到备节点 ssh-copy-id root@192.168.1.11 # 同样在备节点生成并复制到主节点 ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa ssh-copy-id root@192.168.1.10
三、安装GitLab
3.1 添加GitLab官方仓库
使用官方源(国外服务器较快):
bash
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
使用国内清华镜像源(推荐国内用户):
bash
# 信任GitLab GPG公钥 curl -fsSL https://packages.gitlab.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg # 添加源 echo "deb [signed-by=/usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-ee.list sudo apt update
💡 如使用社区版(CE),将上述命令中的
gitlab-ee替换为gitlab-ce。企业版(EE)提供更多高可用特性,生产环境建议使用企业版。
3.2 安装GitLab
bash
# 安装企业版(设置外部访问URL) sudo EXTERNAL_URL="https://gitlab.local" apt-get install -y gitlab-ee
如果尚未配置域名和SSL证书,可先使用IP地址:
EXTERNAL_URL="http://192.168.1.10"
3.3 初始配置
bash
# 编辑主配置文件 sudo vim /etc/gitlab/gitlab.rb
基础配置项:
ruby
# 外部访问地址 external_url 'https://gitlab.local' # 时区 gitlab_rails['time_zone'] = 'Asia/Shanghai' # 数据存储目录(后续将迁移到共享存储) git_data_dirs({ "default" => { "path" => "/var/opt/gitlab/git-data" } }) # 邮件配置(可选) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.your-email.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "gitlab@your-email.com" gitlab_rails['smtp_password'] = "your-password" gitlab_rails['smtp_domain'] = "your-email.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['gitlab_email_from'] = 'gitlab@your-email.com'3.4 应用配置并启动
bash
