将GitLab部署在自己的CentOS服务器上,可以完全掌控代码仓库、用户权限与持续集成流水线。相比SaaS托管,自托管方案对数据位置、备份策略和网络隔离有更高的决定权,也适合内部网络或合规要求较严格的团队。CentOS系统以稳定性和长期维护著称,配合GitLab CE(社区版)能够快速搭建一套功能完整的代码协作平台。

一、安装前的准备工作
在CentOS上安装GitLab之前,需要确认服务器配置是否满足最低要求。GitLab官方建议内存至少4GB,实际生产环境推荐8GB以上。如果服务器只有2GB内存,安装后可能出现PostgreSQL或Redis频繁重启,甚至导致页面无响应。因此先检查系统资源和发行版版本,执行cat /etc/redhat-release确认CentOS版本,使用free -h查看内存和交换分区使用情况。
接下来安装基础依赖。OpenSSH用于Git over SSH协议,Postfix用于发送通知邮件,policycoreutils和curl也是安装脚本必需组件。对于不需要邮件通知的环境,可以选择安装Postfix并设置为仅本地发送,也可以完全跳过邮件配置。关闭SELinux并非必须,但需要确保防火墙端口已放行,否则外部无法访问GitLab页面。
sudo yum install -y curl policycoreutils openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo systemctl reload firewalld
如果系统启用了SELinux,GitLab安装脚本通常会自动处理相关策略,但若遇到权限异常,可以先临时切换为宽松模式进行排查,命令为sudo setenforce 0。完成依赖安装后,就可以添加GitLab官方仓库并开始安装核心组件。
二、安装GitLab CE并初始化
GitLab官方提供了自动添加仓库的脚本。执行下面的命令会下载并配置yum源,然后通过yum install gitlab-ce安装社区版。整个过程会安装Nginx、PostgreSQL、Redis等依赖,因此耗时取决于网络与磁盘性能。国内服务器可以先配置镜像加速,或使用官方源的重试机制。
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo yum install -y gitlab-ce
安装完成后,GitLab的配置文件位于/etc/gitlab/gitlab.rb。首次部署需要指定外部访问地址,否则默认使用主机名。可以通过编辑配置文件修改external_url,再将配置应用到所有服务。示例把访问地址设置为http://gitlab.ippipp.com,如果使用IP地址访问,直接写成http://192.168.1.100即可。
sudo sed -i "s|^external_url.*|external_url 'http://gitlab.ippipp.com'|g" /etc/gitlab/gitlab.rb sudo gitlab-ctl reconfigure
执行gitlab-ctl reconfigure会生成Nginx、数据库、Redis等服务的最终配置并重启相关进程。初次运行可能需要几分钟,完成后通过sudo gitlab-ctl status查看各组件的运行状态。浏览器访问配置的地址,首次会进入登录页,默认管理员用户名为root,密码需要从/etc/gitlab/initial_root_password读取。该文件在首次配置后24小时自动删除,因此登录后应尽快修改密码。
三、配置HTTPS与反向代理
对于生产环境,建议使用HTTPS保护GitLab访问流量。GitLab内置的Nginx可以直接配置SSL证书,也可以部署在独立Nginx之后作为反向代理。直接配置SSL时,需要准备域名证书和私钥,并将证书文件放到/etc/gitlab/ssl/目录,文件名需要与external_url中的域名保持一致。
修改/etc/gitlab/gitlab.rb,将external_url改为HTTPS地址,并开启HTTP到HTTPS重定向。证书路径也可以在配置文件中显式指定,这样即使文件名不完全匹配也能正常加载。修改完成后再次执行gitlab-ctl reconfigure,内置Nginx会监听443端口。
external_url "https://gitlab.ippipp.com" nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.ippipp.com.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.ippipp.com.key"
如果使用独立Nginx作为反向代理,需要将GitLab内置Nginx的监听地址改为仅本机端口,避免端口冲突。例如将nginx['listen_port']设为8080,外部Nginx将443端口流量转发到127.0.0.1:8080。这种模式更灵活,可以在外层统一管理多站点证书、访问日志和限流策略。无论采用哪种方式,都需要在防火墙中放行443端口,并确保证书文件权限正确。
四、性能调优与资源控制
GitLab由多个服务组成,默认配置偏向功能完整,对内存和CPU的占用较高。在4GB或8GB内存的服务器上,可以通过调整Puma或Unicorn工作进程数、Sidekiq并发数和PostgreSQL共享缓存来降低内存压力。旧版GitLab使用Unicorn作为应用服务器,新版本逐步切换到Puma。需要先确认自己安装的版本,再修改对应参数,避免配置项不生效。
以常见的内存优化为例,如果服务器内存为4GB,可以将Puma工作进程数设为2,Sidekiq并发数降为10,并限制PostgreSQL共享缓冲区。修改/etc/gitlab/gitlab.rb后执行重新配置,观察free -h和top的输出,避免频繁使用swap分区。
puma['worker_processes'] = 2 sidekiq['concurrency'] = 10 postgresql['shared_buffers'] = "256MB" postgresql['max_worker_processes'] = 4
除内存外,磁盘IO和数据库连接数也可能成为瓶颈。如果团队规模较大,可以进一步调整postgresql['max_connections']和puma['threads']参数,但需要在修改前做好压力测试。GitLab提供了gitlab-ctl tail命令查看实时日志,帮助定位性能问题。建议将GitLab数据目录放在独立的SSD或高性能磁盘上,避免与系统盘竞争IO。
五、备份恢复与升级维护
自托管平台的可持续运行依赖可靠的备份策略。GitLab提供了gitlab-backup命令,能够导出数据库、仓库、上传附件等核心数据。执行备份前应确保没有大量写入任务,备份文件默认存放在/var/opt/gitlab/backups目录。命令可以结合cron定时执行,例如每天凌晨执行一次,并将输出重定向到日志文件以便检查。
sudo gitlab-backup create sudo gitlab-ctl backup-etc
备份完成后,建议将备份文件同步到远程服务器或对象存储,避免单机故障导致数据永久丢失。恢复时需要先安装与备份相同版本的GitLab,然后将备份文件放入备份目录,并执行恢复命令。恢复过程会清除现有数据,因此必须谨慎操作,并在测试环境验证恢复流程。
sudo gitlab-backup restore BACKUP=备份文件时间戳 sudo gitlab-ctl restart
升级GitLab前应阅读官方升级路径,不能跨过太多大版本直接升级,否则可能导致数据库迁移失败。升级步骤通常是先备份,然后更新仓库中的GitLab版本并执行yum upgrade gitlab-ce,最后重新配置。升级后需要检查后台迁移任务是否完成,并验证登录、项目创建和持续集成流水线等核心功能。对于生产环境,可以先在克隆的测试实例上演练升级,再操作正式服务器。