如何搭建一个私有git服务器
大伙牛逼哄哄的上项目,轮到开源了又有些羞赧,于是需要一个私有git服务器,享受分布式开发的便利同时,还能保护源代码。
##安装
服务器环境使用ubuntu 14.04,安装git和gitolite
sudo apt-get install git gitolite
然后生成一个专门用来跑git服务的账户:git
sudo adduser --system --group --shell /bin/bash --disabled-password git
这里使用–disabled-password 禁止了git账户远程登陆shell以及由此引发的安全隐患,个人感觉比其他教程上看到的随后再禁止shell要优雅。
客户端此时可以操作了。注意客户端有两种:管理员客户端和一般用户客户端。这里要用的是管理员客户端,用来配置gitolite。
在客户端,需要存在rsa的公开秘匙,存在于~/.ssh/id_rsa.pub文件中。如果没有,需要自行生成
ssh-keygen -t rsa -C "user@postname"
注意因为密匙对机器名的敏感性,第二个参数 -C 一定不可以少,否则会出现Permission denied(publickey)报错
假设这个服务器端的用户名为david,复制客户端公开秘匙到服务器端作为gitolite管理员秘匙
scp ~/.ssh/id_rsa.pub david@git_server_IP_address:/tmp/git-admin.pub
回到服务器端,执行如下命令:
sudo su - git
gl-setup /tmp/git-admin.pub
该客户端克隆管理包
git clone git@git_server_IP_address:gitolite-admin
至此,几乎所有关于gitolite的配置都可以在本地进行,之后只需像所有git项目一样提交,服务器端会自动根据配置文件进行更新。之所以说几乎,因为无法完全删除一个已经创建的repository。
##添加项目
修改git-admin/conf/gitolite.conf文件,例如希望添加一个名为WebSrv的repository给所有人,添加如下内容到文件中:
repo WebSrv
RW+ = @all
提交后WebSrv项目会自动生成
##添加用户
将用户的~/.ssh/id_rca.pub基于其用户名(例如devy)复制到git-admin/keydir/devy.pub,提交后用户就可以下载刚才生成的repository
git clone git@git-server-IP-address:WebSrv
##补充:非管理员客户端自定义
例如上面的devy用户,在项目文件夹中要自行配置用户名和电子邮件,可以使用如下命令
git config --global user.name "devy"
git config --global user.email "devy@email.com"
这两个命令是通用git命令,非gitolite环境下也可以使用
以上。
##补充2:替代选择
后来发现还有一种选择:gitlab,一个完整的平台,完全仿照github的功能,可以在网页端很酷的展示动态。适合有必要让用户参与开发过程的项目,以及懒人。官网就有安装教程,滋不重复。
##补充3:版本更新
时至今日,最新版本为gitolite3,相应的安装命令和初始化命令都做了修改
安装
sudo apt-get install gitolite3
初始化
gitolite setup -a /tmp/git-admin.pub
注意,我在安装gitolite的过程中,会有一步要求指出rsa公匙位置,对于全新系统来说,这时的安装是不完整的。
所以在这个版本中,正确的安装顺序应当是首先创建git帐户
sudo adduser --system --group --shell /bin/bash --disabled-password git
然后登陆该账户
sudo su - git
再设置rsa公匙
ssh-keygen -t rsa -C "git@postname"
然后安装gitolite。
当然,如果错过了这几步也有补救措施
sudo dpkg-reconfigure gitolite3
事实证明,这一步不可省略,即使顺序安装了也要执行,从而设定正常的repositories文件夹,以及authorized_keys文件(默认路径是/var/lib/gitolite3/.ssh/authorized_keys)
在Debian系统性,repositories会在dpkg-reconfigure gitolite3命令执行后自动创建,在Ubuntu下则不会,需要登录到git账户后执行
gitolite setup -a git
然后就是在这个authorized_keys文件中操作了
例如我要添加tom@debian9工作站,只需将其自身的rsa公匙和相关命令加入此文件,就可以clone出gitolite-admin项目。
之后如果要创建新项目,直接修改gitolite-admin项目下conf/gitolite.conf文件,然后clone出空文件夹,自行演化即可