CentOS上GitLab集群搭建指南
小樊
33
2025-12-07 14:02:19
架构与前置条件
- 架构建议:至少准备3台 CentOS 7/8 服务器(可横向扩展),前置Nginx/HAProxy 作为负载均衡,后端使用共享存储(NFS/GlusterFS/Ceph)统一存放仓库与附件,数据库与缓存采用集中式 PostgreSQL/Redis(主从或集群)以简化状态一致性。
- 端口规划:HTTP/HTTPS 为80/443,SSH 克隆端口建议使用2222(避免与系统 22 冲突),负载均衡器健康检查使用 HTTP。
- 基础依赖:确保系统已安装并启用 curl、openssh-server、postfix/wget 等组件,且防火墙放行 80/443/2222。
- 域名与证书:准备对外域名(如 gitlab.example.com),建议配置 Let’s Encrypt 或企业 CA 证书。
安装与基础配置
- 安装 GitLab CE(在所有节点执行):
- 添加仓库并安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install -y gitlab-ce
- 配置外部访问地址(示例为域名)
sudo vim /etc/gitlab/gitlab.rb
external_url ‘https://gitlab.example.com’
- 应用配置并启动
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
- 防火墙放行:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
- 邮件通知(可选,生产建议开启):
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “smtp.example.com”
gitlab_rails[‘smtp_port’] = 587
gitlab_rails[‘smtp_user_name’] = “ci@example.com”
gitlab_rails[‘smtp_password’] = “strongpass”
gitlab_rails[‘smtp_authentication’] = “login”
gitlab_rails[‘smtp_enable_starttls_auto’] = true
gitlab_rails[‘gitlab_email_from’] = ‘gitlab@example.com’
gitlab_rails[‘smtp_domain’] = “example.com”
高可用部署步骤
- 负载均衡器(Nginx 示例,VIP 或节点 IP 均可):
upstream gitlab {
server gitlab1.example.com;
server gitlab2.example.com;
server gitlab3.example.com;
}
server {
listen 80; server_name gitlab.example.com;
location / {
proxy_pass http://gitlab;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
建议启用 HTTPS 终止与 HTTP→HTTPS 跳转,健康检查路径可用 “/-/health”。
- 共享存储(NFS 示例,在共享存储服务器导出目录):
/srv/gitlab-share 10.0.0.0/24(rw,sync,no_root_squash,no_subtree_check)
在各 GitLab 节点挂载:
sudo mkdir -p /var/opt/gitlab
echo ‘10.0.0.10:/srv/gitlab-share /var/opt/gitlab nfs defaults 0 0’ | sudo tee -a /etc/fstab
sudo mount -a
- 数据库与缓存(集中式部署,示例为 PostgreSQL 主从):
- 主库:配置 postgresql.conf(listen_addresses、wal_level、max_wal_senders 等),pg_hba.conf 允许复制用户;创建复制账号与数据库。
- 从库:基础备份后配置 recovery.conf/standby.signal,连接主库进行流复制。
- GitLab 配置(/etc/gitlab/gitlab.rb):
gitlab_rails[‘db_adapter’] = “postgresql”
gitlab_rails[‘db_host’] = “db-primary.example.com”
gitlab_rails[‘db_port’] = 5432
gitlab_rails[‘db_database’] = “gitlabhq_production”
gitlab_rails[‘db_username’] = “gitlab”
gitlab_rails[‘db_password’] = “dbpass”
gitlab_rails[‘redis_host’] = “redis.example.com”
gitlab_rails[‘redis_port’] = 6379
完成后在各节点执行 sudo gitlab-ctl reconfigure。
验证与运维要点
- 健康检查与连通性:
- HTTP:curl -I https://gitlab.example.com/-/health 应返回 200
- SSH:git ls-remote ssh://git@gitlab.example.com:2222/group/project.git
- 日志与组件:
- 查看整体状态:sudo gitlab-ctl status
- 关键日志:/var/log/gitlab/gitlab-rails/production.log、/var/log/gitlab/nginx/access.log
- 备份与恢复:
- 备份:sudo gitlab-backup create(默认包含数据库与附件,若附件在 NFS,确保共享挂载正常)
- 恢复:先确保版本一致,再执行 sudo gitlab-backup restore BACKUP=timestamp
- 监控与告警:
- 启用内置 Prometheus/Grafana,添加节点与应用面板,设置磁盘、延迟、错误率阈值告警。
常见问题与优化
- SSH 端口冲突:保持系统 22 给 GitLab Shell,负载均衡与实例间使用 2222;Nginx 仅代理 HTTP/HTTPS。
- 附件/仓库一致性:务必使用共享存储或对象存储(如 S3 兼容)统一后端,避免各节点数据不一致。
- 数据库单点:生产建议 PostgreSQL 主从/流复制 或云托管数据库;Redis 建议集群/哨兵。
- 首次登录与密码:首次访问域名完成管理员初始化,若页面异常,检查 external_url、证书与防火墙。
- 升级与变更:遵循“先备份、再升级、滚动发布”的原则,变更 gitlab.rb 后执行 sudo gitlab-ctl reconfigure。