Ubuntu环境上使用Nginx搭建Gerrit

Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件开发者,可以相互审阅彼此修改后的代码,决定是否能够提交,回退或是继续修改。它使用版本控制系统Git作为底层,已经被广泛的应用到了各大公司的代码 review中。对于不太习惯使用git diff/difftool来查看两个相邻提交差异的同学来讲,gerrit也是一个不错的选择,当然,这样显然是大材小用了。不管如何,gerrit已经像git一样成为程序员必备的技能了。对于想学习而又没有gerrit环境的同学,可以参考本文在ubuntu电脑上快速搭建一个。

本文将基于以下环境使用nginx实现反向代理来搭建一个gerrit服务器:

  • ubuntu版本: 16.04
  • kernel版本: Linux version 4.4.0-137-generic
  • 服务器IP地址:104.238.167.38

注意:软件版本的不同有可能会导致即使相同的配置,最终不能正常工作。如果对相关软件不太熟悉的,请务必选用与本文一致的软件版本。

一、下载安装必要的软件

1.1 安装java环境

gerrit是一个java软件,因此需要安装JDK,这里我们使用openjdk-8。安装命令如下:

sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get update && sudo apt-get install openjdk-8-jdk -y

1.2 安装nginx

Nginx是一款轻量级的web服务器软件,它将提供供我们访问的gerrit服务器。安装命令如下:

sudo apt-get install nginx -y

安装成功后在你的浏览器中输入服务器的IP地址,如果看到下面的显示,则表明Nginx已正确安装。

nginx

1.3 安装密码管理器htpasswd

htpasswd用于建立和更新登陆gerrit服务器的存储用户名/密码的文本文件。它是apache工具集下的一个工具,因此我们需要安装apache-utils。安装命令如下:

sudo apt-get install apache2-utils -y

1.4 下载gerrit安装包

安装包可以直接点击 gerrit release note页面下载 ,或者直接使用下面命令下载:

wget https://gerrit-releases.storage.googleapis.com/gerrit-2.15.4.war

二、配置gerrit

到目前为止安装gerrit依赖的所有软件已经准备完毕,下面我们来开始安装。在安装前,需要说明一点的是:安装gerrit最好在服务器上新建一个user,这个账户只用来安装、配置并启动gerrit服务,因此,不需要赋给它更多的权限(比如root权限),而修改nginx的配置文件需要使用具有root权限的账户。因此,下文中涉及到修改gerrit配置文件,请切换回gerrit专用账户;其他操作(比如修改nginx配置文件),请使用具有root权限的账户

2.1 创建gerrit专用账户

使用下面的命令创建一个gerrit专用账户,账户名字就叫做gerrit:

sudo adduser gerrit
su gerrit
cd ~

2.3 安装gerrit

接着使用下面的命令来安装gerrit(注意,这里应该使用gerrit专用账户)

java -jar ./gerrit-2.15.4.war init -d ~/gerrit_site

安装过程很简单,只需要使用默认的配置,一路回车下去就行了,只是在Authentication method方式时输入http

2.4 修改gerrit配置文件

安装的时候我们基本选择了默认配置,但是其中有两项是需要修改的。gerrit的配置文件具体路径为:/home/gerrit/gerrit_site/etc/gerrit.config

完整的文件如下,我们需要只需要修改第4行和第28行即可:

  1 [gerrit]
  2         basePath = git
  3         serverId = 2d5e17e4-a507-424d-b5cd-f63d8e08e6fd
  4         canonicalWebUrl = http://104.238.167.38:8085/ 
  5 [database]
  6         type = h2
  7         database = /home/gerrit/gerrit_site/db/ReviewDB
  8 [noteDb "changes"]
  9         disableReviewDb = true
 10         primaryStorage = note db
 11         read = true
 12         sequence = true
 13         write = true
 14 [index]
 15         type = LUCENE
 16 [auth]
 17         type = HTTP
 18 [receive]
 19         enableSignedPush = false
 20 [sendemail]
 21         smtpServer = localhost
 22 [container]
 23         user = gerrit
 24         javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
 25 [sshd]
 26         listenAddress = *:29418
 27 [httpd]
 28         listenUrl = proxy-http://*:8085/
 29 [cache]
 30         directory = cache

其中第4行表示要替换成你自己服务器的ip地址(104.238.167.38是我的服务器IP地址),端口号自己选择一个当前未被占用的即可。第28行意思是使用反向代理,端口号要和第4行的设置成一样。

2.5 添加gerrit的nginx配置文件

接下来,需要为nginx添加gerrit的配置文件(注意,这里我们需要切换为拥有root权限的账户)。添加的目录为:/etc/nginx/conf.d。在其下面新建一个文件命名为gerrit.conf,然后将下面内容写入该文件,并保存。

server {
     listen *:358;
     server_name localhost;
     allow   all;
     deny    all;

     auth_basic "Welcomme to Gerrit Code Review Site!";
     auth_basic_user_file /home/gerrit/gerrit_site/etc/gerrit.passwd;

     location / {
        proxy_pass  http://127.0.0.1:8085;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
     }
   }

其中,listen表示nginx对外监听的端口号,设置成任意一个未被占用的即可(我这里设置成了358)。proxy_pass这句里面的端口号应该和gerrit配置文件(即2.4中的gerrit.config)里设置的一样。

2.6 gerrit用户账号管理

下面我们使用htpasswd工具来建立和增加可登陆的gerrit账号(注意,这里应该使用gerrit专用账户)

2.6.1 新建配置文件并添加用户账号

sudo htpasswd -c /home/gerrit/gerrit_site/etc/gerrit.passwd administrator

这里我们在/home/gerrit/gerrit_site/etc/目录下新建了一个名为gerrit.passwd的密码配置文件,并添加了一个名为administrator的用户账号。

2.6.2 增加用户账号

sudo htpasswd -m /home/gerrit/gerrit_site/etc/gerrit.passwd user1

使用-m参数表示添加一个账户。这里我们在上述密码配置文件中添加了一个名为user1的用户账号。

2.7 重启服务

2.7.1 重启nginx

使用下列命令重启nginx(注意,这里我们需要切换为拥有root权限的账户)

sudo /etc/init.d/nginx restart

2.7.2 重启gerrit服务

重启gerrit服务(注意,这里应该使用gerrit专用账户)

/home/gerrit/gerrit_site/bin/gerrit.sh restart

然后,打开浏览器访问104.238.167.38:358(IP地址即为服务器的IP,端口号应为nginx监听的端口号),即可看到gerrit登陆界面:

gerrit_test

然后输入账号登陆后,如果显示下面的画面,证明一切配置正常,gerrit就可以正常使用了。

gerrit_login

注意,gerrit默认第一次成功登陆的账户为gerrit服务器的管理员账户,它拥有整个gerrit系统的最大权限,包括但不限于新建project,新增group,配置所有用户或者group对project的访问、代码下载、push和submit等权限,所以登陆的时候务必慎重!

三、问题调查

gerrit登陆出错,有各种各样的问题,请试着先从以下思路看看能否解决:
1. 使用2.7.2提供的命令,重启nginx,然后重新gerrit。如果重启失败,查看gerrit启动log,一般位于/home/gerrit/gerrit_site/logs/error_log
2. 如果重启成功,但是登陆失败,请查看nginx的log,一般位于:/var/log/nginx目录下。对于log中的错误,可以自行google解决。
3. 实在不行的话,可以考虑删掉gerrit的安装目录,即/home/gerrit/gerrit_site/重新安装。

发表评论

电子邮件地址不会被公开。 必填项已用*标注