搭建轻量级GIT服务器

使用gitolite搭建git服务器

关于Gitolite
Gitolite是一款免费的开源Git服务器,如果要在单个服务器中托管多个git存储库,Gitolite应该时最完美的。 Gitolite是Git之上的访问控制层,因此您可以配置基于用户设置Git访问权限。 Gitolite提供对许多gitolite用户的访问,并控制对许多Git存储库的访问。

参考文档:
https://juejin.im/post/5a7802846fb9a063317c2e92
https://www.linuxidc.com/Linux/2017-07/145764.htm

  以下是Gitolite的图形概述:

 

 

 

 

 

特色一目了然
关于Gitolite功能,我们可以列出以下内容:

非常强大的规则语言(根据分支/标签名称,触摸的文件/目录,更改的文件的大小,更改的文件的数量等决定)。
编写规则的方便功能(备份组,用户组,从LDAP获取用户组信息,包括文件,宏...)
高度可定制和可脚本化,特别是用户自定义命令。 许多内置的命令和选项。
强大灵活的镜像系统。
用户可以创建自己的回馈并设置访问权限(如果允许的话)。
在本教程中,让我们看看如何在CentOS 7最小服务器中安装搭建Git服务器Gitolite。

操作系统:CentOS 7 64位最小服务器

一、准备系统环境(root用户操作)1.更新服务器并安装先决条件
使用命令以root用户身份更新CentOS 7服务器:

[root@server1 ~]# yum update

  


安装以下前提条件:

[root@server1 ~]# yum -y install autoconf git

  

2.创建Gitolite用户
接下来,我们为Gitolite创建一个用户,并使用以下命令为用户设置密码:

[root@server1 ~]# adduser git
[root@server1 ~]# passwd git

  

3.创建SSH公钥并将其复制到git用户
我们需要创建一个SSH公用密钥并将其发送到Gitolite服务器。
使用命令创建SSH密钥:

[root@server1 ~]# ssh-keygen
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:
de:5f:11:3e:ab:91:c2:6e:3d:99:82:36:54:8a:fd:9d root@server1.linuxidc.local
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| . . . |
| oSo + |
| ..+o . + |
| ..o+oo+o |
| +.+oE+ |
| . o..o. |
+-----------------+

  

如上图所示,有两个keys生成。 一个是私钥,你应该保密,另一个是公钥。 你应该分享这个公钥,无论你想与谁沟通。 在我们的例子中,我们分享这个公钥给用户'git'。 记住我们以前的步骤已经创建了一个名为“git”的用户。

首先制作您的公钥的副本,如下所示。

[root@server1 ~]# cp .ssh/id_rsa.pub sk.pub

  


现在,让我们使用以下命令将公钥复制到用户'git'的主目录中:
[root@server1 ~]# cp sk.pub /home/git
如果您从远程系统复制该密钥,则应该使用以下命令:

[root@server1 ~]# scp sk.pub git@<ip-address>:/home/git

  


您可以验证密钥是否已成功传输到“git”用户的主目录:

[root@server1 ~]# ls /home/git/

 

 

 

运行以下命令来更新Bash:

[git@server1 ~]$ source .bash_profile

  

二、安装 Gitolite(git用户操作)[root@server1 ~]# su - git #切换到git用户

[git@server1 ~]$ mkdir ~/bin #在“git”用户的主目录中创建一个名为bin的目录
[git@server1 ]$ git clone git://github.com/sitaramc/gitolite #git克隆到最新的Gitolite存储库 

  


输出如下内容:

Cloning into 'gitolite'...
remote: Counting objects: 9225, done.
remote: Total 9225 (delta 0), reused 0 (delta 0), pack-reused 9224
Receiving objects: 100% (9225/9225), 3.79 MiB | 260.00 KiB/s, done.
Resolving deltas: 100% (5269/5269), done.
[git@server1 ~]$ gitolite/install -ln ~/bin #使用命令,在〜/ bin目录中创建Gitolite符号链接
[git@server1 ~]$ ls ~/bin #在〜/ bin目录中看到Gitolite符号链接

我们已经完成了必要的必备步骤。 现在,让我们继续安装Gitolite。

 

 

 

 

[git@server1 ~]$ ~/bin/gitolite setup -pk sk.pub #SSH公钥安装Gitolite,把root用户的key加入到git管理权限

  


输出如下内容:

Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
(this is normal on a brand new install)
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)

  


如果您收到以上输出,恭喜! Gitolite已经成功安装。
你可能会看到一些警告。 没事。 它们在新安装中是正常的。

三、测试Gitolite(root用户操作)[git@server1 ~]$ su - root

[root@server1 ~]# git clone git@192.168.1.150:gitolite-admin #从新安装的Gitolite服务器克隆gitolite-admin存储库,做此操作后可以获取到git的admin权限

  


您将被要求输入root用户密码。 因为我们已经交换了SSH密钥。
输出如下内容

Cloning into 'gitolite-admin'...
The authenticity of host '192.168.1.150 (192.168.1.150)' can't be established.
ECDSA key fingerprint is ed:6b:ab:6d:b8:58:d0:f2:77:67:62:ef:90:51:26:ad.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.150' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

  


使用命令检查gitolite-admin存储库内容:

[root@server1 ~]# ls

  

 

 

 

[root@server1 ~]# ls gitolite-admin/

  

 

 

 

OK。 Gitolite正在工作!

四、指定远端机器获取admin权限,作为管理端1、生成ssh-key (新机器上操作)

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
#cd .ssh/
#cp id_rsa.pub dennis.pub
#scp dennis.pub git@18.163.53.252:/tmp #将key上传到git-server

  

2、添加key(git-server的git用户下操作)

[git@server1 ~]$ cd bin/ 
[git@server1 ~]$
[git@server1 ~]$~/bin/gitolite setup -pk /tmp/dennis.pub

  

3、在git-server的root用户授权新的机器的用户有admin权限

[git@server1 ~]$su - root
[root@server1 ~]#cd /root/gitolite-admin
[root@server1 gitolite-admin]#vim conf/gitolite.conf #把新添加key的用户名加入到conf文件,@admins相当于一个变量!后面指定用户的名字就可以了!

  

 

 

 

[root@server1 gitolite-admin]#git add .
[root@server1 gitolite-admin]#git commit -m "dennis" #dennis是注释部分,内容自定义,作为标记即可
[root@server1 gitolite-admin]#git push origin master #然后才生效!

  

4、测试(新机器上操作)

[root@test ~]# git clone git@18.163.53.252:gitolite-admin #克隆成功,以后就可以在这台机器上管理git了
Cloning into 'gitolite-admin'...
remote: Counting objects: 40, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 40 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (40/40), 4.29 KiB | 0 bytes/s, done.
Resolving deltas: 100% (4/4), done.

5 gitconf权限模板案例

@admins = jeff awen1  # 组权限
@kf_users =  ajun AKingdrake1 aries #组权限
@cs_users =  monroe setevn dc_kf # 组权限

@repos = xy00000 xy00001 # 仓库名
@react = react_pro  # 仓库名
@other = android hb000  # 仓库名
@test = test_zent   # 仓库名

repo gitolite-admin  # 项目仓库
        RW+     =       @admins   # 分支权限
 
repo @repos   #项目仓库
        -   master =    @kf_users  # 分支权限
        -   master =    @cs_users   # 分支权限
        -   gray   =    @kf_users  # 分支权限
        -   dev    =    @kf_users  # 分支权限
        -   dev*   =    @kf_users  # 分支权限
        RW+        =    @admins  # 分支权限
        RW         =    @all  # 分支权限

repo @react    #项目仓库
        -   master =    @kf_users  #分支
        -   master =    @cs_users  # 分支
        RW+   =  @admins #特殊权限
        RW    =  @all   # 特性权限

repo @other #项目仓库
        RW+   =  @all  #特殊权限
repo @test   #项目仓库
        RW+   =  @all  #特殊权限

  

  

使用配置权限说明

        C               代表创建。仅在 通配符版本库 授权时可以使用。用于指定谁可以创建和通配符匹配的版本库。
        R, RW, 和 RW+    R 为只读。RW 为读写权限。RW+ 含义为除了具有读写外,还可以对 rewind 的提交强制 PUSH。
        RWC, RW+C       只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等)。
        RWD, RW+D      只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。
        RWCD, RW+CD     只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等),D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。
        -             (是的,这是一个减号,你没看错)   是一条禁用指令。只对写操作起作用,即禁用用户的写操作。

  

  

 

posted @ 2019-10-24 11:27  Boks  阅读(1127)  评论(0编辑  收藏  举报