說明:本次服務器的搭建主要是在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服務器 來做事兒了。建立倉庫,上傳、下載代碼 這個功能是最基本的,接下來我就針對於此,開始進行測試,同時根據實際情況 繼續調整。