服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-11-08 简米科技 3,732 字 9 分钟阅读

虚拟机搭建Gerrit教程新手必看步骤有哪些?Gerrit安装配置常见问题怎么解决?

导读虚拟机搭建gerrit教程的核心思路很简单:准备一台干净的Linux虚拟机,装好JDK,下载gerrit.war,执行初始化命令,再配个反向代理就能用,整个过程熟练工半小时搞定,新手第一次折腾大概需要半天,主要卡在环境配置和权限问题上,下面这篇文章会把每一步的坑提前告诉你,照着做就能少走弯路,虚拟机搭建gerr……

虚拟机搭建gerrit教程的核心思路很简单:准备一台干净的Linux虚拟机,装好JDK,下载gerrit.war,执行初始化命令,再配个反向代理就能用。整个过程熟练工半小时搞定,新手第一次折腾大概需要半天,主要卡在环境配置和权限问题上,下面这篇文章会把每一步的坑提前告诉你,照着做就能少走弯路。

虚拟机搭建gerrit教程:新手必看步骤清单(快速上手版)

如果你之前没接触过Gerrit,先记住一句话:Gerrit本质是一个Java应用,它不依赖数据库(默认用H2),所以安装过程比GitLab轻量得多,新手按这个顺序操作就行:

  • 准备一台Ubuntu 20.04或22.04的虚拟机,内存建议2GB以上
  • 安装OpenJDK 11或17(Gerrit 3.6以后推荐Java 17)
  • 创建专用的gerrit系统用户,避免用root跑服务
  • 下载gerrit.war文件(版本选3.7.x或3.8.x稳定版)
  • 执行java -jar gerrit.war init交互式初始化
  • 配置Nginx或Apache做反向代理(为了让浏览器能通过域名访问)
  • 启动Gerrit,确认8080端口畅通

这套流程里,最容易翻车的是Java版本不匹配和存储路径权限问题,我见过不少新手卡在“初始化成功但启动失败”,最后发现是HOME目录没写权限,下面分模块拆解。

gerrit代码审查服务器怎么搭建?先准备虚拟机环境

搭建gerrit前,虚拟机本身要满足三个条件:能联网、静态IP、时间同步,时间不同步会导致SSH认证和HTTP请求报错,这是很多新手忽略的点。

虚拟机配置给多少内存才够用?

行业共识认为,Gerrit在2GB内存下可以流畅支撑一个小团队(10-20人)日常使用,如果你的仓库数量多、并发审查量大,建议给4GB,另外需要注意,Gerrit默认使用H2数据库,所有数据都存在文件里,所以磁盘要预留至少10GB,用free -h和df -h先检查一下,不够就先扩容。

安装JDK和下载gerrit.war的具体命令

在Ubuntu上安装Java很简单:

sudo apt update
sudo apt install -y openjdk-17-jdk
java -version

然后创建专用用户:

sudo useradd -m -s /bin/bash gerrit
sudo passwd gerrit

切换用户,下载war包:

su - gerrit
mkdir -p ~/gerrit && cd ~/gerrit
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.8.4.war

这里特别提醒:不要用root运行Gerrit,因为初始化时很多文件会归属root,后续Gerrit进程无法写入,报错非常难排查,如果已经用root初始化了,赶紧把目录所有权改回来:

sudo chown -R gerrit:gerrit /home/gerrit/gerrit

初始化Gerrit时最容易踩的3个坑(含gerrit搭建踩坑记录)

执行java -jar gerrit.war init -d ~/gerrit后,会有一连串交互式问答,新手往往被这些英文提示吓到,其实多数问题直接回车用默认值即可,但下面这三个坑必须提前知道。

坑一:认证方式选错了

初始化时会问Authentication method,默认是OPENID,我建议你选HTTP,因为OpenID依赖外部服务,在国内网络环境下经常连不上,选HTTP之后,Gerrit会通过Nginx做基于Basic Auth的登录,简单可控,具体操作:在提示时输入http并回车。

坑二:数据库和索引路径没配好

默认数据库是H2,路径在/home/gerrit/gerrit/db,这个可以继承默认,但有个问题经常出现:默认的Lucene索引路径在/tmp下,重启虚拟机后数据丢失,如果你想保留索引,就在初始化时手动改成:

Index type [lucene]?
Index directory [./index]?  /home/gerrit/gerrit/index

坑三:监听地址必须是0.0.0.0

初始化过程中会问Listen on,默认是(表示所有接口),如果你手滑改成0.0.1,那么虚拟机外部的浏览器永远访问不了,正确做法是保持默认或明确写0.0.0,这个坑新手经常踩,业内专家指出,九成搭建失败都是网络监听配置错误。

用Nginx反向代理让Gerrit通过域名访问

Gerrit默认监听8080端口,但你肯定不想让用户记端口号,用Nginx把http://review.example.com转发到本机8080就清爽多了。

安装并配置Nginx

sudo apt install -y nginx

编辑配置文件:

sudo nano /etc/nginx/sites-available/gerrit
server {
    listen 80;
    server_name review.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

这个配置最关键的是要传X-Forwarded-Proto头,否则Gerrit会误判请求协议,导致生成的链接一直是http,登录状态也存不住。

启动Gerrit和Nginx

cd ~/gerrit && ./bin/gerrit.sh start
sudo ln -s /etc/nginx/sites-available/gerrit /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

此时在浏览器访问http://review.example.com,就能看到Gerrit的登录页面了,如果打不开,先检查防火墙:

sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp

注意:Nginx反向代理不是可选项,是必选项,因为Gerrit的Web SSH和Git HTTP协议依赖正确的Host头,直接用IP+端口访问很容易出现“仓库路径错误”的诡异问题。

新手常见问题Q&A(围绕gerrit搭建常见问题)

Q1:Gerrit初始化成功后,访问8080端口显示“无法访问此网站”,怎么办?

先确认端口是否在监听:ss -tlnp | grep java,如果看到:8080,说明进程正常,问题出在防火墙或VM网络模式,如果没看到,去查/home/gerrit/gerrit/logs/error_log,常见报错是Address already in use或Permission denied,还有一种情况是你用了桥接网卡的虚拟机,但IP地址和宿主机不在同一网段,这时需要把虚拟机网络改成NAT或桥接模式并重新获取IP。

Q2:Gerrit的SSH端口(29418)总连不上,怎么排查?

Gerrit的SSH端口和Git推送密切相关,首先确认/home/gerrit/gerrit/etc/gerrit.config中有以下配置:

[sshd]
    listenAddress = :29418

然后检查虚拟机防火墙是否放行:sudo ufw allow 29418/tcp,最后在客户端测试:ssh -p 29418 yourname@review.example.com,如果提示Permission denied (publickey),说明SSH服务正常,只是公钥没配好,此时需要在Gerrit网页端“Settings → SSH Keys”里添加你的公钥。

Q3:Gerrit启动后内存占用过高,2GB的虚拟机快卡死了,怎么优化?

Gerrit默认给JVM分配了较大的堆内存,可以通过修改/home/gerrit/gerrit/etc/gerrit.config中的heapLimit来限制,

[container]
    heapLimit = 1g

修改后重启Gerrit,如果索引数据量大,可以定期执行./bin/gerrit.sh gc清理旧日志,多数情况下,1GB堆内存足够支撑小团队日常使用,不需要盲目加大。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱