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用户下

[[email protected] logs]# adduser gerrit
[[email protected] 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 ‘[email protected]‘@‘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


[[email protected] 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服务占用了

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

[[email protected] 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用户下面,输入下面的命令:

[[email protected] conf.d]# cd /etc/nginx/conf.d/
[[email protected] 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的介绍的页面:

参考文献:

原文地址:https://www.cnblogs.com/yan-2010/p/10711873.html

时间: 2024-11-05 20:42:40

Linux 下安装 Gerrit的相关文章

Linux下安装禅道管理系统7.2

提示:禅道是用PHP开发的,只要安装一个MySQL,找一个能跑PHP的web应用服务器,把禅道源代码放到里面,然后按步骤安装就可以了.不一定要用XAMPP,XAMPP只是把PHP环境和MySQL都集成了而已. 禅道简介 禅道项目管理软件(ZenTaoPMS)是一款国产的,基于ZPL协议,开源免费的项目管理软件,它集产品管理.项目管理.测试管理于一体,同时还包含了事务管理.组织管理等诸多功能,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程,是中小型企业项目管理的首选. 禅道项目管理软

Linux下安装搭建Memcached集群环境

Linux下安装搭建Memcached集群环境

FFmpeg在Linux下安装编译过程

转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下安装编译过程,用的是CentOS, 总体过程比较顺利,就是在ffmpeg等的时间稍长点.没什么技术难点.仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包

Linux下安装配置Apache服务器

Linux下安装配置Apache服务器 1. 安装Apache [[email protected] ~]# yum –y install httpd 2. 启动Apache [[email protected] ~]# systemctl start httpd 3. 查看进程 [[email protected] ~]# systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib

linux 下安装 mysql 并配置 python 开发环境

1.安装 mysql ,安装过程中将提示设置 root 用户的密码,默认可以设置为 rootadmin . $ sudo apt-get install mysql-server 2.安装 mysql 开发工具(不安装时,安装 MySQL-python 提示错误 "mysql_config not found"). $ sudo apt-get install libmysqld-dev 3.安装 python 的 mysql 库 MySQL-python (首先安装 python-d

Linux下安装jdk8步骤详述

作为Java开发人员,在Linux下安装一些开发工具是必备技能,本文以安装jdk为例,详细记录了每一步的操作命令,以供参考. 0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对应jdk版本下载.(可在Windows下下载完成后,通过文件夹共享到Linux上) 1. 登录Linux,切换到root用户 su root 获取root用户权限,当前工作目

linux下安装安装pcre-8.32 configure: error: You need a C++ compiler for C++ support

linux下安装安装pcre-8.32./configure --prefix=/usr/local/pcre 出现以下错误configure: error: You need a C++ compiler for C++ support 正解 yum install -y gcc gcc-c++

Python MySQLdb Linux下安装笔记

本文介绍了Python MySQLdb Linux下安装笔记,本文分别讲解了快速安装和手动编译安装两种方法,并分别讲解了操作步骤,需要的朋友可以参考下 主要针对centos6.5 64位系统 默认python版本为2.6 编码安装python2.7和python3.4      一.yum快速安装 yum install MySQL-python yum install python-setuptools 经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到eas

随笔记:Linux下安装Python

下载Python 在官网上下载安装包,目前地址为:https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz 得到Python-2.7.9.tgz 解压 将Python-2.7.9.tgz解压到当前目录下 tar zxvf ./Python-2.7.9.tgz -C ./ 安装 切换到根目录,开始安装 sudo ./configure sudo make sudo make install 测试 测试下有木有安装成功,如顺利,能看到以下日志