公告:由于博客https升级,原博客引用http链接失效,预览及部分图片效果请查看源代码!

CentOS7搭建git 服务器

2330次浏览

前言

用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/

Tags: CentOSgit

相关文章: