赞
踩
本次安装gerrit需要用到的工具:
虚拟机、centos7系统(解决centos系统安装后没有分配ip问题)
Java 11 (至少1.6以上)
git 1.8.3
Nginx 1.10.2
httpd
几点说明:
1.关于操作系统
Redhat和CentOS用的是同样的内核,我这里是7.8版本的内核;其他linux系统上安装过程照猫画虎应该也差不多,只不过可能比如Java或者Nginx等工具的安装方式有所差别。
为了方便后面文章的讲解,我们这里假设gerrit服务器的ip地址是192.168.255.168
2.关于Java环境
在终端中输入 java -version 务必确保你的java环境正确安装了;因为整个gerrit的安装是依赖于Java的,刚开始使用Java版本1.8有问题,所以使用了11版本。高一点的版本保险一点,可以自行尝试
3.Web服务器
网上很多教程有讲到gerrit+apache安装过程的,我这里是用nginx。先来说说为什么一定要用apache或者nginx,是的就是为了反向代理。
Gerrit有两种工作方式,我们要采用http的工作方式,也就是代码审核人员,可以直接通过Web页面对提交的代码进行评审以及后续的操作。
然后Gerrit要求不能直接请求其端口,必须要使用反向代理才能正确登录。而我们知道Nginx的成功正在于其高效、轻量级以及反向代理,虽然Apache也有反向代理的功能,但是如果你在安装Apache时没有开启,后续的开启过程要相对复杂一点,而Nginx就简单的多了。
不过即便我们使用Nginx做为web页面引擎,仍然需要安装Apache,因为我们需要用到apache的一个工具来创建验证密码文件。这个后面我们会看到具体用法。
4.数据库
我们使用gerrit自带的H2数据库。网上也有其他数据库的安装教程,我这里想说的是,H2就够用,而且,我们不推荐直接对数据库进行操作,所有的操作,都可以通过命令行的方式完成,所以,尽量简单我们就使用自带的默认的数据库好了。
gerrit官网:https://www.gerritcodereview.com/index.html
一、准备工作
①因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下:
[root@centos7 ~]# uname -a
Linux centos7 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
如果有x86_64就是64位的,没有就是32位的。后面是X686或X86_64则内核是64位的,i686或i386则内核是32位的
由此可以判断我的centos为64位系统,故而我需要下载64位系统的JDK。
②下载JDK,我下载的JDK为11,如图所示:
方法1官网地址:https://www.oracle.com/java/technologies/javase/javase-jdk11-downloads.html,需要登录下载,特别慢
方法2华为云下载,速度快
③自行下载安装虚拟机(Vmware),虚拟机中安装的Centos系统,Xshell 工具
拓展:查看CentOS版本命令:cat /etc/redhat-release
二、安装java jdk11
①通过上面准备工作之后,我们现在已经拥有了可以安装JDK的环境。
②然后在Xshell中,进入到local下面创建者自己的文件夹:javajdk
cd /usr/local
mkdir javajdk
cd javajdk
然后使用Xshell的rz命令将jdk上传到javajdk文件夹下面,如图所示:
如果没有rz命令,需要安装:yum install -lrzsz -y
将上传的jdk解压,解压之后重命名为javajdk
tar -zxvf jdk-11_linux-x64_bin.tar.gz
mv jdk-11 javajdk
cd javajdk
③通过上面的步骤,我们的jdk已经全部完成安装了,接下来就是更重要的一步:配置环境变量
进入/etc/profile文件vim /etc/profile
将下面内容复制到profile文件中,并保存退出:
JAVA_HOME=/usr/local/javajdk/javajdk
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPAHT
备注:根据上面的配置信息,我们既可以将环境变量的配置完成,需要注意的是,PATH在配置的哦时候,一定要把AVA_HOME/bin放在最前面,不然使用java命令式,系统会找到以前的JAVA,在不往下找了,这样java这个可执行文件运行的目录其实不在$JAVA_HOME/bin下,而在其它目录下,会造成很大的问题。
配置完成,使profile文件生效:source /etc/profile
④验证安装是否成功
java -version
echo $JAVA_HOME
拓展:卸载jdk
首先执行命令查看服务器下的jdk的版本:命令如下:rpm -qa|grep jdk
然后执行命令: yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64将上面查询出来的每个版本以此删掉即可。
参考文章: http://www.cnblogs.com/hanyinglong/p/5025635.html
三、安装git
安装:yum install git
验证:git --version
Git初始化并生成授权证书:
①git初始化
[root@centos7 ~]# git config --global user.name "jingjing"
[root@centos7 ~]# git config --global user.email "2573135193@qq.com"
查看设置的信息:git config --list
②生成授权证书:ssh-keygen -t rsa -C “邮箱”
查看证书:cd ~/.ssh
将公钥id_rsa.pub添加到gitlab的ssh key:
验证git配置是否正确:ssh git@gitlab.com
四、安装gerrit
①下载gerrit安装包,我使用了最新版本3.4.0。
下载地址:https://www.gerritcodereview.com/releases-readme.html
②使用root用户权限操作:新建gerrit专用用户
adduser gerrit
su gerrit
将gerrit安装包(gerrit-3.4.0.war)拷贝到/home/gerrit/目录下用来安装
③安装gerrit
在gerrit用户的目录(/home/gerrit/)下面,执行下面的命令开始安装:
java -jar gerrit-3.4.0.war init -d ~/gerrit_site
注意:
&我们安装的时候,在Authentication method时输入http,
拓展:我认为gerrit安装比较难的地方在于它有多种身份验证方法,身份验证方法决定了如何登录Gerrit。
如果你想挂入某个现有的身份验证提供方(例如GoogleAccounts),那么可以使用OpenID;如果是用于测试和学习,可以选择最简单的development_become_any_account。如果你选择了development_become_any_account,在页面顶端会有一个Become链接,通过它可以进入注册/登录页面;
HTTP认证也是可选的认证方式,此认证方式下需要配置Apache的反向代理,并在Apache中配置Web站点的口令认证,通过口令认证后gerrit在创建账号的过程中会询问用户的邮件地址并发送确认邮件。–参考资料:https://blog.csdn.net/benkaoya/article/details/8680886
&&插件安装要选择yes,默认是不安装的,否则后续安装比较麻烦
&&&其他选择默认就行。其他配置我们待会可以通过etc/gerrit.config文件进行修改
Opening http://centos7:8080/#/admin/projects/ …FAILED#(因为还没有用户,所以failed,不影响)
④启动gerrit
安装完成之后,gerrit会自动启动,而且会开始监听两个端口:
29418: 默认的ssh端口;
8080: gerrit默认的web页面端口。
我们可以通过下面命令查看:gerrit或者root用户都可以
[root@centos7 bin]# netstat -ltpn|grep -i gerrit
tcp6 0 0 :::29418 :::* LISTEN 1974/GerritCodeRevi
tcp6 0 0 :::8080 :::* LISTEN 1974/GerritCodeRevi
拓展:
1.如果需要手动启动gerrit:cd gerrit_site/bin; ./gerrit.sh start
五、Nginx反向代理服务器
①安装nginx(CentOS):
官网步骤:http://nginx.org/en/linux_packages.html#RHEL-CentOS
②配置nginx
cd /etc/nginx/conf.d
ls -l
默认的nginx只有一个default.conf文件,是nginx的默认配置文件 ,修改default.conf文件:
上面就是默认的配置,看到这里我把端口默认的监听端口设置成了85, 因为80分配给了apache;
查找文件路径:find / -name 文件名
然后日志文件的路径在/usr/local/nginx/logs目录下–与安装路径有关,如果后面登录认证的失败的时候,我们可以在这个目录下面查找日志文件,分析失败的原因。
Nginx路径在/usr/share/nginx/html下,如果我们进到该目录下,查看其下面的index.html文件,就会发现他就是我们在服务器ip:85页面中看到的关于nginx的介绍的页面。
访问nginx(http://ip:85)的web页面注意事项:
注意1:
要查看防火墙状态 systemctl status firewalld
,防火墙开放时不能访问
防火墙要关闭:systemctl stop firewalld
或者开放端口:
注意2:
查看nginx状态:systemctl status nginx
如果状态为dead,需要启动nginx:service nginx start
解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:xxxx failed (13: Permission denied)
解决方式:经检查发现是selinux导致报错。
[root@localhost nginx]# getenforce #查询selinux状态
[root@localhost nginx]# setenforce 0 #临时将selinux关闭
如果需要永久关闭selinux,请编辑/etc/selinux/config文件,将SELINUX=disabled。之后一定要将系统重启一下。
之后重启nginx服务,发现报错已经解除。
③Gerrit.conf配置:
我们这里需要新建一个专门用来处理gerrit请求的配置文件。
在 /etc/nginx/conf.d 文件夹下,用vim gerrit.conf创建这个文件,然后输入下面的内容:
server {
listen *:86;
server_name gerrit.microwu.com;
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:8080;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
我们来详细解释几个重点:
我们监听86端口,原因和前面一样,80端口被apache占用了,当然你还可以设置成其他没有被占用的端口
auth_basic 是用于登录时弹出验证登录对话框,我盗一张图来说明一下
4⃣️配置好了之后,我们需要重启nginx:service nginx restart
启动失败常见问题,https://www.jianshu.com/p/1ca5a62df1a9
https://blog.csdn.net/qq_32448349/article/details/109725173
然后我们去访问http://ip:86页面,就能看到和上图一样的登录认证界面了。
5⃣️.登录认证文件:
那登录认证有了,我们怎么登录呢??就需要前面的auth_basic_user_file文件了。
这里我们需要用apach的 htpasswd工具来新建这个文件,这也是为什么我们虽然不用到apache的反向代理,仍然需要apache的原因。
我们通过下面的命令来在/home/gerrit/路径下创建认证文件:
$ htpasswd -c /home/gerrit/gerrit.password admin
问题:-bash: htpasswd: command not found
解决办法:yum -y install httpd-tools
接下来你需要在命令行中连续输入两次密码,我们就为admin用户设置好了密码,可以通过vim来查看下这个密码文件,会发现里面是经过加密的。
[root@centos7 gerrit]# cd /home/gerrit/
[root@centos7 gerrit]# ls
gerrit-3.4.0.war gerrit.password
[root@centos7 gerrit]# cat gerrit.password
admin:$apr1$Sbkk2t/w$njIQydyhgUKIXh2cY8YsL1
test:$apr1$ylxI2zqV$VTUiXBGNiUJ31XlLjG2sA0
如果我们想新建别的用户,或者修改某个用户的密码,只需要把-c改成-m就好了,如果还是用-c并且路径不变的话,就会覆盖掉原来的文件。
$ htpasswd -m /home/gerrit/gerrit.password test
同样的输入两遍密码,就设置好了master用户的登录密码了。
注意:
如果你是在root用户下输入上面的命令 创建了gerrit.password文件到/home/gerrit/目录中,你会发现在登录的时候永远登录不成功,永远会得到服务器500的错误页面。原因是/homt/gerrit/文件夹的权限问题。
我们知道,/home/gerrit/是我们之前新建的gerrit用户的,那么这个文件夹的权限是700,也就是只允许gerrit用户访问,其他组的用户是访问不了的,虽然这个文件的权限拥有root用户的所有权限,但是因为它放在700权限的文件夹下面,所以同样其他用户是访问不到的。
这个问题之前纠缠了我好久,通过nginx的日志可以清楚的看到访问拒绝的错误。
所以,我们需要通过下面的命令,来改变gerrit目录的权限
[root@centos7 home]# ls
gerrit
[root@centos7 home]# chmod 755 gerrit
[root@centos7 home]# ls -l
total 0
drwxr-xr-x. 2 gerrit gerrit 109 Aug 15 15:27 gerrit
这样,当前目录权限就变成了drwxr-xr-x,也就是其他组的用户也拥有了读取和执行的权利。
⑥修改gerrit配置
配置好了nginx,我们接下来修改下gerrit的配置,vi gerrit_site/etc/gerrit.config
我们要做下面几个事情:
配置SMTP邮件发送
配置反向代理
[gerrit] basePath = git canonicalWebUrl = http://172.16.207.134:8080/ 自己服务器的ip地址 serverId = 18f8ac4c-58fe-4f44-bffa-35ab039233f2 [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 = root javaHome = /usr/local/javajdk/javajdk [index] type = lucene [auth] type = HTTP [receive] enableSignedPush = false [sendemail] #smtpServer = localhost smtpServer = smtp.qq.com smtpServerPort = 465 smtpEncryption = SSL smtpUser = 95*****29@qq.com #发件人 smtpPass = zzfgawunajftbbgj #邮箱的SMTP密码,在邮箱的设置中查找 from = 95******29@qq.com [sshd] listenAddress = *:29418 [httpd] listenUrl =proxy-http://*:8080/ #http修改为proxy-http [cache] directory = cache [plugins] #如果要和gitlab即成,一定要添加,否则不能出发replication插件 allowRemoteAdmin = true
7⃣️重启gerrit
完成上面的配置之后,我们重启一下gerrit
gerrit的可执行文件位于/home/gerrit/gerrit_site/bin目录下,我们直接执行
重启完成之后,我们可以在浏览器中输入ip:85看看是不是可以弹出输入用户名和密码的对话框(如果没有,请检查你的Nginx配置);然后输入正确的用户名(我们创建的密码文件用户是admin)和密码,如果你能登录到这个页面,就表示你的gerrit已经成功配置好了!
参考资料:https://www.csdn.net/tags/Mtjagg5sMTE0MTItYmxvZwO0O0OO0O0O.html
http://lipeng1667.github.io/2017/01/17/build-gerrit-with-nginx/
https://www.cnblogs.com/anliven/p/11980432.html#_label7_1
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。