操作环境:
在vmware11.5中安装centos7,以下操作都是在centos7系统中操作的
vmware11.5下载地址:http://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/
vmware11.5永久注册码:XKZYV-PK9CC-A1Y0X-K5HZL-Y65ZV (百度查到的,如有侵权请联系删除)

centos7下载地址:http://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/
安装自行百度,按步骤操作即可

1.安装docker

使用 Docker 仓库进行安装
①Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r命令查看你当前的内核版本是否支持安账docker
②更新yum包:yum update
③设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。(即安装docker依赖)
yum install -y yum-utils device-mapper-persistent-data lvm2
④设置yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
在这里插入图片描述
5⃣️可以查看所有仓库中所有docker版本,并选择特定版本安装:

yum list docker-ce --showduplicates | sort -r

6⃣️安装docker:yum install docker-ce-17.12.0.ce

⑦启动docker:systemctl start docker
设置开启开机启动:systemctl enable docker—此项非必须,根据自己需求设置

验证安装是否成功(有client和service两部分表示docker安装启动都成功了):docker version
在这里插入图片描述
8⃣️查看docker启动状态:systemctl status docker

拓展:卸载docker
①查询docker安装过的包: yum list installed | grep docker
②删除安装包:yum –y remove docker.x86_64
在步骤①中查到的包都要删除掉
③删除镜像/容器等
rm -rf /var/lib/docker

2.docker安装gerrit–development_become_any_account

dockerhub官网-docker安装gerrit
①下载gerrit镜像:docker pull gerritcodereview/gerrit
②创建一个容器,并且运行这个容器:docker run -ti -p 18080:8080 -p 29418:29418 gerritcodereview/gerrit
③查看启动的容器:docker ps

[root@centos7 ~]# docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                                              NAMES
6e3a1ba6ed82        gerritcodereview/gerrit   "/entrypoint.sh"    2 minutes ago       Up 2 minutes        0.0.0.0:18080->8080/tcp, 0.0.0.0:29418->29418/tcp   lucid_gates

修改names:docker rename lucid_gates(旧名字) gerrit(新名字)

启动容器后,访问地址:http://172.16.207.135:18080/ 进入gerrit web。
系统会默认初始有一个admin的管理员账户。点击“new account”可以注册一个账号,注册之后可以进行一些简单的配置,但要注意的一点是“Email Address”一定要配置,否则后面code review之后push到远程仓库的时候会有认证问题。(可以在push的时候去配置)

④配置gerrit.config
在这里插入图片描述

docker知识拓展:
①查看所有容器,包括停止的:docker ps -a
②docker start 启动一个已停止的容器:docker start 容器名称
③docker stop 停止一个运行的容器:docker stop 容器名称/容器id
④删除容器:docker rm 容器名称/容器id
删除镜像:docker rmi 镜像名称:tags
⑤我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式:$ docker run -itd --name gerrit1 /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
⑥docker cp ==本地与容器之间进行文件拷贝
–从本地拷贝文件到容器中: docker cp 本地文件 容器名称:容器中的路径
–从容器中拷贝文件到本地: docker cp 容器名称:容器中的文件路径 本地路径 【注意:如果本地路径想要是当前路径使用$PWD】

3.设置本地终端公钥,并添加到gerrit web页面的SSH Key

3.1在自己本地终端生成公钥和私钥

[admin@admindeMBP ~ %]  cd ~/.ssh
[admin@admindeMBP .ssh %]   ls
known_hosts

[admin@admindeMBP .ssh %] git config --global user.name “admin”
[admin@admindeMBP .ssh % ] git config --global user.email “25******93@qq.com”
[admin@admindeMBP .ssh %] git config --list
credential.helper=osxkeychain
user.name=“admin”
user.email=“2573135193@qq.com”

[admin@admindeMBP .ssh %] ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/admin/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/admin/.ssh/id_rsa.
Your public key has been saved in /Users/admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YR0yA3pdFNbG05zQ4qscGN3g2KrUvX9K4N7FbztZd3I admin@admindeMBP.lan
The key's randomart image is:
+---[RSA 3072]----+
|      ..+.*+.= . |
|     . . B..* =  |
|    . . +=.= o   |
|     . .o.+ o    |
|       .S=.  .   |
|      . +.o.... E|
|     . . ..+. oo=|
|      .  .+o ..+.|
|          ..+o o+|
+----[SHA256]-----+
[admin@admindeMBP .ssh %] ls
id_rsa		id_rsa.pub	known_hosts

3.2将本地公钥id_rsa.pub内容添加到gerrit的ssh keys后,克隆 gerrit的项目代码到本地:

[admin@admindeMBP .ssh %] git clone "ssh://admin@d6612fcb89aa:29418/work-mac-test" && scp -p -P 29418 admin@d6612fcb89aa:hooks/commit-msg "work-mac-test/.git/hooks/"
ssh: Could not resolve hostname d6612fcb89aa: nodename nor servname provided, or not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.------错误提示:不能识别hostname:d6612fcb89aa,这显示的是gerrit容器的id

解决方法1:手动将gerrit容器id:d6612fcb89aa修改为服务器ip:172.16.207.135——每次都要手动修改

git clone "ssh://admin@172.16.207.135:29418/work-mac-test" && scp -p -P 29418 admin@172.16.207.135:hooks/commit-msg "work-mac-test/.git/hooks/"

解决方法2:修改本地hosts文件,将容器id指向ip————一劳永逸,推荐此方法
我的是mac,hosts文件位置etc/hosts,添加以下内容;windows修改hosts文件可以百度
在这里插入图片描述
再次clone,成功!!
在这里插入图片描述

3.3将本地代码提交到gerrit:
在这里插入图片描述
提交成功后,gerrit可以看到:
在这里插入图片描述

4、服务器生成私钥和公钥

安装git:yum install git
验证:git --version
Git初始化并生成授权证书:

[root@centos7 ~]# git config --global user.name "admin"
[root@centos7 ~]# git config --global user.email “25******93@qq.com”
[root@centos7 ~]# git config --list
user.name=admin
user.email=“25******93@qq.com”

[root@centos7 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yOxQL+nlv4UcgrPtVCViymvyOmMEtvTNxV/wMU64cfo root@centos7
The key's randomart image is:
+---[RSA 2048]----+
|           .     |
|          + =    |
|      ..o .X.o   |
|  +  = Bo.oo+    |
| o +.o@.S.oo     |
|  . o+oO +.oE    |
|   .. * + o .    |
|    ++ o . .     |
|   ..+. . o.     |
+----[SHA256]-----+

[root@centos7 .ssh]# ls
id_rsa  id_rsa.pub
[root@centos7 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3A76l23YXqSUa6KfavmhQSV6pRmIFmtv/yZNdiNiLMSaQ6RXbU6cYld5yGrgsLYhfQBrv4+yJAPl41md4NnjnM2hTcGnnq+joWSkRAZOW+zhvrhC/prscBb9aW8KqFUJJreJ1cN6oniLhYlKiR8cTShhUrOWD6PKIgnsWr60iix6v113pbjdRmExU3ruGKFhyaQEpWepn8IvZCvarvO2nTP/rYkxsr6V+Fe28XUr8WQO+6aBrKjQJ9GZ+7GbwKvkkWlVbd5o8HqXzzCtC/khlXRvHkQMkuY9n8TOpFy2pc3M5gbLQ7cLY2GAHpty7kByhMNFnhVnf7Ky9/06B7uOd root@centos7

将服务器的公钥添加到gerrit web页面的ssh key.
在这里插入图片描述
将服务器公钥内容添加到gitlab的ssh keys中,添加后验证是否和gitlab互通:

在这里插入图片描述

[root@centos7 .ssh]# ssh git@gitlab.com
The authenticity of host 'gitlab.com (172.65.251.78)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
ECDSA key fingerprint is MD5:f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.com,172.65.251.78' (ECDSA) to the list of known hosts.
PTY allocation request failed on channel 0
Welcome to GitLab, @jingjingwangg!
Connection to gitlab.com closed.

将gitlab的公钥内容加入服务器的know_hosts中:
ssh-keyscan -t rsa gitlab.com >> ~/.ssh/known_hosts
在这里插入图片描述

5、在docker容器中生成公钥和私钥:

bash-4.4$ cd ~/.ssh
bash-4.4$ ls
known_hosts 

#初始化
bash-4.4$ git config --global user.name "admin"
bash-4.4$ git config --global user.email "25******93@qq.com"
bash-4.4$ git config --list
user.name=admin
user.email=25*******93@qq.com

#生成公钥和私钥
bash-4.4$ ssh-keygen -t rsa -C '25******93@qq.com'
Generating public/private rsa key pair.
Enter file in which to save the key (/var/gerrit/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/gerrit/.ssh/id_rsa.
Your public key has been saved in /var/gerrit/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:v0lgnrK4MtGZUXLWm7UYbsURf4wEjgk0iERlccktUzk 2573135193@qq.com
The key's randomart image is:
+---[RSA 3072]----+
| ooo+===.o++.    |
|  ..o.OoE++o o   |
|     = +oO..o o  |
|    .   * .  .   |
|   . + .S        |
|  . +  o +       |
|   .  . o o      |
|  o  . o . o     |
|   oo..   o      |
+----[SHA256]-----+
bash-4.4$ ls
id_rsa  id_rsa.pub  known_hosts

③将gerrit容器的公钥id_rsa.pub的内容添加到gitlab的ssh keys中,添加后验证是否和gitlab互通:

在这里插入图片描述

[bash-4.4]$ ssh git@gitlab.com  #验证与gitlab是否互通
The authenticity of host 'gitlab.com (172.65.251.78)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.com,172.65.251.78' (ECDSA) to the list of known hosts.
PTY allocation request failed on channel 0
Welcome to GitLab, @jingjingwangg!
Connection to gitlab.com closed.

6、配置gerrit

配置replication.confing,gerrit审查通过submit代码后触发此配置元件同步代码到gitlab

进入一个正在运行的容器:docker exec -it 容器名称/bin/bash

[root@centos7 ~]# docker exec -it gerrit /bin/bash

vi /var/gerrit/etc/replication.config

[remote "work-mac-test"]
  projects = work-mac-test
  url = git@gitlab.com:jingjingwangg/work-mac-test.git 
  push = +refs/heads/*:refs/heads/*
  push = +refs/tags/*:refs/tags/*
  push = +refs/changes/*:refs/changes/*
  timeout = 30
  threads = 3
  mirror = true
  replicationMaxRetries = 3

重启docker
replication 配置热加载:ssh -p 29418 admin@172.16.207.135 gerrit plugin reload replication
注意:服务器的公钥要添加到gerrit web页面的ssh key,否则执行上述命令会提示被阻止

7.审查代码并提交,在gitlab查看提交的代码

成功!!!!!

拓展:nginx–用于做反向代理,暂时不用

拉取nginx镜像:docker pull nginx
启动:docker run --name nginx -p 4030:80 -d nginx

web访问172.16.207.135:4030(或者80),进入nginx欢迎页。
在这里插入图片描述
–name:后跟你给容器取的名字,任意即可
-p:后面跟端口映射规则,比如
4030:80表示把外部宿主机的4030映射到容器的80即可,容器内部使用80访问nginx,宿主机使用4030访问容器,
-d表示后台运行;

配置
首先需要进入容器:docker exec -it nginx bin/bash
切换到配置文件夹:cd etc/nginx/conf.d
安装vim:

apt-get update
apt-get install vim

对default.conf配置文件进行编辑:
在这里插入图片描述
重启nginx的docker容器,访问172.16.207.135:4030会跳转到gerrit的web页面

总结:以上使用的是development_become_any_account认证,如果你选择了development_become_any_account,在页面顶端会有一个Become链接,通过它可以进入注册/登录页面;仅用于测试和学习

如果使用http认证呢?下面进行了尝试–http认证:

1.在gerrit容器中修改:vi /var/gerrit/etc/gerrit.config:
在这里插入图片描述

以root身份登陆gerrit容器:docker exec -it --user root gerrit /bin/bash
安装httpd工具:yum -y install httpd-tools
用httpd生成账号密码:htpasswd -c gerrit.password admin
给gerrit.password文件赋权限:chmod 777 gerrit.password,这样其他用户登陆gerrit容器也能生成新账户了
2.安装nginx1容器
创建并启动nginx1容器:docker run --name nginx1 -p 4030:80 -p 4031:81 -d nginx
浏览器访问ip:4030,进入nginx欢迎页

将gerrit容器生成的gerrit.password文件拷贝到nginx1容器内以下位置:/etc/nginx/conf.d/gerrit.password

进入nginx1容器:docker exec -it nginx1 /bin/bash
在default.conf文件的同级目录下新建处理gerrit的文件:vi gerrit.conf

root@f1ca43168d61:/etc/nginx/conf.d# ls
default.conf  default.conf.cp  gerrit.conf  gerrit.password
root@f1ca43168d61:/etc/nginx/conf.d# cat gerrit.conf 
server {
     listen *:81;
     #server_name gerrit.microwu.com;
     server_name gerrit1;
     allow   all;
     deny    all;

     auth_basic "Welcomme to Gerrit Code Review Site!";
     auth_basic_user_file  /etc/nginx/conf.d/gerrit.password;

     location / {
        proxy_pass  http://172.17.0.3:8080;      # gerrit容器ip,通过命令:docker inspect 容器名 获得容器ip
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
     }
   }
root@f1ca43168d61:/etc/nginx/conf.d# 

3.重启nginx1

4.浏览器访问
浏览器访问地址:服务器ip:4031,弹出输入账号密码框
输入admin提示forbidden,各种尝试没有找到解决方法
生成的其他用户可以正常登陆
有解决办法的小伙伴欢迎私聊~~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐