说明:本次服务器的搭建主要是在window上VMWare虚拟机上 搭建一个gerrit服务器 作为测试,了解gerrit服务器搭建的整个流程,最后确保 gerrit 可以在本机的ubuntu虚拟机上可以正常运行。


1 基本环境搭建与配置(针对ubuntu18.04):

Linux基本软件的安装:

$sudo apt-get install vim tree net-tools ssh curl

jdk相关的安装(这里是直接安装jdk8):

$sudo apt-get install openjdk-8-jdk openjdk-8-jre

git 和repo 相关工具的安装:

$sudo apt-get install git gitk git-svn repo

apache 服务器的安装:

$sudo apt-get install apache2*

2 gerrit 服务器 安装与配置( gerrit-3.0.0.war版本)

下载安装包 gerrit-3.0.0.war

官方网站链接:Gerrit Code Review | Gerrit Code Review

下载3.0.0版本的直接 网站链接:Gerrit 3.0.x | Gerrit Code Review

从官网下载 gerrit 包 gerrit-3.0.0.war后执行下面一组命令:

$cd /home/wangdaosheng
$mkdir gerrit
$cd gerrit
$java -jar gerrit-3.0.0.war init -d review_site

执行后界面显示如下:

wangdaosheng@ubuntu:~/gerrit$ java -jar gerrit-3.0.0.war init -d review_site
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2020-05-18 03:55:14,036] [main] INFO  com.google.gerrit.server.config.GerritServerConfigProvider : No /home/wangdaosheng/gerrit/review_site/etc/gerrit.config; assuming defaults

*** Gerrit Code Review 3.0.0
*** 

Create '/home/wangdaosheng/gerrit/review_site' [Y/n]? y

*** Git Repositories
*** 

Location of Git repositories   [git]: /home/wangdaosheng/gerrit/source/

*** Index
*** 

Type                           [lucene/?]: 

*** User Authentication
*** 

Authentication method          [openid/?]: HTTP
Get username from custom HTTP header [y/N]? n
SSO logout URL                 : 
Enable signed push support     [y/N]? y

*** Review Labels
*** 

Install Verified label         [y/N]? y

*** Email Delivery
*** 

SMTP server hostname           [localhost]: smtp.qq.com
SMTP server port               [(default)]: 465
SMTP encryption                [none/?]: SSL
SMTP username                  [wangdaosheng]: *********@qq.com             
244100238@qq.com's password    : 
              confirm password : 
error: Passwords did not match; try again
244100238@qq.com's password    : 
              confirm password : 

*** Container Process
*** 

Run as                         [wangdaosheng]: 
Java runtime                   [/usr/lib/jvm/java-8-openjdk-amd64/jre]: 
Copy gerrit-3.0.0.war to review_site/bin/gerrit.war [Y/n]? y
Copying gerrit-3.0.0.war to review_site/bin/gerrit.war

*** SSH Daemon
*** 

Listen on address              [*]: 127.0.0.1
Listen on port                 [29418]: 
Generating SSH host key ... rsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done

*** HTTP Daemon
*** 

Behind reverse proxy           [y/N]? y
Proxy uses SSL (https://)      [y/N]? n
Subdirectory on proxy server   [/]: 
Listen on address              [*]: 127.0.0.1
Listen on port                 [8081]: 
Canonical URL                  [http://127.0.0.1/]: 

*** Cache
*** 


*** Plugins
*** 

Installing plugins.
Install plugin codemirror-editor version v3.0.0 [y/N]? y
Installed codemirror-editor v3.0.0
Install plugin commit-message-length-validator version v3.0.0 [y/N]? y
Installed commit-message-length-validator v3.0.0
Install plugin delete-project version v3.0.0 [y/N]? y
Installed delete-project v3.0.0
Install plugin download-commands version v3.0.0 [y/N]? y
Installed download-commands v3.0.0
Install plugin gitiles version v3.0.0 [y/N]? y
Installed gitiles v3.0.0
Install plugin hooks version v3.0.0 [y/N]? y
Installed hooks v3.0.0
Install plugin plugin-manager version v3.0.0 [y/N]? y
Installed plugin-manager v3.0.0
Install plugin replication version v3.0.0 [y/N]? y
Installed replication v3.0.0
Install plugin reviewnotes version v3.0.0 [y/N]? y
Installed reviewnotes v3.0.0
Install plugin singleusergroup version v3.0.0 [y/N]? y
Installed singleusergroup v3.0.0
Install plugin webhooks version v3.0.0 [y/N]? y
Installed webhooks v3.0.0
Initializing plugins.

Initialized /home/wangdaosheng/gerrit/review_site
Reindexing projects:    100% (2/2) with: reindex --site-path review_site --threads 1 --index projects
Reindexed 2 documents in projects index in 0.2s (9.9/s)
Warning: InterruptedException
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at java.lang.Thread.join(Thread.java:1260)
	at org.h2.util.MathUtils.getSecureRandom(MathUtils.java:105)
	at org.h2.util.MathUtils.secureRandomBytes(MathUtils.java:307)
	at org.h2.store.FileLock.setUniqueId(FileLock.java:315)
	at org.h2.store.FileLock.lockFile(FileLock.java:345)
	at org.h2.store.FileLock.lock(FileLock.java:136)
	at org.h2.engine.Database.open(Database.java:622)
	at org.h2.engine.Database.openDatabase(Database.java:260)
	at org.h2.engine.Database.<init>(Database.java:254)
	at org.h2.engine.Engine.openSession(Engine.java:57)
	at org.h2.engine.Engine.openSession(Engine.java:164)
	at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
	at org.h2.engine.Engine.createSession(Engine.java:125)
	at org.h2.engine.Engine.createSession(Engine.java:27)
	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
	at org.h2.Driver.connect(Driver.java:74)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlHandle.<init>(H2CacheImpl.java:634)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.acquire(H2CacheImpl.java:602)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.buildBloomFilter(H2CacheImpl.java:328)
	at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.open(H2CacheImpl.java:300)
	at com.google.gerrit.server.cache.h2.H2CacheImpl.start(H2CacheImpl.java:188)
	at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:83)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Executing /home/wangdaosheng/gerrit/review_site/bin/gerrit.sh start
Starting Gerrit Code Review: WARNING: Could not adjust Gerrit's process for the kernel's out-of-memory killer.
         This may be caused by /home/wangdaosheng/gerrit/review_site/bin/gerrit.sh not being run as root.
         Consider changing the OOM score adjustment manually for Gerrit's PID= with e.g.:
         echo '-1000' | sudo tee /proc//oom_score_adj
OK
Waiting for server on 127.0.0.1:80 ... OK
Opening http://127.0.0.1/#/admin/projects/ ...OK

配置完成后,重新编辑对应的配置文件/home/wangdaosheng/gerrit/review_site/etc/gerrit.config,编辑后如下所示:

[gerrit]
	basePath = /home/wangdaosheng/gerrit/source/
	canonicalWebUrl = http://127.0.0.1:8082/
	serverId = 28adb296-dfbf-41a2-af1e-816263a4fb20
[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 = wangdaosheng
	javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[index]
	type = LUCENE
[auth]
	type = HTTP
[receive]
	enableSignedPush = true
[sendemail]
	smtpServer = smtp.qq.com
	smtpServerPort = 465
	smtpEncryption = SSL
	smtpUser = *********@qq.com
[sshd]
	listenAddress = 127.0.0.1:29418
[httpd]
	listenUrl = proxy-http://127.0.0.1:8081/
[cache]
	directory = cache

确保以下命令是可以执行成功的。命令操作集如下所示:

$cd /home/wangdaosheng/gerrit/review_site/bin
$sudo ./gerrit.sh start
Starting Gerrit Code Review: OK

$cd /home/wangdaosheng/gerrit/review_site/bin
$sudo ./gerrit.sh stop
Stopping Gerrit Code Review: OK

接下来开始配置 添加gerrit登录用户,命令集操作如下所示:

$htpasswd -cb /home/wangdaosheng/gerrit/pwd admin admin
$htpasswd -b /home/wangdaosheng/gerrit/pwd user1 123456
$cat /home/wangdaosheng/gerrit/pwd
admin:$apr1$z5TbBtlP$MrJw5n7qz5RF0UvS6uFT/1
user1:$apr1$pcvyS9ZK$Yu7EG40b3Dq2X5qzQ1xPC.

创建Apache的config文件httpd.conf,在/etc/apache2目录下 创建一个配置文件httpd.conf,编写文件如下:

<VirtualHost *:8082>
	ServerName localhost
	ProxyRequests Off
	ProxyVia Off
	ProxyPreserveHost On
	<Proxy *:8082>
		Order deny,allow
		Allow from all
	</Proxy>
	<Location "/login">
		AuthType Basic
		AuthName "Gerrit Code Review"
		Require valid-user
		AuthBasicProvider file
		AuthUserFile /home/wangdaosheng/gerrit/pwd
	</Location>
	AllowEncodedSlashes On
	ProxyPass / http://127.0.0.1:8081/ nocanon
</VirtualHost>

同时修改对应的port.conf文件,修改后如下所示:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

NameVirtualHost *:80 #新添加
NameVirtualHost *:8082 #新添加
Listen 80
Listen 8082 #新添加

<IfModule ssl_module>
	Listen 443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

接下来在apache的配置文件 /etc/apache2/apache2.conf 中加入httpd.conf,这样才能使得httpd.conf生效,否则怎么调试都无意义,/etc/apache2/apache2.conf 文件 如下所示:

# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
#
#
# Summary of how the Apache 2 configuration works in Debian:
# The Apache 2 web server configuration in Debian is quite different to
# upstream's suggested way to configure the web server. This is because Debian's
# default Apache2 installation attempts to make adding and removing modules,
# virtual hosts, and extra configuration directives as flexible as possible, in
# order to make automating the changes and administering the server as easy as
# possible.

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
#	/etc/apache2/
#	|-- apache2.conf
#	|	`--  ports.conf
#	|-- mods-enabled
#	|	|-- *.load
#	|	`-- *.conf
#	|-- conf-enabled
#	|	`-- *.conf
# 	`-- sites-enabled
#	 	`-- *.conf
#
# ...
...
Include httpd.conf

接下来 执行以下命令后 重新启动apache服务器,命令集如下所示:

$sudo a2enmod proxy
$sudo a2enmod rewrite
$sudo a2enmod ssl
$sudo a2enmod proxy_balancer
$sudo a2enmod proxy_http
$systemctl restart apache2

到这里见证奇迹的时刻到了,打开浏览器,输入:127.0.0.1:8081,回车后显示如下:

接下来为了方便启动,我们把这些零散的命令封装成脚本 start.sh,如下所示:

#!/bin/bash
#开始配置 并重启apache服务器
sudo a2enmod proxy
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
systemctl restart apache2
#确保gerrit.sh 没有启动之后再进行start操作
sudo $HOME/gerrit/review_site/bin/gerrit.sh stop
sudo $HOME/gerrit/review_site/bin/gerrit.sh start

至此,gerrit服务器 本地就可以访问了。调试了接近两天的时间,终于把这个调试通了。下一步,我们再创建一个虚拟机,作为客户端来访问我们新创建的gerrit服务器,而这个时候 我们就需要对配置做一些改变了。


3 gerrit 服务器 配置文件变更,可内网访问

首先 我们改变对外的ip相关配置,这里执行ifconfig 获得 对应的ip地址,如下所示:

也就是这里的ip地址是 192.168.44.133。于是开始 变更我们之前的代理相关的配置。

@1 重新编辑对应的配置文件/home/wangdaosheng/gerrit/review_site/etc/gerrit.config。

编辑前信息如下所示:

[gerrit]
	basePath = /home/wangdaosheng/gerrit/source/
	canonicalWebUrl = http://127.0.0.1:8082/
	serverId = 28adb296-dfbf-41a2-af1e-816263a4fb20
[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 = wangdaosheng
	javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[index]
	type = LUCENE
[auth]
	type = HTTP
[receive]
	enableSignedPush = true
[sendemail]
	smtpServer = smtp.qq.com
	smtpServerPort = 465
	smtpEncryption = SSL
	smtpUser = *********@qq.com
[sshd]
	listenAddress = 127.0.0.1:29418
[httpd]
	listenUrl = proxy-http://127.0.0.1:8081/
[cache]
	directory = cache

编辑后信息如下所示:

[gerrit]
	basePath = /home/wangdaosheng/gerrit/source/
	canonicalWebUrl = http://192.168.44.133:8082/
	serverId = 28adb296-dfbf-41a2-af1e-816263a4fb20
[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 = wangdaosheng
	javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[index]
	type = LUCENE
[auth]
	type = HTTP
[receive]
	enableSignedPush = true
[sendemail]
	smtpServer = smtp.qq.com
	smtpServerPort = 465
	smtpEncryption = SSL
	smtpUser = *********@qq.com
[sshd]
	listenAddress = 192.168.44.133:29418
[httpd]
	listenUrl = proxy-http://192.168.44.133:8081/
[cache]
	directory = cache

@2 重新编辑Apache的配置文件httpd.conf。

编辑前信息如下所示:

<VirtualHost *:8082>
	ServerName localhost
	ProxyRequests Off
	ProxyVia Off
	ProxyPreserveHost On
	<Proxy *:8082>
		Order deny,allow
		Allow from all
	</Proxy>
	<Location "/login">
		AuthType Basic
		AuthName "Gerrit Code Review"
		Require valid-user
		AuthBasicProvider file
		AuthUserFile /home/wangdaosheng/gerrit/pwd
	</Location>
	AllowEncodedSlashes On
	ProxyPass / http://127.0.0.1:8081/ nocanon
</VirtualHost>

编辑后信息如下所示:

<VirtualHost *:8082>
	ServerName 192.168.44.133
	ProxyRequests Off
	ProxyVia Off
	ProxyPreserveHost On
	<Proxy *:8082>
		Order deny,allow
		Allow from all
	</Proxy>
	<Location "/login">
		AuthType Basic
		AuthName "Gerrit Code Review"
		Require valid-user
		AuthBasicProvider file
		AuthUserFile /home/wangdaosheng/gerrit/pwd
	</Location>
	AllowEncodedSlashes On
	ProxyPass / http://192.168.44.133:8081/ nocanon
</VirtualHost>

到此就把配置变更完了,接下来我们再重新启动下前面的start.sh,这一次通过新建立的ubuntu虚拟机来访问 我们建立的gerrit服务器,跑通后 效果如下:

至此,我们的gerrit服务器就完成了第一步,彻底走通了。下一步我们要开始 使用gerrit服务器 来做事儿了。建立仓库,上传、下载代码 这个功能是最基本的,接下来我就针对于此,开始进行测试,同时根据实际情况 继续调整。

Logo

更多推荐