虚拟机上完全能搭GitLab,而且只要配置给足、优化做对,跑个几十人的团队项目绰绰有余,关键就看你愿不愿意花半小时把资源规划和部署细节理清楚。
很多朋友第一次接触GitLab,第一反应是直接买台服务器,但如果你是个人学习、公司内网测试环境,或者想在公司弄个私有代码仓库,用虚拟机搭建GitLab反而更灵活,成本也低得多,今天这篇就聊聊在虚拟机里装GitLab那点事,从配置怎么选、步骤怎么走,到卡了怎么优化,一次说透。
虚拟机安装gitlab需要多大内存才流畅
内存是虚拟机跑GitLab的第一道坎,也是大多数人栽跟头的地方,GitLab官方文档推荐的配置是4GB内存起步,这是社区版的底线,但“起步”和“流畅”是两回事。
不同使用场景下的配置参考
- 个人学习用(1-3个用户):2GB内存勉强能跑,但会频繁触发swap,操作卡顿明显,行业共识认为,这个场景下4GB内存是甜点位,日常操作基本无感。
- 小团队内网自用(10人以内):建议6GB到8GB内存,CPU分配4核,磁盘走SSD,这个配置下跑CI/CD任务也不会太吃力。
- 生产环境或大团队:别折腾虚拟机了,直接上独立物理机或云服务器,虚拟机套虚拟化的性能损耗,在并发上去之后会非常明显。
磁盘方面,GitLab本身占空间不大,但仓库存储和备份会快速膨胀,建议给虚拟机分配至少50GB动态磁盘,如果你打算跑CI/CD构建,那100GB起步更稳妥。
CPU和虚拟化嵌套的注意事项
VMware和VirtualBox都支持虚拟化嵌套,但性能上有点区别,VMware Workstation对嵌套虚拟化的支持更成熟,VirtualBox偶尔会有CPU扇区分配不均的问题,如果你在WSL2或Hyper-V里再套虚拟机,网速和磁盘IO会进一步打折扣。
虚拟机搭建gitlab完整步骤
部署系统这一步,我直接给你一套经过验证的操作路径,别折腾源码安装,官方Omnibus包是最省心的方案,这也是业内专家指出最推荐的方式。

第一步:准备虚拟机系统
- 创建虚拟机时选CentOS 7或Ubuntu 22.04,两者选一个就行,下面命令以CentOS 7为例
- 网络模式选桥接或NAT,但要注意:NAT模式下局域网内其他电脑访问虚拟机里的GitLab需要配端口转发,桥接模式则没有这个问题
- 关闭虚拟机内的防火墙初始配置,或者在防火墙里放行HTTP和HTTPS端口,后续遇到访问不了的问题大概率就出在这
第二步:安装并配置GitLab
进入虚拟机的终端,依次执行(以CentOS 7为例,Ubuntu则用apt):
sudo yum install -y curl policycoreutils openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo yum install -y postfix sudo systemctl enable postfix curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://你的虚拟机IP" yum install -y gitlab-ce
安装过程中最常踩的坑就是域名和IP的绑定,EXTERNAL_URL这个参数直接决定你网页里显示的克隆地址,如果你不填或填错,后面所有项目的SSH和HTTP链接都是错的,操作路径全对也白搭。
第三步:初始化并登录
sudo gitlab-ctl reconfigure sudo gitlab-ctl status
第一次reconfigure耗时较长,属于正常现象,完成后浏览器访问你设置的IP,默认管理员账号是root,初始密码在/etc/gitlab/initial_root_password这个文件里,用cat命令打开就能看到,登录后建议立刻改掉。
虚拟机跑gitlab卡顿?优化方案
装好了、能登录了,结果发现页面加载慢、push代码半天没反应,很多人的第一反应是加内存,但实际上,大部分卡顿跟内存无关,而是GitLab的默认配置不适合虚拟机这种资源受限环境。
关掉不用的组件

GitLab是个全家桶,默认把监控、追踪、Prometheus、Grafana全给你装上了,小内存机器跑这一堆东西,不卡才怪。
编辑/etc/gitlab/gitlab.rb文件,把下面这些行取消注释并改为false:
prometheus_monitoring['enable'] = false grafana['enable'] = false gitlab_rails['monitoring_whitelist'] = ['127.0.0.1']
改完执行sudo gitlab-ctl reconfigure,内存占用会掉一大截。
调整Puma和Sidekiq线程数
puma['worker_processes'] = 2 puma['min_threads'] = 1 puma['max_threads'] = 2 sidekiq['max_concurrency'] = 5
你没看错,这些数字看着寒酸,但对于虚拟机里的GitLab,少即是多,盲目加大threads只会让CPU在上下文切换上耗尽力气,页面响应反而更慢。
开启系统swap空间
虚拟机内存不够时,swap是保命符,但注意,swap要放在SSD介质上,机械硬盘上的swap会慢到怀疑人生。
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
gitlab虚拟机备份与恢复实操
备份这事,网上教程一抓一大把,但大多是复制粘贴版的“官方三行命令”,实际上虚拟机里的GitLab备份,最好连虚拟机快照一起打,因为GitLab自带的备份机制只管数据库和仓库文件,不管你改过的配置文件/etc/gitlab/gitlab.rb。
手动备份三步走
- 执行
sudo gitlab-backup create,备份文件会生成在/var/opt/gitlab/backups/目录下 - 另外把
/etc/gitlab/目录整个打包一份,tar命令或者直接复制都行 - 把这两个东西一起拷到别的机器或者网盘里,别放在同一台虚拟机上
恢复的时候,先装一个相同版本的GitLab,然后停掉相关服务,把仓库备份包放回备份目录,执行

sudo gitlab-backup restore,再把配置文件覆盖回/etc/gitlab/,最后reconfigure收尾。
升级时的坑
GitLab版本升级不能跨大版本跳,比如11.0直接升13.0,中间会报错,你只能在虚拟机上镜像当前版本,逐步升级,如果虚拟机配置不高,升级过程中CPU会长时间跑满,这是正常现象,但要注意磁盘剩余空间,升级时的临时文件很容易把根分区塞满。
结尾说一句:虚拟机不是生产环境的第一选择,但它绝不是什么玩具,先把压测、备份、快照恢复这些流程在虚拟机上玩明白了,再上生产,你会发现踩的坑反而少很多。
虚拟机搭建gitlab常见问题解答
虚拟机里GitLab忘记root密码怎么办
在终端执行sudo gitlab-rails console进入命令行(先执行sudo gitlab-rails dbconsole也可以),然后找到root用户并重置密码具体命令路径为:输入u = User.where(username: 'root').first,再输入u.password = '新密码'和u.save!,退出控制台后重启GitLab服务即可生效。
同一台虚拟机能同时装GitLab和Jenkins吗
内存足够大(16GB以上)确实可以,但强烈不建议在一台虚拟机上混装,GitLab是Ruby on Rails应用,Jenkins是Java应用,两者的JVM和垃圾回收机制互相争抢CPU资源,你还要处理两套端口映射和Tomcat冲突问题,分开两台虚拟机,或者Docker方式隔离部署,维护成本会更低。
租用一台2核4G的云服务器装GitLab会不会卡顿
如果只跑GitLab自身、不跑CI/CD流水线,2核4G勉强够用但体验一般,加载页面会有明显延迟,内存占用会持续在90%以上,并且默认配置下Rails进程容易报OOM错误,关掉监控组件、调低Puma线程数之后,日常使用问题不大,但在执行大规模git clone操作时仍会出现短暂无响应,统计数据表明绝大多数个人博客网站跑GitLab都选择4G内存起步,推荐你至少选择4核8G的配置才能获得较流畅的体验。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/917413.html


评论列表(3条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于内存起步的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@雪雪6720:读了这篇文章,我深有感触。作者对内存起步的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于内存起步的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!