Gerrit 安装配置(保姆级指南)

系统环境 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

    下载地址 :

    www.gerritcodereview.com/

    在下载目录下,执行

    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:


直接访问gerrit服务的端口出现这个图证明gerrit启动成功了
如果出现这个图说明没有安装  download-commands 插件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容