说明:本次服务器的搭建主要是在window上VMWare虚拟机上 搭建一个gerrit服务器 作为测试,了解gerrit服务器搭建的整个流程,最后确保 gerrit 可以在本机的ubuntu虚拟机上可以正常运行。
1 基本环境搭建与配置(针对ubuntu18.04):
Linux基本软件的安装:
Bash $sudo apt-get install vim tree net-tools ssh curl |
jdk相关的安装(这里是直接安装jdk8):
Bash $sudo apt-get install openjdk-8-jdk openjdk-8-jre |
git 和repo 相关工具的安装:
Bash $sudo apt-get install git gitk git-svn repo |
apache 服务器的安装:
Bash $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后执行下面一组命令:
Bash $cd /home/wangdaosheng $mkdir gerrit $cd gerrit $java -jar gerrit-3.0.0.war init -d review_site |
执行后界面显示如下:
Bash 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,编辑后如下所示:
Bash [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 |
确保以下命令是可以执行成功的。命令操作集如下所示:
Bash $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登录用户,命令集操作如下所示:
Bash $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,编写文件如下:
HTML <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文件,修改后如下所示:
HTML # 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 文件 如下所示:
Bash # 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服务器,命令集如下所示:
Bash $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,如下所示:
Bash #!/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。
编辑前信息如下所示:
Bash [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 |
编辑后信息如下所示:
Bash [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。
编辑前信息如下所示:
HTML <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> |
编辑后信息如下所示:
HTML <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服务器 来做事儿了。建立仓库,上传、下载代码 这个功能是最基本的,接下来我就针对于此,开始进行测试,同时根据实际情况 继续调整。