Ubuntu16快速搭建小型Git服务器

背景 今天在阿里云上申请了一个Ubuntu的云服务器,准备搭建一个git服务器作为管理代码的远程仓库

 

 

 

使用有sudo权限的用户账号,下面,正式开始安装。

①更新apt-get、安装Git、创建git管理员账户
sudo apt-get update
sudo apt-get install git
sudo adduser git
②安装git-core, openssh-server, openssh-client三个软件。git-core是git的核心软件; openssh-server、openssh-client是服务器和客户端传输文件通过ssh协议;                                                                                                                                                      安装python-setuptools软件。该软件是用来安装gitosis的
sudo apt-get install git-core openssh-server openssh-client
sudo apt-get install python-setuptools
安装gitosis。Gitosis主要用于管理用户对仓库的操作权限
Ⅰ、把所有用户的公钥保存在 authorized_keys 文件的做法,只能凑和一阵子,当用户数量达到几百人的规模时,管理起来就会十分痛苦。每次改删用户都必须登录服务器不去说,这种做法还缺少必要的
权限管理 — 每个人都对所有项目拥有完整的读写权限。
Ⅱ、简单地说,Gitosis 就是一套用来管理 authorized_keys 文件和实现简单连接限制的脚本。有趣的是,用来添加用户和设定权限的并非通过网页程序,而只是管理一个特殊的Git仓库。
你只需要在这个特殊仓库内做好相应的设定,然后推送到服务器上,Gitosis 就会随之改变运行策略

Pre:安装gitosis之前,需要检查是否初始化过git服务器用户信息。

git config --list

若没有以上现象则,输入命令:

git config --global user.name ”用户名”;
git config --global user.email ”邮箱”。

Next: 获取gitosis版本文件;/tmp是Ubuntu各种安装包与文件的存放的目录

cd /tmp
git clone https://github.com/res0nat0r/gitosis.git

Final: 进入gitosis目录,使用python命令安装目录下的setup.py的python脚本进行安装gitosis.

cd /tmp/gitosis
sudo python setup.py install
④创建项目仓库存储点

/home/目录下创建一个目文件夹作为仓库sudo mkdir /home/gitrepository,并修改用户组和权限

由于gitosis默认状态下会将仓库放在用户的repositories目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository

sudo mkdir /home/gitrepository
sudo chown git:git /home/gitrepository/
sudo ln -s /home/gitrepository/ /home/git/repositories/
Gitosis服务初始化
Gitosis服务初始化,就是初始化一个gitosis-admin库,并为管理员分配权限,gitosis-admin库非常重要,以后我们建的所有库的权限分配都要通过此库来进行操作。
接下来我们将Gitosis管理员的公钥添加到专用账号的宿主目录下的公钥存放目录下,在此对应的是/home/git/.ssh/authrized_keys文件中,具体操作过程如下:

(1) 在你要进行操作gitosisi-admin库的windows客户端机器上生成密钥

下载安装windows版本的git客户端软件,下载地址:http://msysgit.github.io/

如果客户端是windows,在windows安装git后,对应开始菜单里GIT目录里会有Git Bash

运行此命令会打开仿unix命令行窗口,可以在此执行ssh-keygen命令:

ssh-keygen

命令行会提示如下:

  1. Generating public/private rsa key pair.

  2. Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):

上面提示我们是否需要自定义公钥和密钥的生成目录,这里我们保持默认即可,上面的括号里是默认存放的目录。接下来按回车,命令行会提示如下,

  1. Enter passphrase (empty for no passphrase):  

为了防止我们的私钥被盗用的可能,上面提示我们为私钥输入使用密码,如果我们设置上密码后,以后每次我们要push或pull远程库的时候都会提示我们输入密码,不过再此我们可以不用输入密码,直接回车就可以。一路回车后,我们的密钥和公钥就会生成了,命令提示符下会输出它们保存的目录,其中id_rsa为私钥,id_rsa.pub为公钥。

(2)上传管理员公钥到服务器。

可以采用任何可行的方式(xshell的文件传输、FTP等)将公钥上传至服务器,此外我们把公钥id_rsa.pub保存在服务器的/tmp目录下。

(3)服务器端进行Gitosis服务初始化。
以git用户身份执行gitosis-init命令,并向其提供管理员公钥。
su - git #切换到git用户身份下,不然执行下面的初始化后客户端管理员是无法通过密钥来访问的,权限的问题  
gitosis-init < /tmp/id_rsa.pub  #出现下面的提示表示成功 注意要设置为git权限

 Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
 Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

cd ~           #回到git用户的宿主目录  
ls             #查看目录文件  
gitosis   repositories   #自动生成两个目录|目录repositories是用来存放所有的git版本库

(4)确保gitosis-admin版本库的钩子脚本可执行。

chmod a+x ~git/repositories/gitosis-admin.git/hooks/post-update

 

⑥客户端管理Gitosis;管理员克隆gitosis-admin管理库
当Gitosis安装完成后,在服务器端自动创建了一个用于Gitosis自身管理的Git库:gitosis-admin.git。
管理员在客户端克隆gitosis-admin.git库,进入自己的工作目录,注意要确保认证中使用的是正确的公钥:
注:windows客户端在Git Bash里执行以下命令。
git clone [email protected]:gitosis-admin.git
cd gitosis-admin/  

克隆完成后,进入gitosis-admin目录下,看有哪些文件:

.git        (隐藏的目录, 如果在windows下看不见,ls -all”)

keydir   (目录,存放用户的公钥,刚开始只有一个管理员公钥)

gitosis.conf  (授权文件)

授权文件gitosis.conf,初始内容:

  整个授权文件以用户组为核心,而版本库为核心。

  • 第3行开始定义了一个用户组gitosis-admin。
  • 第4行设定了该用户组对哪些版本库具有写操作。
  • 第5行设定了该用户组包含的用户列表。初始时只有一个用户,即管理员公钥所属的用户。
⑦服务器上创建git版本库
su git  
cd ~/respositories  
mkdir test.git  
cd test.git  
git init --bare  
配置新客户端
增加新用户,就是允许新用户能够通过其公钥访问Git服务。
 1、让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,第一个客户端(管理员)把他们分别按用户名命名好,复制到本地keydir目录下。
ssh-keygen  #此操作为新客户端

   #第一个客户端(管理员)将新客户端的公钥添加至本地库,再上传

管理员从用户获取公钥,并将公钥按照username.pub格式进行重命名,管理员进入gitosis-admin本地克隆版本库中,复制新用户公钥到keydir目录。
 
2、配置gitosis.conf文件
增加用户对测试库的访问权限。
[gitosis]     
[group gitosis-admin]  
writable = gitosis-admin  
members = Administrator@PC20150615111  
[group common]  
writable = test  
members = 用户1 用户2  

提交gitosis-admin版本库的更改

git add .  
git commit -m "增加新成员xxx,yyy对test测试库的访问权限"  
git push  
/etc/init.d/ssh restart #服务器端重启下ssh服务

此时新的客户端就拥有对测试库的操作权限了,在客户端执行git clone命令,clone下来测试库。

git clone ssh://[email protected]/test.git    #新客户端操作

  

更新apt-get

 mkdir projectgit

cd projectgit/

 git init

echo "this is a first project file,will push to server" > readme.txt

git add .

git config --global user.name "yhc"

 git config --global user.email "[email protected]"

git commit -am "init a base version,add a first file for push to server"

git remote add origin [email protected]:yhcproject.git

git push origin master

更新apt-get

 

转载于:https://www.cnblogs.com/LUCKMOON/articles/8438311.html

你可能感兴趣的:(git,运维,python)