Linux 下安装 Gerrit

最近在安装gerrit ,期间遇到了一些问题,这篇文章主要是记录一下gerrit的安装过程

开发环境


记录下本机的安装环境:

  • Redhat(CentOS)6.1
  • java 1.8.0_201 
  • git 1.7.1
  • Nginx 
  • httpd

几点说明:

  1. 关于操作系统
    Redhat和CentOS用的是同样的内核,我这里是6.1版本的内核
    为了方便后面文章的讲解,我们这里假设gerrit服务器的ip地址是192.62.1.1

  2. 关于Java环境
    在终端中输入 java -version 务必确保你的java环境正确安装了;因为整个gerrit的安装是依赖于Java的,另外最好确保Java版本在1.6以上吧,虽然我没有验证过低版本的Java是不是没问题,但是高一点的版本保险一点。

  3. Web服务器
    网上很多教程有讲到gerrit+apache安装过程的,我这里两种都用到了。先来说说为什么一定要用apache或者nginx,是的就是为了反向代理
    Gerrit有两种工作方式,我们要采用http的工作方式,也就是代码审核人员,可以直接通过Web页面对提交的代码进行评审以及后续的操作。
    然后Gerrit要求不能直接请求其端口,必须要使用反向代理才能正确登录。而我们知道Nginx的成功正在于其高效、轻量级以及反向代理,虽然Apache也有反向代理的功能,但是如果你在安装Apache时没有开启,后续的开启过程要相对复杂一点,而Nginx就简单的多了。
    不过即便我们使用Nginx做为web页面引擎,仍然需要安装Apache,因为我们需要用到apache的一个工具来创建验证密码文件。这个后面我们会看到具体用法。

            ps: apache 就是httpd

  1. 数据库
    我用的是mysql

所以,请务必确保以上几个工具正确安装。
在RedHat或者CentOS上可以通过yum工具来安装,如果yum的源打不开,可以去网上搜一下替换yum源的方法。

 

安装gerrit


下载gerrit安装包


gerrit 官网下载最新的包:

我的是gerrit 版本是2.16.7

新建gerrit专用用户


 

新建一个用户用来专门管理gerrit相关的内容

在root用户下

[root@localhost logs]# adduser gerrit
[root@localhost logs]# su gerrit

建好用户以后,我们可以把之前下载好的gerrit安装包(gerrit-2.16.7.war)拷贝到/home/gerrit/目录下,一会方便gerrit用户来安装。

 

安装gerrit


在gerrit用户的目录(/home/gerrit/)下面,执行下面的命令:

$ java -jar gerrit-2.16.7.war init -d ~/gerrit_site

这个命令的意思是执行安装gerrit,会在当前目录下新建一个文件夹gerrit_site用来作为gerrit的根目录,在这个目录中,会安装git仓库,以及gerrit的web页面,还有gerrit的bin,etc等文件夹。
然后就开始安装过程了,安装的过程会询问很多问题,有一些判断性的问题会用[y/N]这样的形式,大写的字母表示默认,我们直接敲回车就表示采用默认的安装选项。

注意:

    • 我们安装的时候,可以只在Authentication method时输入http,其他全部回车用默认值,因为其他配置我们待会可以通过etc/gerrit.config文件进行修改
    • 期间可能会下载两个文件,这两个文件虽然都很小(不到3M),但是可能是因为GFW的原因,下载速度很慢。你可以到/lib文件夹下面查看他们是不是已经下载完了,或者你手动把那两个文件下载完之后,scp到/lib下面。
      如果你发现已经下完了,但是安装过程卡主了,没有关系,直接ctrl+c然后重新安装就可以了。

 其实安装过程真的很简单,只是在Authentication method方式时输入http其他的一路回车下去就好了。其他的配置以后都可以改

ps:如果在安装过程遇到如下错误

(1) 执行  java -jar gerrit-2.11.3.war init -d ~/gerrit_site 报错 如下:
fatal: DbInjector failed
fatal: Unable to determine SqlDialect
fatal: caused by java.sql.SQLException: Access denied for user 'root@localhost'@'localhost' (using password: YES)
需要给mysql 给root 用户设置密码123456 ,同理也需要给 新增加的 gerrit 用户设置密码123456
(2)如果死活给gerrit 设置新密码不成功,需要用到如下方法:(终于发现是因为mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来,于是解决办法见方法二。)
   1.关闭mysql
   $ service mysqld stop
    2.屏蔽权限
   $ mysqld_safe --skip-grant-table
   屏幕出现: Starting demo from .....
    3.新开起一个终端输入
  $ mysql -u root mysql
   mysql> delete from user where USER='';
   mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误
   mysql> \q

 

启动gerrit


 

[gerrit@localhost bin]$ su root
Password:
#先启动 mysqld服务
$ service mysqld restart
[root@localhost bin]# /home/gerrit/gerrit_site/bin/gerrit.sh stop
Stopping Gerrit Code Review: OK
[root@localhost bin]# /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting Gerrit Code Review: OK
# 如果选择用nginx做反向代理,那么就需要把 nginx服务开起来
$ service  nginx  restart  #如果选择用httpd做反向代理,那么就需要把 httpd服务开起来
$ service httpd  restart  

安装完成之后,启动gerrit,会开始监听两个端口:29418: 默认的ssh端口;8081: gerrit的web页面端口。因为8080端口被安装jenkins服务占用了

我们可以通过下面命令查看:

[root@localhost bin]# netstat -ltpn |grep -i gerrit
tcp        0      0 :::29418                    :::*                        LISTEN      17257/GerritCodeRev
tcp        0      0 :::8081                     :::*                        LISTEN      17257/GerritCodeRev

 

 Nginx


 

 在没有配置 nginx 反向代理之前,直接访问 192.62.1.1:8081(我们之前假设gerrit服务器的ip地址是192.62.1.1),会得到一个错误页面,


 

 

 一旦出现这个页面那就是 nginx 或者httpd的配置文件没对。

nginx的 gerrit.conf 配置


 

我们首先看一看nginx的默认配置。
注意,你的nginx应该是用root账户安装的,否则可能出现权限问题。我们需要从之前的gerrit用户退出来。
在root用户下面,输入下面的命令:

[root@localhost conf.d]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls

默认的nginx只有一个default.conf文件,是nginx的默认配置文件,这里我们不需要修改默认配置文件,只需要新建一个专门用来处理gerrit请求的配置文件,我这里新建了一个gerrit.conf文件,用来处理gerrit的反向代理。

vim /etc/nginx/conf.d/gerrit.conf
server {
     listen *:8082;
     server_name localhost;
     allow   all;
     deny    all;


     auth_basic "Welcomme to Gerrit Code Review Site!";
     auth_basic_user_file /home/gerrit/gerrit.password;


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

 

我们来详细解释几个重点:

  • 我端口默认的监听端口设置成了8082, 因为8080分配给了jenkins,8081分配给了httpd,8183分配给了httpd
  • auth_basic 是用于登录时弹出验证登录对话框, 需要填入的用户名和密码,就是我们下一步要说到的
  • auth_basic_user_file 是我们输入用户名和密码之后要去验证是否匹配的文件,看到路径是放在我们的gerrit用户目录下面
  • location 部分指的的是当用户访问到192.62.1.1:82时,要指向的内容,这里面的proxy_pass 字段表示要做的反向代理,指向的是8081,还记得8081端口是谁在用么?对的,就是我们之前新建好的gerrit的web监听端口,也就是说,当用户访问8082端口时,nginx直接把这个请求代理到8081端口上去了,这个就是所谓的反向代理

然后日志文件的路径在/var/log/nginx/目录下,如果后面登录认证的失败的时候,我们可以在这个目录下面查找日志文件,分析失败的原因。

nginx路径在/usr/share/nginx/路径下,如果我们进到该目录下,查看其下面的index.html文件,就会发现他就是我们在192.62.1.1页面中看到的关于nginx的介绍的页面。

 

 重启nginx


配置好了之后,我们需要重启nginx

$service nginx restart

登录认证文件


那登录认证有了,我们怎么登录呢??就需要前面的auth_basic_user_file文件了。

这里我们需要用apach的 htpasswd工具来新建这个文件,这也是为什么我们虽然不用到httpd的反向代理,仍然需要httpd的原因。

我们通过下面的命令来在/home/gerrit/路径下创建认证文件

$ htpasswd -c /home/gerrit/gerrit.password admin

这个命令的详细解释:

  • -c表示create,也就是新建的意思
  • 接下来跟上文件要创建的目录以及文件名,我们直接用绝对路径,表示将在/home/gerrit目录下新建一个gerrit.password文件
  • 最后的admin表示要写入的用户名

接下来你需要在命令行中连续输入两次密码,我们就为admin用户设置好了密码,可以通过vim来查看下这个密码文件,会发现里面是经过加密的。

如果我们想新建别的用户,或者修改某个用户的密码,只需要把-c改成-m就好了,如果还是用-c并且路径不变的话,就会覆盖掉原来的文件。
例如:我们想要新增一个用户,master,允许其通过页面登录,只需要执行下面的命令就好了

$ htpasswd -m /home/gerrit/gerrit.password master

 修改gerrit配置:


 

修改 gerrit 配置: vim /home/gerrit/gerrit_site/etc/gerrit.config

vim /home/gerrit/gerrit_site/etc/gerrit.config

[gerrit]
        basePath = git
        canonicalWebUrl = http://localhost:8081/
        serverId = ecbafa4c-455d-4a36-bd26-150ad2fc707e
[database]
        type = mysql
        hostname = localhost
        database = gerritdb
        username = gerrit
[container]
        javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
        javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
        user = gerrit
        javaHome = /usr/java/jdk1.8.0_201-amd64/jre
[index]
        type = LUCENE
[auth]
        type = HTTP


[receive]
        enableSignedPush = true
[sendemail]
        smtpServer = localhost
[sshd]
        listenAddress = *:29418
[httpd]
        listenUrl = proxy-https://127.0.0.1:8081/
[cache]
        directory = cache

ps:#apache和gerrit的配置问题导致gerrit不能正常访问,建议多多查看apache和gerrit的log

$  tail -f /home/gerrit/gerrit_site/logs/error_log

 httpd的配置文件


 

修改httpd 默认配置文件

 

httpd 用yum 安装,后。httpd 的默认配置文件需要改两个地方:

httpd的默认配置文件所在路径:

 

vim /etc/httpd/conf/httpd.conf

 

在这个文件里面需要修改加 Listen 8183  和 ServerName 127.0.0.1:8183 这两个地方的端口号,且 端口要大于1024 并且没有被其他服务使用,如果被占用否则要报如下错误,而小于1024 会让gerrit 服务启动失败。 

 

httpd的gerrit.conf文件

 

新建一个专门用于gerrit的配置文件: vim /etc/httpd/conf.d/gerrit.conf

ps:特别注意 

  • <VirtualHost 192.62.1.1:8183> 一定要写本机ip地址,不能写为127.0.0.1,否则会造成只能本机通过 127.0.0.1:8183登录gerrit ,我就是因为这个原因折腾了好久,重新选择了用nginx做反向代理才恍然大悟。
  • ProxyPass / http://127.0.0.1:8081/  这个为gerrit 的端口号8081

vim /etc/httpd/conf.d/gerrit.conf <VirtualHost 192.62.1.1:8183> # server ip address ServerName localhost ProxyRequests Off ProxyVia Off ProxyPreserveHost On <Proxy *:> Order deny,allow Allow from all #Require all granted </Proxy> <Location /login/> AuthType Basic AuthName "Gerrit Code Review" AuthBasicProvider file AuthUserFile /home/gerrit/gerrit.password Require valid-user </Location> AllowEncodedSlashes On ProxyPass / http://127.0.0.1:8081/ </VirtualHost>

登录127.0.0.1:8183 页面中看到的关于httpd的介绍的页面:

 

参考文献:

posted @ 2019-04-15 19:09  绵绵01  阅读(2988)  评论(0编辑  收藏  举报
levels of contents