温馨提示×

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(在所有节点执行):
    1. 添加仓库并安装
      curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
      sudo yum install -y gitlab-ce
    2. 配置外部访问地址(示例为域名)
      sudo vim /etc/gitlab/gitlab.rb
      external_url ‘https://gitlab.example.com’
    3. 应用配置并启动
      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。

0