通过Linux服务器搭建Git私有服务

目前通过主流的代码托管平台GitHub或者Gitee都能够解决团队协同工作的疑难,如果不借助这些第三方平台,我们能否搭建一个类似于私服的托管Git仓库,只允许少部分人访问,同样也能进行权限管控,答案是可以。

一、准备环境

首先,我们考虑使用ssh克隆仓库,而暂时不考虑https的方式。若想直接通过gitolite来管理私有Git服务,请略过二、三(手动搭建,比较费时间,但是会增加你对Git服务的理解),直接查看第四部分的内容。

在此,我们需要准备好三个前提条件:

  • ssh
  • git
  • 新建一个用户名为git的Linux用户
  1. 一般情况下,ssh是服务器内置的,可以通过ssh -v命令来检查是否安装。

image-20201209113254008

  1. 安装git:
yum install -y git

通过git --version来校验是否安装成功

image-20201209113437079

  1. 新建git用户

创建用户名为git的用户:

adduser git

赋予git用户密码(输入两遍密码,注意密码强度有一定的校验):

passwd git

此时,我们的git新用户会在Linux的/home路径下生成自己的用户文件夹,具体详情可参见 Linux的用户管理、操作历史日志

image-20201209113946675

二、开始配置

接下来,我们需要通过新创建的git用户来完成后续的操作。

  1. 首先我们切换至git用户:
su git
  1. 进入git账号的用户目录
cd /home/git
  1. 创建.ssh文件夹
mkdir .ssh
  1. 在.ssh文件夹下创建authorized_keys文件,后续用来盛放客户端的ssh公钥
touch authorized_keys
  1. 设置权限
chmod 700 /home/git/.ssh/
chmod 600 /home/git/.ssh/authorized_keys

上述步骤依次完成后,需要将之后克隆代码的客户端ssh公钥加到authorized_keys文件中,即一行公钥对应一个用户。

作者的机器是Windows系统,故ssh的公钥地址在C:\Users\用户名.ssh,以下是不同系统的ssh公钥地址,仅供参考:

Windows系统:C:\Users\用户名
Linux系统:/home/用户名
Mac系统:/Users/用户名

具体关于ssh的资料,详情参考 配置GitHub的SSH克隆

这里,我们将id_rsa.pub的文件内容用记事本打开,并复制追加到服务器上的authorized_keys文件中。

image-20201209115132210

vim /home/git/.ssh/authorized_keys

使用vim命令打开文件,并进行粘贴保存。

image-20201209115342220

三、测试git仓库

  1. 切换到git用户
su git
  1. 在git用户目录下创建一个test.git的测试仓库文件夹
cd /home/git
mkdir test.git
  1. 初始化该git仓库
cd /home/git/test.git
git init --bare

控制台输出如下内容表示创建成功:Initialized empty Git repository in /home/git/test.git/

之后,我们在本地Windows客户端机器上,用git bash打开命令窗口,输入以下命令:

git clone ssh://git@ip:port/home/git/test.git

在这里,需要注意的是,ssh连接的默认端口都是22,即port=22,但是作者的服务器修改过默认ssh连接端口,故这里按照读者的实际情况填写即可。

image-20201209120137254

出现以上返回结果即表示成功。

接下来测试提交,推送一切都正常,说明私有Git服务搭建成功。这种方式对于用户权限的管控比较弱,甚至于可以说没有权限管控,如果只是针对个人使用已经足够了。

最后我们介绍一种新的Git私有服务搭建方式,借助gitolite来进行管理,需要注意的是如果采用下文的gitolite,则需要将前文/home/git/.ssh/authorized_keys文件删除或者重命名为bak备份文件,两种方式不可共存。

四、通过gitolite管理Git服务

  1. 首先使用第一步准备环境的git账号进行登录服务器,切换到/home/git路径后下载gitolite
# 进入git主目录
cd /home/git
# 下载gitolite的仓库
git clone https://github.com/sitaramc/gitolite
  1. 创建bin文件夹
cd /home/git
mkdir -p $HOME/bin
  1. 使用下载gitolite仓库中的install执行文件
cd /home/git/gitolite
./install -to $HOME/bin
  1. 需要将管理员的ssh公钥绑定到gitolite中

    这里我把公钥上传到服务器上,并重命名为admin.pub,随后执行setup命令

    image-20201215162503017

~/bin/gitolite setup -pk ~/admin.pub
  1. 克隆gitolite-admin项目

    我们进入到/home/git/repositories目录中会发现,gitolite已经有初始化的两个默认仓库了,其中gitolite-admin就是我们管理成员权限的仓库,我们将它克隆到本地:

    image-20201215164326019

    打开客户端的Git Bash,在命令框中输入以下命令:

    git clone ssh://git@ip:port/gitolite-admin.git
    

    image-20201215163643838

    克隆成功后,打开gitolite-admin文件夹会发现里面有两个文件夹,分别是conf和keydir

    image-20201215163709303

# ├── conf                # 配置文件夹
# │   └── gitolite.conf   # 配置权限的文件
# └── keydir              # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下
#     └── admin.pub(管理员公钥)
  1. 配置权限

    使用记事本打开conf目录下的gitolite.conf,文件内容如下:

    @admin = admin
    
    repo gitolite-admin
        RW+     =   @admin
    
    repo testing
        RW+     =   @all
    
    • repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
    • RW 代表可读可写
    • @all 代表所有人。
    • masterdev代表分支

    例如,我可以新建一个叫做@visitor的组别,里面有两个人,分别叫xiaosan、xiaosi,且这两个人的.pub公钥文件都要给我,文件名要跟组别中的名称对应,即xiaosan.pub、xiaosi.pub,将这两个公钥文件放在keydir目录下,即该目录下除了管理员公钥文件之外再加两个用户公钥,总共是三个:

    image-20201215165847782

    这里我们新建一个叫做personal的项目,故配置文件做修改后的结果是这样的:

    @admin = admin
    @vivitor = xiaosan xiaosi
    
    repo gitolite-admin
        RW+     =   @admin
        R       =   @visitor
    
    repo testing
        RW+     =   @admin
        R       =   @visitor
    
    repo personal
    	R       =   @all
    
  2. 将gitolite-admin仓库中的更改提交到服务器上

    git add .
    git commit -m "modify"
    git push
    

    image-20201215170519754

image-20201215170607754

​ 到服务器上查看/home/git/repositories目录下,会发现我们配置文件中加上的personal仓库自动给我们创建好了,这就是gitolite的优势。

五、总结

​ 通过私有Git服务的搭建,能够清晰地了解版本控制的深层次含义。且通过私有仓库的搭建可以提高项目的安全性和私密性,在搭建过程中通过参考不同的博客资料发现博主们都没有将细节暴露出来,导致搭建报错浪费了较多的时间,故作此文仅供参考。

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值