搭建git服务器

github私有仓库的费用太贵,有VPS可以自己搭建一个专属git服务器

其实没什么需要安装的,git的默认协议SSH不需要什么配置,主要是方便和安全方面的优化

初始化环境

为了安全,我们为git仓库专门设置一个管理用户git,约定使用 /srv/git 放置仓库

$ sudo useradd \
--create-home \
--home-dir=/srv/git \
--root=/srv/git \
--base-dir=/srv/git \
--shell=/usr/bin/git-shell \
git
$ sudo passwd git

上面的参数作用

--create-home --home-dir=/srv/git

创建用户主目录,将来可以添加SSH KEY登录方式,和代码仓库放在一起方便管理

--root=/srv/git

限制这个用户的访问目录在/srv/git,不能访问其它路径,这是出于安全考虑

--base-dir=/srv/git

用户base目录,即默认的父目录.帮助简化了克隆时的目录前缀

--shell=/usr/bin/git-shell

只允许用户用于管理仓库,不得执行其它命令

创建仓库

初始化一个裸仓库,即只包含仓库信息,不包含代码

$ sudo git --bare init /srv/git/MY_PROJECT.git

不需要其它配置了,就这么简单

从客户端克隆

MYHOST就是VPS的主机地址

$ git clone git@MYHOST:MY_PROJECT.git

主机名后的目录只需要填写仓库目录

这是创建用户时指定的 –base-dir 立的功,让你不用输入完整的目录 /srv/git/MY_PROJECT.git

尝试用git用户登录会被阻止

$ ssh git@MYHOST
git@MYHOST's password: 
fatal: Interactive git shell is not enabled.hint: ~/git-shell-commands should exist and have read and execute access.
Connection to MYHOST closed.

web界面

首先安装gitweb软件包,它附带了访问仓库的cgi动态程序.

gitweb默认需要在 /var/www/git 下放置cgi程序和仓库代码,但我们把仓库安装在了 /srv/git 下,所以做个软链接

# ln -s /srv/git /var/www/git
# yum install gitweb
# ls /var/www/git
gitweb.cgi static PROJECT.git

可以看到yum安装后多出了这两个: gitweb.cgi static

接下来启动gitweb服务

刚才安装的gitweb只是一套动态程序,HTTP访问还要借助lighttpd apache等web服务器.而git自带的命令instaweb可以自动创建web服务器的配置文件.指定–httpd参数为lighttpd即可

# sudo -i
# cd /var/www/git
# git init

# yum install lighttpd
# git instaweb --httpd=lighttpd --port=1234
No known browser available.
http://127.0.0.1:1234
上面的命令解释:
# sudo -i
# cd /var/www/git

因为 /var/www/git 是git用户的home目录,因此普通用户可能没有权限cd,所以需要-i参数保持root权限.

注意:git instaweb 不能指定document root目录,所以在哪个目录下执行,就展示那个目录下的仓库.因而需要先cd到这里

# git init

git instaweb创建的web服务器配置文件,需要一个git仓库来存放.

外界访问控制

到这里就可以访问git仓库了,但没有完,还需要外界可以访问,并且要限制访问.这时可以借助nginx,或者修改lighttpd的配置文件

server {
    listen 80;
    server_name git.MYHOST.COM
    location / {
        auth_basic "git web require auth";
        auth_basic_user_file /srv/etc/passwd;
        proxy_pass http://127.0.0.1:1234/;
    }
}

有关auth_basic的配置可以参阅 http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

大功告成

到这一步就结束了,现在访问 http://git.MYHOST.COM/ 即可浏览仓库信息

如果你觉得这个web界面太丑陋的话,可以看看 https://github.com/kogakure/gitweb-theme ,这个项目提供了更优雅的主题界面:http://kogakure.github.io/gitweb-theme/

如何将使用ssh公钥添加到git

将公钥添一行一个添加到 /srv/git/.ssh/authorized_keys 即可

转自:小艾的博客

发表评论