【GitLab】从零开始:一站式安装与高效配置实战
1. 为什么你需要自建GitLab从零开始的决策如果你是一个开发者或者是一个小团队的负责人你可能已经习惯了使用GitHub、Gitee这样的公共代码托管平台。它们确实方便开箱即用。但在我过去十年的项目经历里尤其是涉及到一些内部工具、核心业务代码或者对代码安全、访问速度有更高要求的时候自建一个GitLab就变得非常有必要了。简单来说GitLab就是一个可以部署在你自家服务器上的“私有GitHub”。它不仅仅是一个Git仓库管理器更是一个完整的DevOps平台。想象一下你不仅能把代码安全地存在自己的机器上还能在同一个平台上完成代码审查、自动化测试、持续集成/持续部署CI/CD甚至项目管理。所有数据都在你的掌控之中访问速度飞快也不用担心服务商的政策变化。对于初创团队、企业内部研发或者任何希望将开发流程规范化的场景自建GitLab都是一个性价比极高的选择。很多朋友一开始会觉得搭建和维护这样一个服务很复杂是个“大工程”。其实不然特别是现在GitLab提供了非常成熟的Omnibus安装包整个过程已经变得相当标准化和自动化。这篇文章我就会手把手带你用一个最常见的Linux服务器比如CentOS、Rocky Linux、Ubuntu从零开始把GitLab稳稳当当地跑起来并且把几个最影响使用体验的关键配置给调优好。你不需要是系统专家跟着我的步骤走踩过的坑我会提前告诉你保证你能搭建出一个生产环境可用的GitLab服务。2. 安装前的准备工作系统与环境检查在开始敲命令之前充分的准备工作能避免后面一大半的麻烦。这一步咱们不赶时间检查清楚。2.1 硬件与系统要求首先你的服务器得够GitLab“吃”。官方有最低配置但我以实战经验告诉你低于这个配置体验会非常糟糕。CPU至少2核。4核或以上是推荐配置能保证Web界面和后台任务运行流畅。内存这是最关键的部分。官方最低要求是4GB但我强烈建议至少准备8GB。4GB内存的机器在安装和运行GitLab时会频繁使用Swap分区导致整个系统卡顿安装过程可能长达数小时甚至失败。8GB内存是一个流畅体验的起点。存储至少需要4GB的可用空间来安装GitLab自身。但请记住这还不包括你的代码仓库数据。建议预留50GB以上的磁盘空间并确保是SSD硬盘这对仓库的读写性能提升巨大。操作系统主流Linux发行版基本都支持。我后面演示会以Rocky Linux 8/9或CentOS 7/8系列为主因为它们在服务器领域非常普遍。Ubuntu 20.04/22.04也是绝佳的选择命令稍有不同我会在关键处指出。你可以使用free -h查看内存df -h查看磁盘空间nproc或lscpu查看CPU核心数。2.2 网络与防火墙配置GitLab默认会使用几个端口我们需要确保它们能被访问。HTTP端口80用于Web界面访问。HTTPS端口443如果你配置了SSL证书。SSH端口22用于Git的克隆、推送等操作注意这会和你系统原有的SSH服务端口冲突需要特别处理后面会讲。如果你的服务器开启了防火墙如firewalld或ufw现在就需要放行这些端口。以firewalldCentOS/Rocky Linux默认为例sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps # 如果你的GitLab SSH打算用默认22端口不推荐见后文也需要添加 # sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload对于Ubuntu的ufw命令是这样的sudo ufw allow http sudo ufw allow https sudo ufw reload2.3 配置软件源与安装必要依赖为了让安装过程更顺畅我们先更新系统并安装一些基础工具。# 对于 CentOS/Rocky Linux/AlmaLinux sudo dnf update -y sudo dnf install -y curl policycoreutils-python-utils openssh-server # 启动并设置SSH服务开机自启通常默认已启动 sudo systemctl enable sshd sudo systemctl start sshd # 对于 Ubuntu/Debian sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl这里安装的policycoreutils-python-utilsUbuntu上是policycoreutils是SELinux相关的工具在某些配置下需要。openssh-server是必须的因为Git操作依赖SSH协议。3. 两种主流安装方式详解GitLab安装主要有两种推荐方式使用官方Omnibus安装包和使用Docker。前者更直接集成度更高适合大多数生产环境后者更灵活隔离性好适合快速体验和特定部署场景。我重点讲第一种因为它是官方主推且最稳定的方式。3.1 方式一使用Omnibus安装包推荐这种方式会把GitLab及其所有依赖Nginx, PostgreSQL, Redis等打包安装和管理非常省心。第一步添加GitLab官方软件仓库我们需要将GitLab的软件源添加到系统的包管理器里。这里有一个重要选择你可以使用国际版的源也可以使用针对国内网络优化过的镜像源。如果你服务器在国外或者网络条件好用官方源即可。如果在国内强烈建议使用镜像源加速下载。使用国际版源社区版CEcurl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bashUbuntu系统将.rpm.sh换成.deb.sh使用国内镜像源如极狐GitLab镜像速度更快curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash这个脚本会自动为你配置好极狐GitLabGitLab JH版与国际版CE功能基本一致的yum或apt源。第二步执行安装命令这是最关键的一步。我们需要在安装命令中指定一个环境变量EXTERNAL_URL这是你未来访问GitLab的地址。# 将下面的 http://your-server-ip-or-domain 替换成你的实际IP或域名 # 如果你还没有域名直接使用服务器的公网IP例如 http://192.168.1.100 sudo EXTERNAL_URLhttp://your-server-ip-or-domain dnf install -y gitlab-ce对于Ubuntu将dnf换成apt-get对于极狐镜像包名可能是gitlab-jh。重要提示EXTERNAL_URL一定要写对它会被写入配置文件如果写错了后面修改虽然可以但需要重新配置。如果暂时不确定就用服务器的IP地址。安装过程会持续一段时间因为它要下载几百MB的包并解压安装。请耐心等待。第三步初始配置与启动安装完成后我们需要运行一个重配置命令它会根据你提供的EXTERNAL_URL和系统环境生成最终的配置文件并启动所有服务。sudo gitlab-ctl reconfigure这个过程可能会花5到15分钟屏幕上会滚动很多Chef配置管理工具的输出信息这是正常的。当最后出现gitlab Reconfigured!时就表示成功了。3.2 方式二使用Docker安装如果你熟悉Docker这种方式非常快捷且易于维护和升级。# 1. 创建用于持久化存储的目录 export GITLAB_HOME/srv/gitlab sudo mkdir -p $GITLAB_HOME/{config,logs,data} # 2. 运行GitLab容器 sudo docker run --detach \ --hostname your-server-ip-or-domain \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ gitlab/gitlab-ce:latest参数解释--hostname同样设置为你的IP或域名。--publish端口映射。这里将容器的80、443映射到主机但将容器的22端口映射到了主机的2222端口。这是因为主机本身通常已经占用了22端口SSH服务。这样你克隆仓库时就需要使用ssh://gityour-domain:2222/group/project.git这样的地址。--volume将配置、日志、数据挂载到主机目录防止容器删除后数据丢失。--shm-size增加共享内存某些功能如GitLab Pages需要。Docker方式启动后同样需要等待几分钟让服务初始化完成。你可以用sudo docker logs -f gitlab查看启动日志。4. 首次登录与安全加固安装配置完成后打开浏览器访问你设置的EXTERNAL_URL例如http://你的IP。4.1 获取初始密码你会看到一个设置管理员密码的页面。等等密码从哪里来对于Omnibus安装初始密码在安装过程中自动生成并保存在一个文件里sudo cat /etc/gitlab/initial_root_password你会看到一行类似Password: xxxxxxxx的内容这个就是root用户的初始密码。这个文件24小时后会自动删除所以登录后第一件事就是改密码。对于Docker安装可以在容器内执行sudo docker exec -it gitlab grep Password: /etc/gitlab/initial_root_password4.2 修改root密码与语言设置使用用户名root和上面找到的密码登录。点击右上角用户头像 -Edit profile。在左侧菜单进入Password输入当前密码和新密码完成修改。还是在Edit profile页面找到Preferences向下滚动找到Language选择“简体中文”保存。界面就会立刻切换成中文对新手友好多了。4.3 至关重要的SSH端口冲突解决这是一个必踩的坑也是很多教程没讲清楚的地方。Linux服务器的22端口默认被SSH守护进程sshd占用。而GitLab的Git操作也需要使用SSH协议默认也是22端口。方案一推荐修改GitLab的SSH端口这是最清晰、干扰最小的方式。我们让GitLab用另一个端口比如2222。sudo vim /etc/gitlab/gitlab.rb找到# gitlab_rails[gitlab_shell_ssh_port] 22这一行取消注释并将22改为2222gitlab_rails[gitlab_shell_ssh_port] 2222保存后重新配置并重启sudo gitlab-ctl reconfigure sudo gitlab-ctl restart别忘了在防火墙中放行2222端口sudo firewall-cmd --permanent --add-port2222/tcp sudo firewall-cmd --reload以后克隆项目时地址格式为ssh://git你的域名:2222/组名/项目名.git或者在SSH配置文件中为你的域名配置一个特定的端口。方案二修改系统SSH端口谨慎如果你不想动GitLab可以修改系统sshd的端口。但这会影响你平时登录服务器的方式需要谨慎操作。修改/etc/ssh/sshd_config中的Port行然后重启sshd服务。5. 核心配置调优让GitLab更好用默认安装的GitLab可以运行但通过修改主配置文件/etc/gitlab/gitlab.rb并进行一些调优能获得更稳定、更高效的体验。5.1 基础性能调优对于资源有限的服务器可以调整一些组件的资源消耗。编辑/etc/gitlab/gitlab.rb# 限制PumaRuby应用服务器的工作进程和线程数降低内存消耗 puma[worker_processes] 2 # 默认是CPU核心数可适当调低 puma[min_threads] 2 puma[max_threads] 4 # 限制Sidekiq后台任务处理器的并发数 sidekiq[max_concurrency] 10 # 调整PostgreSQL和Redis的内存设置如果服务器内存小于8G尤其需要关注 # postgresql[shared_buffers] 256MB # redis[maxmemory] 512mb # redis[maxmemory_policy] allkeys-lru修改后执行sudo gitlab-ctl reconfigure使配置生效。5.2 邮件服务器配置GitLab发送通知如注册确认、流水线状态需要SMTP服务器。没有配置邮件很多协作功能会受限。以配置腾讯企业邮为例其他SMTP服务类似gitlab_rails[smtp_enable] true gitlab_rails[smtp_address] smtp.exmail.qq.com gitlab_rails[smtp_port] 465 gitlab_rails[smtp_user_name] your-emailyour-domain.com gitlab_rails[smtp_password] your-password gitlab_rails[smtp_domain] your-domain.com gitlab_rails[smtp_authentication] login gitlab_rails[smtp_enable_starttls_auto] true gitlab_rails[smtp_tls] true gitlab_rails[gitlab_email_from] your-emailyour-domain.com gitlab_rails[gitlab_email_reply_to] noreplyyour-domain.com配置完成后sudo gitlab-ctl reconfigure然后可以在管理后台管理区域 - 设置 - 系统钩子和邮件服务器测试发送测试邮件验证。5.3 备份与恢复策略数据无价定期备份是铁律。GitLab Omnibus包提供了简单的备份命令# 执行备份默认会备份到 /var/opt/gitlab/backups/ 目录生成一个类似 1715612345_2024_05_13_15.0.0_gitlab_backup.tar 的文件 sudo gitlab-backup create你需要将这个备份文件拷贝到其他安全的地方如另一台服务器、云存储。建议编写一个简单的Shell脚本结合cron定时任务实现自动备份和异地传输。恢复备份也很简单注意恢复操作会覆盖当前数据# 首先停止相关服务 sudo gitlab-ctl stop puma sudo gitlab-ctl stop sidekiq # 执行恢复将 TIMESTAMP 替换为备份文件名中的时间戳 sudo gitlab-backup restore BACKUP1715612345_2024_05_13_15.0.0 # 重新配置并启动 sudo gitlab-ctl reconfigure sudo gitlab-ctl restart6. 日常维护与故障排查入门服务跑起来不是终点日常维护才能长治久安。常用管理命令sudo gitlab-ctl status查看所有组件状态。sudo gitlab-ctl tail查看所有组件的实时日志。sudo gitlab-ctl tail nginx只看Nginx的日志。sudo gitlab-ctl restart重启所有GitLab服务。sudo gitlab-ctl stop停止所有服务。遇到页面无法访问首先sudo gitlab-ctl status看看是不是有服务没起来。最常见的是内存不足导致某个进程崩溃。检查/var/log/gitlab/下相关组件的日志文件。我之前就遇到过一台4GB内存的机器Sidekiq经常被OOM Killer干掉升级到8GB后问题消失。忘记管理员密码如果root密码丢失且没有其他管理员账户可以通过Rails控制台重置sudo gitlab-rails console # 在控制台内执行 user User.find_by(username: root) user.password 你的新密码 user.password_confirmation 你的新密码 user.save! exit升级GitLab版本小版本升级如15.0.0到15.0.1通常比较安全。建议先查看官方升级文档做好备份然后使用包管理器升级# CentOS/Rocky Linux sudo dnf update gitlab-ce # Ubuntu sudo apt-get update sudo apt-get install gitlab-ce升级后系统会自动运行gitlab-ctl reconfigure。大版本升级如14.x到15.x需要更详细的规划务必遵循官方的版本升级路径指南。经过以上步骤你应该已经拥有了一个完全在自己掌控之下、运行顺畅的GitLab服务。从代码托管到CI/CD这个平台将成为你团队研发效能的核心引擎。记住搭建只是第一步根据团队的使用习惯去探索和配置CI/CD流水线、容器注册表、安全扫描等高级功能才能真正释放GitLab的全部潜力。如果在实践中遇到任何具体问题多查阅官方文档和社区大部分坑都有现成的解决方案。

相关新闻

SOONet部署教程(CentOS版):系统依赖配置、GCC版本兼容、CUDA驱动检查

SOONet部署教程(CentOS版):系统依赖配置、GCC版本兼容、CUDA驱动检查

SOONet部署教程(CentOS版):系统依赖配置、GCC版本兼容、CUDA驱动检查 1. 项目简介 SOONet是一个基于自然语言输入的长视频时序片段定位系统。它能通过一次网络前向计算,快速准确地定位视频中与文本描述相关的片段。这个系统在处…

2026/5/17 6:22:57 阅读更多 →
医疗级PPG信号处理指南:如何用Python实现Sukor六特征质量评估

医疗级PPG信号处理指南:如何用Python实现Sukor六特征质量评估

医疗级PPG信号处理指南:如何用Python实现Sukor六特征质量评估 在可穿戴健康监测设备日益普及的今天,光电容积脉搏波(PPG)信号已成为心率、血氧饱和度等关键生理参数监测的核心数据源。然而,从手腕、耳垂或指尖采集到的…

2026/5/17 6:22:56 阅读更多 →
DCT-Net效果展示:真人照片变动漫作品集

DCT-Net效果展示:真人照片变动漫作品集

DCT-Net效果展示:真人照片变动漫作品集 1. 惊艳的二次元转换效果 DCT-Net人像卡通化模型能够将普通的人物照片瞬间转换为精美的二次元风格图像,效果令人惊艳。这个基于深度学习的模型专门为人像卡通化任务设计,通过先进的生成对抗网络技术&…

2026/7/4 21:42:06 阅读更多 →

最新新闻

符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

很多从事胡萝卜规模化种植,特别是瞄准出口市场的技术负责人和种植户,经常面临一个核心困境:如何在海量的种子品种中,精准筛选出兼具抗逆性、商品性和高产潜力的品种,并构建一套可复制的稳产方案?市面上的营…

2026/7/5 3:04:55 阅读更多 →
大气散射模型 OpenCV 4.8 去雾实战:单张图像 0.5 秒内透射率图估计

大气散射模型 OpenCV 4.8 去雾实战:单张图像 0.5 秒内透射率图估计

基于暗通道先验的实时去雾算法:OpenCV 4.8 工程实现详解清晨的浓雾常常让摄影作品失去应有的色彩与细节,而计算机视觉领域的去雾算法正是解决这一问题的利器。本文将带您深入浅出地实现一个基于暗通道先验的高效去雾系统,仅用不到0.5秒即可完…

2026/7/5 3:04:55 阅读更多 →
靠谱的区域教育一体化管理平台哪个排名高

靠谱的区域教育一体化管理平台哪个排名高

在当今信息化时代,教育行业的数字化转型已经成为必然趋势。区域教育一体化管理平台作为提升教育管理水平、优化教育资源配置的重要工具,受到了越来越多教育机构的关注。然而,在众多的教育管理平台中,如何选择一个既可靠又高效的平…

2026/7/5 3:04:55 阅读更多 →
多重共线性实战指南:识别、归因与工程化解法

多重共线性实战指南:识别、归因与工程化解法

1. 项目概述:为什么多重共线性不是“错误”,而是数据在说话你刚跑完一个线性回归模型,R高达0.92,F检验p值小于0.001,一切看起来都很漂亮——直到你扫了一眼系数表:某个自变量的系数是3.7,标准误…

2026/7/5 3:02:54 阅读更多 →
云原生技术28-K8s排障实战:20个常见问题的快速定位与解决,从CrashLoopBackOff到Running的完整指南

云原生技术28-K8s排障实战:20个常见问题的快速定位与解决,从CrashLoopBackOff到Running的完整指南

1、AI程序员系列文章 2、AI面试系列文章 3、AI编程系列文章 目录 排障思维:从"盲人摸象"到"精准定位" 2.1 自上而下 vs 自下而上 2.2 假设验证法 2.3 二分法定位 Pod问题:四大金刚的"病历本" 3.1 CrashLoopBackOff&…

2026/7/5 3:00:53 阅读更多 →
Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界

Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界

聊《Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要这篇面向想用 AI 提升研发效率的开发者和技术负责人,但不会把“…

2026/7/5 3:00:53 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻