背景:原有gerrit+git服务器一套(以下称老gerrit),现在需要在备份机器上面也搭建一套gerrit(以下称新gerrit)。
目前老gerrit服务器信息为:centos gerrit 2.12.2+jdk1.8+mysql5.1.73+nginx
新gerrit服务器信息为:window server gerrit 2.12.2+jdk1.8+mysql5.1.73+Apecha
gerrit版本,下载了跟之前老版本一样的版本包 2.12.2
Gerrit 2.12 Release | Gerrit Code Review
Gerrit 2.12 Release | Gerrit Code Review
下载Java1.8:
https://www.oracle.com/java/technologies/downloads
Apache下载:
https://www.apachehaus.com/cgi-bin/download.plx
Apache和Java没法下载,在网上找了其他网址下载对应的包
1、安装java,直接下一步安装即可。安装完配置环境变量Path添加jdk bin目录
2、安装apache2,解压下载的压缩包,提取里面的Apache24目录到E:\Apache24
设置环境变量Path添加Apache24 bin目录
修改 E:\Apache24\conf\httpd.conf
Define SRVROOT "E:\Apache24"...ServerName localhost:80...# 保证下面这些选项是非注释状态,即去掉前面的#
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
双击“E:\Apache24\bin\httpd.exe”运行服务
启动Apache失败,原因是机器上还部署了VisualSVN-Server,占用了443端口
网上查找到修改Apache端口的方法:
修改文件(一般在此目录下:E:\Apache24\conf\extra)httpd-ssl.conf 、httpd.ahssl.conf,将443端口替换为442
再次启动httpd.exe,这次没报错,查看了442监听端口正常
然后浏览器输入“http://localhost”,若出现如下介绍页面则Apache安装且运行成功。
再次修改 E:\Apache24\conf\httpd.conf, 在文件的末尾处添加一下内容
<VirtualHost *:80>ServerName localhost #这里换成新gerrit的IPProxyRequests OffProxyVia OffProxyPreserveHost On<Proxy *:80>Require all granted</Proxy> <Location "/login/">AuthType BasicAuthName "Gerrit Code Review"Require valid-userAuthBasicProvider fileAuthUserFile E:/Gerrit/etc/gerrit.passwd #这里是gerrit用户账号密码文件</Location>AllowEncodedSlashes OnProxyPass / http://localhost:8080/ #这里换成新gerrit的IP
</VirtualHost>
运行以下命令注册服务
httpd.exe -k install -n "Apache24"
这个提示并不是错误提示,这句话想要表达的意思是说:如果这行下边出现错误则解决错误后再启动!,如果下边没有出现错误那边直接启动即可.
注册服务之后,在启动Apache服务报错如下:
解决方法:
没有安装:vc_redist_x64 导致的,打开链接:Apache VS17 binaries and modules download
下载vc_redist_x64并安装。
删除并重新添加Apache为本地服务,启动服务,可以正常运行了
3、安装mysql(由于老gerrit上面用的是mysql,所以新gerrit上面也需要安装)
gerrit里面自带的是H2的数据库
官网:MySQL 官网找不到以前老版本的mysql了,从其他网站下载了一个5.1.73的window版本
选择默认,下一步,点击安装:
后面直接默认配置下一步,直到下面页面,这个勾记得保留:
点击finish之后进入这个界面:
这个页面是设置数据库root密码的,这个密码要记住:
其他没截图的就是默认安装
查看环境变量是否配置mysql,没有的话需要配置下
用工具连接mysql数据库,用户名密码用上面设置的那个,查看mysql数据文件的存放路径
show global variables like "%datadir%"
例如mysql的数据文件存放路径为:C:\ProgramData\MySQL\MySQL Server 5.1\Data\
停掉mysql服务,将老gerrit服务器上面的mysql数据库相关数据文件拷贝进去:数据库的文件和ibdata1文件拷贝进去到C:\ProgramData\MySQL\MySQL Server 5.1\Data\下面
启动msyql服务
用连接数据库的工具查看数据库是否存在:
因为老的gerrit服务器上面连接数据库的用户是gerrit,所以需要给gerrit用户数据库连接权限,配置对应的权限:gerritdb是数据库的名称,BY后面是gerrit用户对应的密码:
GRANT ALL PRIVILEGES ON gerritdb.* TO 'gerrit'@'localhost' IDENTIFIED BY 'gerrit';
FLUSH PRIVILEGES;
C:\Users\Administrator\Desktop>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.1.73-community MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> GRANT ALL PRIVILEGES ON gerritdb.* TO 'gerrit'@'localhost' IDENTIFIED BY 'gerrit'; #BY后面是gerrit用户对应的密码
Query OK, 0 rows affected (0.01 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
4、安装gerrit
准备工作(因为是迁移,需要用到老数据,所以很多数据需要沿用老gerrit上面的):
a、由于mysql-connector-java-5.1.21.jar、bcpkix-jdk15on-152.jar、bcprov-jdk15on-152.jar安装过程下载失败,需要从以前老的gerrit服务器上面拷贝到新的gerrit/lib下面
b、中间的时候因为没有"ssh-keygen"程序报错了,电脑之前安装过git bash,里面有这个程序,故把路径加到环境变量里面:
c、老的gerrit上面的etc/ssh_host_key文件拷贝过来放到新gerrit的etc目录下面
d、老gerrit上面的cache目录拷贝到新的gerrit目录下
e、老gerrit上面的index目录拷贝到新的gerrit目录下
(E:\Gerrit是安装新gerrit的地方,里面存放老gerrit数据的时候没有的目录可以自己建,其他目录在安装gerrit的时候会自己生成)
f、开始安装gerrit,把下载的war包放到对应目录下(E:\Gerrit),安装过程中需要关注的一些重要信息如下:
安装命令:java -jar gerrit.war init -d E:\Gerrit
E:\Gerrit>java -jar gerrit.war init -d E:\Gerrit
...Location of Git repositories [git]: E:\git #这里指定到备份的git数据目录下面*** SQL Database
***Database server type [h2]: mysql #用mysql这里需要填写Gerrit Code Review is not shipped with MySQL Connector/J 5.1.21Server hostname [localhost]:
Server port [(mysql default)]:
Database name [reviewdb]: gerritdb #跟老gerrit数据库保持同名
Database username [Administrator]: gerrit #数据库用户
gerrit's password :confirm password :....Authentication method [OPENID/?]: HTTP
Get username from custom HTTP header [y/N]?
SSO logout URL :
Enable signed push support [y/N]?*** Review Labels
***Install Verified label [y/N]?*** Email Delivery
***SMTP server hostname [localhost]: smtp.exmail.qq.com #smtp这块根据个人需求输入
SMTP server port [(default)]: 25
SMTP encryption [NONE/?]:
SMTP username [Administrator]: abcd@163.com
yanfazhongxin@fsmeeting.com's password :confirm password :*** Container Process
***Run as [Administrator]: Administrator
Java runtime [C:\Program Files\jdk1.8.0_73\jre]:
Copy gerrit.war to E:\Gerrit\bin\gerrit.war [Y/n]? y
Copying gerrit.war to E:\Gerrit\bin\gerrit.war*** SSH Daemon
***Listen on address [*]:
Listen on port [29418]:.....Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address [*]:
Listen on port [8080]:
Canonical URL [http://localhost:8080/]: http://1.1.1.1:8080/ #这里可以改成对应的服务器IP,如果IP会变,可以用localhost代替*** Plugins
***Installing plugins.
Install plugin singleusergroup version v2.12.2 [y/N]? y
Install plugin commit-message-length-validator version v2.12.2 [y/N]? y
Install plugin reviewnotes version v2.12.2 [y/N]? y
Install plugin replication version v2.12.2 [y/N]? y
Install plugin download-commands version v2.12.2 [y/N]? y
Initializing plugins.
No plugins found with init steps.
用htpasswd为gerrit设置admin户名和密码,命令如下:(之前从老gerrit上面拷贝过来的gerrit.passwd无法生效,需要重新设置用户名密码)
htpasswd.exe -c E:\Gerrit\etc\gerrit.passwd admin
修改 E:\Gerrit\etc\gerrit.config成如下内容,注意#的地方
[gerrit]basePath = E:\\gitcanonicalWebUrl = http://1.1.1.1:80/ #新gerrit服务器的IP
[database]type = mysqlhostname = localhostdatabase = gerritdbusername = gerrit
[index]type = LUCENE
[auth]type = HTTP
[receive]enableSignedPush = false
[sendemail]smtpServer = smtp.exmail.qq.comsmtpServerPort = 25smtpUser = abcd@163.com
[container]user = AdministratorjavaHome = C:\\Program Files\\jdk1.8.0_73\\jre
[sshd]listenAddress = *:29418
[httpd]listenUrl = proxy-http://*:8080/
[cache]directory = cache
5、配置gitweb
在 E:\Gerrit\etc\gerrit.config增加如下内容:
[gitweb]cgi = C:\\Program Files\\Git\\mingw64\\share\\gitweb\\gitweb.battype = gitweb
gitweb配置
gitweb.bat的内容如下:
@echo off
"C:\Program Files\Git\usr\bin\perl.exe" "C:\Program Files\Git\mingw64\share\gitweb\gitweb.cgi" %*
安装CGI模块
参考博主链接:Windows环境下配置Gerrit和GitWeb要点说明_gerrit window-CSDN博客
(主要问题是在Windows版本的Git上,gitweb的支持并不好,需要安装CGI模块)
可下载地址:http://search.cpan.org/CPAN/authors/id/M/MA/MARKSTOS/CGI.pm-3.65.tar.gz
把压缩包解压出来的CGI.pm-3.65/lib/目录中的内容复制到C:\Program Files\Git\mingw64\share\perl5\site_perl中。
执行gitweb.bat时,系统并不从mingw64目录中搜索相关CGI.pm,而是从usr目录下面找
所以将mingw64\share\perl5\site_perl目录复制到usr\share\perl5中:
再修改C:\Program Files\Git\mingw64\share\gitweb\gitweb.cgi文件中
# absolute fs-path which will be prepended to the project path
our $projectroot = “/E/git”;
our $projectroot是需要设置gerrit中代码仓库的目录位置。
改完之后重启Apache和gerrit
点击页面的gitweb报错如下:
[2024-11-05 11:00:17,837] [Gitweb-ErrorLogger] ERROR com.google.gerrit.httpd.gitweb.GitwebServlet : CGI: ???????????????ò?í±ê??·¨?????·?? [2024-11-05 11:00:17,837] [HTTP-32] ERROR com.google.gerrit.httpd.gitweb.GitwebServlet : Non-zero exit status (1) from C:\Program Files\Git\mingw64\share\gitweb\gitweb.bat
这个报错是由于上面的gitweb.bat文件里面的双引号用的是中文的双引号导致的,改了之后重启Apache和gerrit就可以了
至此整套迁移环境搭建完毕,启动服务的顺序如下:
apache
mysql
gerrit
可正常访问数据(^-^)