使用 Gitlist 管理私有 Git 仓库

作者 huhamhire,暂无评论,2013年7月30日 13:54 折腾历程

好久没来博客上写文章了,放了暑假以后一直在做新版本的 Hosts Setup Utility,这阵子忙完了继续折腾 VPS。

Ramnode 的 VPS 还是挺给力的,用了半年多也没遇到啥大的问题。看到他们在 Seattle 建了的服务器,果断把在 Atlanta 的 VPS 迁过去,延迟降到 170ms。闲话少说,继续折腾纪录这个系列。

这一回要说的主题是配置使用 Gitlist 来作为管理私有 Git 仓库的 Web 工具。在前面这个系列的第五篇最后,介绍过使用 Gitweb 来实现相关的功能。但是用了这么一段时间以后,感觉 Gitweb 的功能有些单一,所以就考虑换一个工具。

一、Git管理工具的选择

最先我也关注过 Gitlab,这是基于 Ruby on Rails 开发的一个工具,从功能到界面几乎实现了大多数 Github 所拥有的功能,甚至可以支持团队群组用户的管理。最重要的一点,Gitlab 是开源的,自己搭建的话纯粹就是硬件成本了,而 Github 企业版一年的价格要 5000 美刀,所以 Gitlab 是个很强大的工具。不过对于 VPS 的部署来说,Gitlab 也有致命的问题,就是内存开销实在太大了,因为是基于 Ruby 做的,所以这也是必然的。官方的建议是至少 768MB 内存可以支持最基本的功能,512MB是不够用的,建议分配 1G。这样的要求对于一般的 VPS 来说,显然不适合来这么玩。虽然我现在的 VPS 也上了 1G 内存,但是也不可能把资源都拿来干这个。。内存对于 VPS 来说是很金贵的东西,还是省着点用为好。

Gitlab 几乎就是山寨版的 Github,甚至连版本分支树都有,只不过画的没 Github 好看而已。可以参考下面这两张图。

GitLab-1 GitLab-2

Gitlab 否决以后,剩下来可以选用的其实并不多,官方 wiki 上面给出的好多工具都已经停止维护了,而且绝大部分都有 Gitweb 那样的功能单一,界面简陋的问题。余下的像 gitorious 等等又多少有些商用性质。要开源而且界面可以比较养眼一点,功能又不是特别简陋,我最后还是选择了 Gitlist(不是 Gitalist 哦)。

二、Gitlist的相关介绍

Gitlist是一个用 Twitter Bootstrap 来开发前台UI,并基于Silex PHP框架和 Twig PHP模板引擎构建的工具。用php写的怎么说都要比Gitweb那个用Perl写的CGI程序要来的好用一点,毕竟是原生的Web环境。

相比于 Gitweb,Gitlist 能够支持的功能也更丰富一些。多了RSS 订阅、代码语法高亮显示、以及存储库统计等几个比较实用的功能。这些功能虽说也并不复杂,不过有总比没有好。Gitlist还有一大好处是运行速度比较快,虽说程序执行上面肯定不如用C语言开发的cgit,但是因为带了缓存的功能,用下来的感觉还是很不错的。以前用Gitweb的时候,总觉得刚开始加载的时候要停顿一下。

三、安装配置 Gitlist

作为一个开源的工具,Gitlist 可以选择下载源码后自行编译安装,也可以直接下载编译好的 stable 版本直接用。想具体了解这一部分的话可以参考 http://blog.lixiphp.com/glist-install-config/#axzz2aRpmBhjF。这里我就偷个懒,直接用了 Stable 版,省得再配置编译。咱只是一般用用,就不多折腾了。直接下载:


wget https://s3.amazonaws.com/gitlist/gitlist-0.4.0.tar.gz
tar -xzvf gitlist-0.4.0.tar.gz
mv gitlist /var/www/

参照官方的说明,设置缓存目录及权限:


cd /var/www/gitlist
mkdir cache
chmod 777 cache

然后设置一下配置文件:


cp config.ini-example config.ini

修改配置文件中关于 Git 仓库位置设置的部分。如果之前没有配置过 Git 仓库的话,还需要先配置 Git 仓库才能看到最后的结果。这里因为前面已经安装过 gitosis,所以就直接略过这部分内容了。

四、配置Webserver

接下来的工作就是配置 Webserver 以访问 Gitlist 生成的页面。同 Gitlab 一样,官方推荐用 nginx 作为 Gitlist 的 Web 服务器,不过我这里用的是 lighttpd,配置文件的写法略有不同。官方在 wiki 上面也提供了 lighttpd 的配置说明,比较简单,具体内容如下:


# GitList is located in /var/www/gitlist
server.document-root        = "/var/www"
url.rewrite-once = (
    "^/gitlist/web/.+" => "$0",
    "^/gitlist/favicon\.ico$" => "$0",
    "^/gitlist(/[^\?]*)(\?.*)?" => "/gitlist/index.php$1$2"
)

以上的这段是官方的写法,我总觉的rewrite写的有些别扭,应该是给通过别名访问的朋友用的。我准备用 git.huhamhire.com 的域名来访问,所以最后改成了下面这个样子:


server.document-root = "/var/www/gitlist"
url.rewrite-once = (
    "^/web/.+" => "$0",
    "^/favicon\.ico$" => "$0",
    "(/[^\?]*)(\?.*)?" => "/index.php$1$2"
)

如果用的是其他的 Webserver 的话,可以参考官方给出的 配置方案

配置完成了以后,重启一下服务应用配置,可以看下Gitlist的最终运行效果。

GitList-1

UI看着比 Gitweb 养眼多了,出此以外,Gitlist 还支持了 Markdown 标记的输出。

GitList-2
关键词:git , GitList
登录后进行评论