CentOS6.5 Gitolite构建Git镜像服务器

如有大量其余的客户机与Git服务器不在同一个数据中心,这样在批量进行Git克隆等操做时,会出现专线带宽长时间占用、操做速度缓慢等现象,而长时间占用带宽会给业务带来不良影响。解决这种现象,咱们能够在客户机所在的数据中心搭建一台Git镜像服务器(Git镜像服务器与Git服务器相同,客户机能够直接从这台服务器进行克隆等操做)。git

下面来进行Git镜像服务器的构建:github

1、环境准备

三台CentOS6.5 系统服务器,一台作客户机,两台作服务机,配置以下:vim

客户机:服务器

主机名:gclient.ylhb.comssh

IP:10.0.0.201curl

hosts绑定:ide

10.0.0.211 gserver1.ylhb.com 
10.0.0.212 gserver2.ylhb.com

主服务机1:测试

主机名:gserver1.ylhb.comthis

IP:10.0.0.211url

hosts绑定:

10.0.0.211 gserver1.ylhb.com 
10.0.0.212 gserver2.ylhb.com

镜像服务机2:

主机名:gserver2.ylhb.com

IP:10.0.0.212

hosts绑定:

10.0.0.211 gserver1.ylhb.com 
10.0.0.212 gserver2.ylhb.com

2、安装及配置gitolite(两台服务机上)

1.安装git及相关包

yum install zlib-devel perl-CPAN perl-devel curl-devel gettext expat-devel gettext-devel openssl-devel perl-Time-HiRes git -y

2.建立git用户

useradd -d /data/git git  
echo '111111' | passwd --stdin git

3.安装gitolite

su - git  
mkdir bin  
git clone https://github.com/sitaramc/gitolite.git  
./gitolite/install --to /data/git/bin/

4.生成git用户秘钥对

ssh-keygen -t rsa    #一直回车

5.建立.ssh/config文件并分别配置以下

主服务机1:

vim /data/git/.ssh/config
host gserver2
user git
hostname 10.0.0.212
identityfile /data/git/.ssh/id_rsa
文件权限设置为644

chmod 644 /data/git/.ssh/config
镜像服务机2:

vim /data/git/.ssh/config
host gserver1
user git
hostname 10.0.0.211
identityfile /data/git/.ssh/id_rsa
文件权限设置为644
chmod 644 /data/git/.ssh/config

3、客户端生成秘钥对,为gitolite配置管理员

客户机:

安装git

yum install git -y

建立git用户(root用户下)

useradd git
echo '111111' | passwd --stdin git
生产git用户密钥对
ssh-keygen -t rsa    #一直回车
上传公钥到两台服务机,并改文件名为admin.pub

scp .ssh/id_rsa.pub git@10.0.0.211:/tmp/admin.pub
scp .ssh/id_rsa.pub git@10.0.0.212:/tmp/admin.pub

下载服务机1上的git用户的SSH公钥,并该文件名为server-server1-pub

scp git@10.0.0.211:~/.ssh/id_rsa.pub /tmp/server-gserver1.pub

两台服务机:

切换到git用户,为gitolite配置管理员

su - git
./bin/gitolite setup -pk /tmp/admin.pub

4、客户机克隆gitolite管理库并配置

切换到git用户,建立两个目录gserver1和gserver2,分别克隆主服务机和镜像服务机管理库

gserver1目录下:

git clone git@10.0.0.211:gitolite-admin.git  
cd gitolite-admin
cp /tmp/server-gserver1.pub keydir/
配置conf/gitolite.conf

vim conf/gitolite.conf
repo gitolite-admin
    RW+     =   admin server-server1
 
repo testing
    RW+     =   @all
提交到远程

git add . && git commit -m "1" && git push

gserver2目录下:

git clone git@10.0.0.212:gitolite-admin.git  
cd gitolite-admin
cp /tmp/server-gserver1.pub keydir/
配置conf/gitolite.conf
vim conf/gitolite.conf
repo gitolite-admin
    RW+     =   admin server-server1
 
repo testing
    RW+     =   @all
提交到远程
git add . && git commit -m "1" && git push

验证:

主服务机上,git用户下执行如下命令

ssh gserver2 info

出现hello server-gserver1, this is git@gserver2 running gitolite3 v3.6.5-4-g6ed0156 on git 1.7.1则配置成功


5、配置mirror功能

客户机上、git用户gserver一、gserver2目录下,分别配置gitolite.conf以下,并提交

repo gitolite-admin
    RW+     =   admin server-gserver1
    option mirror.master = gserver1
    option mirror.slaves = gserver2
    option mirror.redirectOK = all
 
repo testing
    RW+     =   @all
    option mirror.master = gserver1
    option mirror.slaves = gserver2
    option mirror.redirectOK = all
提交更改到远程

git add . && git commit -m "2" && git push
主服务机1上,git用户下修改".gitolite.rc"文件

vim .gitolite.rc
HOSTNAME                  =>  "gserver1",
 'mirror',
 'Mirroring',
镜像服务机上,git用户下修改".gitolite.rc"文件
vim .gitolite.rc
HOSTNAME                  =>  "gserver2",
 'mirror',
 'Mirroring',

以上即完成镜像服务器配置。


6、测试验证

客户机上,git用户gserver1目录下克隆主服务机1的测试库,在里面建立文件并提交,看是否能同步到镜像服务机2

git clone git@10.0.0.211:testing.git
cd testing/
echo "ylhb" > ylhb
git add . && git commit -m "3" && git push origin master
客户机上,git用户gserver2目录下克隆镜像服务机2的测试库,查看testing里是否有文件ylhb。

git clone git@10.0.0.212:testing.git
ls testing
能够看到文件同步,则镜像服务器配置成功。