系统环境 ubuntu 20 jdk 1.8 gerrit 2.16 git、apache2、docker 、nginx 最新的
[简单说一下思路:]
gerrit的运行是先用gerrit.war去安装gerrit的运行环境和gerrit.sh,后续使用gerrit.sh来启动,而gerrit.war会被gerrit.config引用或拷贝到gerrit的安装目录;gerrit不支持直接被访问,只能使用反向代理来访问,因此需要安装一个反向代理的服务apache2 或者 nginx,通过反向代理来访问gerrit服务的地址和端口。
1 ubuntu 配置gerrit管理账号
添加一个gerrit专用用户,后续配置gerrit用
sudo adduser gerrit
增加sudo权限
sudo usermod -a -G sudo gerrit
切换到gerrit账号
sudo su gerrit
2 安装java环境
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
3 安装git
sudo apt-get install git
4 安装apache2
sudo apt-get install apache2
5 安装及配置gerrit
下载地址 :
在下载目录下,执行
java -jar gerrit-2.16.7.war init -d ~/review_site
安装过程中会对配置项做交互式的配置,其中多数配置都可以使用默认配置(敲回车即可),有两处需要注意:
(1) 是
Authentication method [openid/?]: http 询问时填写 http
(2) 是
*** Plugins
***
Install plugin download-commands version v2.16.5 [y/N]? 询问是填写 y (安装download-commands 插件在gerrit部署好后会有项目的克隆地址,不安装该插件没有克隆地址额外安装易出错导致gerrit进程启动失败)
(3) gerrit 的具体配置文件见文末
6 安装配置nginx (使用docker启动nginx,优点是便于管理,启停比较方便,免去安装依赖库;也可以使用直装的nginx)
(1) 安装docker 使用国内 daocloud 一键安装命令
curl -sSL https://get.daocloud.io/docker | sh
(2) 下载nginx镜像
sudo docker pull nginx
(3) 启动nginx容器 (命令详解见文末)
sudo docker run -d --name nginx_gerrit_server8081-8 -p 8081:8081 -v /home/gerrit/review_site/passwords/passwords:/home/gerrit/review_site/passwords/passwords -v /home/gerrit/:/etc/nginx/html/ -v /home/gerrit/data/nginx/logs/nginx_gerrit_log/:/var/log/nginx -v /home/gerrit/config/gerrit-nginx/gerrit_nginx.conf:/etc/nginx/nginx.conf nginx
(4) nginx配置文件见文末
7 生成登录账户 (其中第一个登录的账户为gerrit的管理员编号为1000000)
使用apache2 的 htpasswd 命令生成账户
sudo htpasswd -cmb passwords admin admin (生成并创建账户管理文件passwords)
sudo htpasswd -mb passwords zxh zxh (追加一个新账户)
8 gerrit 的服务启停
sudo ~/review_site/bin/gerrit.sh stop
sudo ~/review_site/bin/gerrit.sh start
9 关闭apache2 服务(因为用不到,而且占用80端口)
sudo service apache2 stop
10 配置文件
gerrit配置文件
#####################################################
[gerrit]
basePath = git
serverId = 0f8a279e-e39b-406a-ad92-6d039bb7316f
canonicalWebUrl = http://10.10.24.100:8080/
[database]
type = h2
database = /home/gerrit/review_site/db/ReviewDB
[noteDb "changes"]
disableReviewDb = true
primaryStorage = note db
read = true
sequence = true
write = true
[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 = gerrit
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
war = /home/gerrit/package/gerrit-2.16.7.war
[index]
type = LUCENE
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
enable = true
SMTPServer = smtp.qq.com
SMTPServerPort = 465
SMTPEncryption = ssl
smtpUser = ****@qq.com
from = ****@qq.com
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
#####################################################
#########################################################
nginx 配置文件
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8081;
server_name localhost;
allow all;
deny all;
auth_basic "Welcome To Gerrit Code Review Site" ;
auth_basic_user_file /home/gerrit/review_site/passwords/passwords;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# root html;
# index index.html index.htm;
proxy_pass http://10.10.24.100:8080/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
#####################################################
配置文件解释
#####################################################
[gerrit]
basePath = git (默认)
serverId = 0f8a279e-e39b-406a-ad92-6d039bb7316f (默认)
canonicalWebUrl = http://10.10.24.100:8080/ (gerrit 的运行端口,安装后编辑gerrit.config配置的,指定端口,注意不要缺少http://)
[database]
type = h2 (默认)
database = /home/gerrit/review_site/db/ReviewDB (默认)
[noteDb "changes"]
disableReviewDb = true (默认)
primaryStorage = note db (默认)
read = true (默认)
sequence = true (默认)
write = true (默认)
[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 = gerrit (启动服务的ubuntu账户)
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre (jdk实际的安装目录)
war = /home/gerrit/package/gerrit-2.16.7.war (安装gerrit时会询问Copy gerrit-2.16.5.war to /home/gerrit/gerrit_site/bin/gerrit.war [Y/n]? 选n会有该选项,选y则直接拷贝war包,建议选y)
[index]
type = LUCENE (默认)
[auth]
type = HTTP(用户修改)
[receive]
enableSignedPush = false (默认)
[sendemail]
enable = true (用户修改)
SMTPServer = smtp.qq.com (用户修改)
SMTPServerPort = 465 (用户修改)
SMTPEncryption = ssl (用户修改)
smtpUser = *****@qq.com (用户修改)
from = ****@qq.com (用户修改)
[sshd]
listenAddress = *:29418 (默认)
[httpd]
listenUrl = http://*:8080/(gerrit 的运行端口用户修改 端口和上边的canonicalWebUrl保持一致)
[cache]
directory = cache (默认)
#####################################################
#####################################################
server {
listen 8081; (nginx开放的端口)
server_name localhost;
allow all;
deny all;
auth_basic "Welcome To Gerrit Code Review Site" ;
auth_basic_user_file /home/gerrit/review_site/passwords/passwords; (gerrit登录时的用户文件 htpasswd 命令生成)
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# root html;
# index index.html index.htm;
proxy_pass http://10.10.24.100:8080/; (nginx代理的地址即gerrit的运行地址和端口)
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
#####################################################
#####################################################
sudo docker run -d --name nginx_gerrit_server8081-8 -p 8081:8081 -v /home/gerrit/review_site/passwords/passwords:/home/gerrit/review_site/passwords/passwords -v /home/gerrit/:/etc/nginx/html/ -v /home/gerrit/data/nginx/logs/nginx_gerrit_log/:/var/log/nginx -v /home/gerrit/config/gerrit-nginx/gerrit_nginx.conf:/etc/nginx/nginx.conf nginx
-d 后台启动容器
--name 指定容器名
-p 映射宿主机端口和容器端口 宿主机端口:容器端口
-v 映射宿主机目录和容器目录 宿主机端口:容器端口
#####################################################
补充:
1 学习的过程中踩了不少坑,关于gerrit的靠谱的帖子很少。安装失败很正常,只需要将 ~/web-site 目录删除,在重新执行 java -jar gerrit.war 命令即可重新安装。不用害怕安装失败而污染了安装环境,gerrit的配置文件只有一个gerrit.config。
2 apache2没接触过,感觉上比tomcat的配置反人类,还是用nginx吧,nginx更符合我的使用习惯。
3 分步骤安装很有必要,先安装gerrit,调试可用了以后再安装nginx,访问可用以后再集成
Q:

