温馨提示×

GitLab在Debian上的集群部署方案是什么

小樊
44
2025-12-21 04:48:56
栏目: 智能运维

GitLab 在 Debian 上的集群部署方案

一、方案总览与适用场景

  • Debian 上,生产级 GitLab 集群通常采用“多实例 + 外部数据服务”的拆分架构:前端多台 GitLab Rails/Puma 节点通过 Nginx/HAProxy 对外提供 HTTP/HTTPSSSH 访问;后端将 PostgreSQLRedis 拆分到外部高可用集群;使用 Gitaly/Praefect 管理 Git 仓库存储与一致性;通过 Consul 做数据库服务发现(可选);静态资源与上传目录可用 NFS/GlusterFS 共享。该思路与 GitLab 官方参考架构一致,适用于从中小规模到上万用户级别的不同场景。

二、推荐架构与组件拆分

  • 前端层:至少 2 台 Debian 节点运行 GitLab(Omnibus 包),对外域名统一,内部通过 内部负载均衡器 分发到各节点 80/443(或 8080/443 视 SSL 终止位置而定)。SSH 建议保持 22 端口直连各节点或经四层 LB 转发。
  • 数据与状态层:
    • PostgreSQL:使用外部 HA 集群(主从/集群版),创建数据库 gitlabhq_production,并启用扩展 pg_trgm、btree_gist、plpgsql
    • Redis:使用外部高可用实例(建议 6.2+),不建议 Redis Cluster,采用主从 + 故障转移;配置合理驱逐策略(如 allkeys-lru)。
    • Gitaly/Praefect:Praefect 负责 Gitaly 集群的元数据与一致性,后端对接多个 Gitaly 节点;Praefect 自身需要 PostgreSQL 存储元数据。
  • 存储层:
    • 仓库、上传、制品等使用 NFS/GlusterFS 等共享存储,保证多节点一致性;或采用对象存储(如 S3 兼容)承载部分数据以减轻共享存储压力。
  • 服务发现与编排:
    • Consul 用于数据库等后端服务的服务发现(当使用外部托管数据库且需动态发现时)。
    • 也可采用 Kubernetes + Helm 部署 GitLab 组件(PostgreSQL/Redis/Gitaly/Praefect 以独立 StatefulSet/Operator 管理),适合大规模与云原生环境。

三、部署步骤与关键配置

  • 基础准备(所有节点)
    • 系统更新与依赖安装:sudo apt-get update && sudo apt-get upgrade -y,安装 curl、openssh-server、ca-certificates、postfix 等。
    • 添加 GitLab 仓库并安装 Omnibus 包:curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash,随后 sudo apt-get install gitlab-ce
    • 防火墙放行:至少放行 80/tcp、443/tcp、22/tcp(UFW 示例:sudo ufw allow 80,443,22/tcp && sudo ufw reload)。
  • 外部数据库与缓存(示例要点)
    • PostgreSQL:创建用户 gitlab 与数据库 gitlabhq_production,并启用扩展:CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS btree_gist; CREATE EXTENSION IF NOT EXISTS plpgsql;
    • Redis:部署高可用实例(单主或主从),版本建议 6.2+,设置合适 maxmemory-policy(如 allkeys-lru)。
  • GitLab 节点配置(/etc/gitlab/gitlab.rb 关键项)
    • 关闭内置服务并指向外部后端:
      • postgresql['enable'] = false
      • gitlab_rails['db_adapter'] = 'postgresql'; gitlab_rails['db_database'] = 'gitlabhq_production'; gitlab_rails['db_username'] = 'gitlab'; gitlab_rails['db_password'] = '***'; gitlab_rails['db_host'] = 'pg-vip.example.com'; gitlab_rails['db_port'] = 5432
      • redis['enable'] = false
      • gitlab_rails['redis_host'] = 'redis-vip.example.com'; gitlab_rails['redis_port'] = 6379
    • Gitaly/Praefect(示例):
      • Praefect:praefect['enable'] = true; praefect['database_host'] = 'pg-vip.example.com'; praefect['database_password'] = '***'
      • Gitaly:为每个 Gitaly 节点配置 gitaly['listen_addr']gitaly['storage'] 与认证令牌,并在 Praefect 的 virtual_storages 中注册。
    • 存储与共享:将 git_data_dirs 指向 NFS/GlusterFS 挂载点(如 /mnt/gitlab),确保权限为 998:998(GitLab 用户)。
    • 生效配置:sudo gitlab-ctl reconfigure(必要时 sudo gitlab-ctl restart)。
  • 负载均衡与入口
    • 外部 LB(HTTP/HTTPS/SSH):域名指向 LB,HTTP/HTTPS 转发至节点 80/443;SSH 可保持直连或经四层 LB 转发 22 端口。
    • 内部 LB:为 Rails、Gitaly、Praefect、PostgreSQL、Redis 配置内部访问入口,便于组件解耦与横向扩展。

四、验证与运维要点

  • 健康检查与连通性
    • 访问 https://gitlab.example.com 验证页面与登录;gitlab-rake gitlab:check 检查配置与组件状态。
    • 验证 Rails 到 PostgreSQL/Redis 的连通性、Praefect 到各 Gitaly 节点的健康状态与复制一致性。
  • 备份与恢复
    • 使用 gitlab-backup create 定期备份(含数据库与上传等),并将备份与配置文件纳入独立存储与保留策略;验证恢复演练。
  • 监控与告警
    • 启用内置 PrometheusAlertmanager,监控节点资源、请求延迟、Sidekiq 队列、PostgreSQL/Redis 关键指标,设置告警规则。
  • 安全加固
    • 全站 HTTPS(Let’s Encrypt 或企业 CA),限制管理 API 与数据库访问来源,定期升级 GitLab 与依赖组件,审计 SSH 与 Web 访问日志。

0