Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CentOS7搭建git 服务器 #287

Open
confidence68 opened this issue May 22, 2018 · 0 comments
Open

CentOS7搭建git 服务器 #287

confidence68 opened this issue May 22, 2018 · 0 comments

Comments

@confidence68
Copy link
Owner

前言

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant