前言
用git搭建git服务器是一个很老的话题,我之前用gitlab搭建过,用git原生的方式搭建过,但是对我个人而言,gitlab有点浪费资源,占内存太大,自己本来就是一个博客服务器,配置比较低,而且git用的人不多,用gitlab太浪费了。(我公司使用gitlab,这个适合公司团队使用。),用原生的方式搭建自己用可以,但是一旦想给别人用一下,就有点问题了。
一、暴露git目录
二、权限不能控制
因此,用git的gitosis搭建git服务器,对我来说比较合适。
一、占用内存空间等相对较少,
二、隐藏git目录
三、操作简单方便
下面我介绍一下CentOS7下面用gitosis搭建git服务器方法及步骤及常见问题。
原生方法搭建
想了一下,本文标题是CentOS7搭建git 服务器,还是讲一下原生方式搭建git服务器吧!
第一步,安装git:
$ yum install git
第二步,创建一个git用户,用来运行git服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到
/home/git/.ssh/authorized_keys
文件里,一行一个。(也是通过这个方法关联git公钥的)
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/haorooms.git,在/srv目录下输入命令:
$ sudo git init --bare haorooms.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git(git用户):
$ sudo chown -R git:git haorooms.git
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/haorooms.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。
这个方式的缺点我最上面写过了,git是全路径,假如你是放到/home/www/git/haorooms.git,那个clone地址就是:
$ git clone git@server:/home/www/git/haorooms.git
看起来总感觉怪怪的,自己使用可以!
gitosis搭建git服务器
用gitosis搭建服务器,网上也有不少相关文章,但是好多写的不清楚,关于gitosis搭建git服务器,我在这里详细写一下:
安装gitosis有2种方式:
1、服务器 - 服务器 安装【这种方式缺点是每次新增修改配置(假如新增一个用户)都要登陆服务器】
2、服务器 - 客户端 安装 【这种方式新增用户直接在本地客户端修改,git提交就可以了,方便快捷,但是客户端电脑不在身边,想要新增用户的时候,就比较麻烦了!】
下面我以服务器 - 客户端 安装为例介绍(服务器 - 服务器类似)
步骤如下:
首先是在git服务器上操作,连接登录git服务器:
一、安装git
直接和上面一样,yum安装,也可以下载git压缩包安装。此步骤省略。
二、添加git用户
git的用户名可以自己随便起,也可以直接用git,清晰明了,本文暂用git用户名
$ adduser git ;
$ passwd git ; //设置用户密码 (假如是自己使用,此步骤可以省略)
三、 Gitosis的安装
注:Gitosis依赖python,假如服务器没有安装python ,需要先安装python
$ yum install python-setuptools
然后进行地址克隆,gitosis的github地址是:https://github.com/res0nat0r/gitosis
git clone https://github.com/res0nat0r/gitosis.git
然后进入进行安装
$ cd gitosis
$ python setup.py install
四、Gitosis服务初始化
此步骤包含把客户端电脑的ssh key上传到服务器,
为了避免客户端和服务器端混淆,此处客户端操作省略,因为客户端操作很简单(用过git的你应该都懂得),就是找到你的
id_rsa.pub
并将id_rsa.pub上传到git服务器
/tmp/id_rsa.pub
这个目录下面。
关键步骤如下:
$ sudo su - git #切换到git用户身份下,不然执行下面的初始化后客户端管理员是无法通过密钥来访问的,权限的问题
$ gitosis-init < /tmp/id_rsa.pub
$ cd ~ #回到git用户的宿主目录
$ ls #查看目录文件
gitosis repositories #自动生成两个目录
确保gitosis-admin版本库的钩子脚本可执行(假如上面安装成功,此步骤忽略)
chmod a+x ~git/repositories/gitosis-admin.git/hooks/post-update
报错处理方案:
当你运行
gitosis-init < /tmp/id_rsa.pub
可能会有如下报错:
错误一:
OSError: [Errno 13] Permission denied: '/home/git/gitosis'
解决
# chown -R git:git /home/git/
错误二:
oserror: [errno 2] no such file or directory: '/home/git/repositories/gitosis-admin.git
这个错误是可能你之前的repositories没有安装好,删掉repositories,重新上面步骤四里面的关键步骤操作。
错误三:
su: warning: cannot change directory to /home/git/: Permission denied
说明目录权限不够,
解决方案,给目录添加权限就可以了:
chmod -R 755 /home/git/
就可以了!
管理Gitosis
操作到这来,恭喜你,git服务器基本上已经安装好了,下面是Gitosis的管理和配置。
假如管理你是在客户端进行,此步骤可以在客户端操作!(包括上面的客户端ssh-keygen)
客户端克隆 gitosis-admin管理库
$ git clone git@server:gitosis-admin.git
$ cd gitosis-admin/
克隆完成后,进入gitosis-admin目录下,看有哪些文件
.git (隐藏的目录, 如果在windows下看不见,请百度“windows下如何显示隐藏的文件”)
keydir (目录,存放用户的公钥,刚开始只有一个管理员公钥)
gitosis.conf (授权文件)
授权文件gitosis.conf,初始内容:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = Administrator@PC20180009
keydir 目录:
存放用户的公钥,一个用户对应一个.pub文件。
创建新的测试git版本库
git服务器操作如下:
$ su git
$ cd ~/respositories
$ mkdir test.git
$ cd test.git
$ git init --bare
客户端配置如下:
1、管理员在keydir 目录下面新增 username.pub,里面就是对应用户的sshkey
2、配置gitosis.conf文件,增加用户对测试库的访问权限。
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = Administrator@PC20180009
[group common]
writable = test
members = 用户1 用户2 //和keydir 目录下面用户名一致,keydir 目录下面对应有 用户1.pub, 用户2.pub
3、客户端提交代码
git add -A
git commit -am "新增XX成员"
git push origin master
其中group代表一个组,writable是仓库名,members是此仓库的成员,可以有多个成员,用空格进行分割。 另外注意:
仓库名不要使用_下划线
gitlab方法创建git服务器
这个方式本文暂时省略,具体可以看 https://about.gitlab.com/installation/