服務器搭建(01)Gerrit服務器搭建 & 內網訪問

說明:本次服務器的搭建主要是在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

官方網站鏈接:https://www.gerritcodereview.com/

下載3.0.0版本的直接 網站鏈接:https://www.gerritcodereview.com/3.0.html

從官網下載 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]: [email protected]             
[email protected]'s password    : 
              confirm password : 
error: Passwords did not match; try again
[email protected]'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/
</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/
</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/
</VirtualHost>

到此就把配置變更完了,接下來我們再重新啓動下前面的start.sh,這一次通過新建立的ubuntu虛擬機來訪問 我們建立的gerrit服務器,跑通後 效果如下:

至此,我們的gerrit服務器就完成了第一步,徹底走通了。下一步我們要開始 使用gerrit服務器 來做事兒了。建立倉庫,上傳、下載代碼 這個功能是最基本的,接下來我就針對於此,開始進行測試,同時根據實際情況 繼續調整。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章