如何在CentOS上自托管GitLab代码平台?

来源:Apache教程作者:松本一香头衔:网络博主
导读:本期聚焦于松本一香创作的《如何在CentOS上自托管GitLab代码平台?》,敬请观看详情。自己掌控代码仓库、用户权限和持续集成流水线,是自托管GitLab相比SaaS方案最核心的优势。在CentOS这类稳定的Linux发行版上部署GitLab CE,无需额外购买商业订阅即可获得完整的仓库管理、合并请求和持续集成能力。本文围绕安装前依赖、软件源配置、首次初始化、HTTPS证书、内存调优以及备份恢复展开,提供可直接执行的命令和配置片段。安装过程会引入Nginx、PostgreSQL、Redis等组件,对服务器内存有一定要求,4GB以下环境建议先做资源评估。完成部署后还需要关注定时备份和安全更新,才能让代码平台长期稳定运行。

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

如何在CentOS上自托管GitLab代码平台?

一、安装前的准备工作

在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 -htop的输出,避免频繁使用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,最后重新配置。升级后需要检查后台迁移任务是否完成,并验证登录、项目创建和持续集成流水线等核心功能。对于生产环境,可以先在克隆的测试实例上演练升级,再操作正式服务器。

CentOSGitLab自托管修改时间:2026-08-22 19:51:54

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。