2013年8月23日星期五

CentOS 6.4 安装和使用Gitlab指南

环境准备
OS: CentOS 6.4 x86_64
1.初识GitLab
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
GitLab 要求服务器端采用 Gitolite 搭建,5.0版本以后对于ssh服务,GitLab不再使用 Gitolite ,采用自己开发的 gitlab-shell 来实现。
在GitHub上托管代码,私人项目是需要付费的,并且对于企业而言,还是将Git服务器放在内部要更加安全一些。因此,如果喜欢GitHub这种简洁风格的Git服务器,在本地搭建一个GitLab是一个非常不错的选择。
另外,如果需要对代码进行Review,推荐使用Gerrit,要复杂一些,但是功能非常强大。
软件运行需求
Gitlab 是一个针对Linux系统开发的基于Git类似 Github.com 的应用,如果你想试试的话,它在类Unix系统上面也可以运行, 比如OS X或者FreeBSD等,但是现在还没有得到官方支持,Gitlab__不能在Windows系统上运行__ ,Gitlab在下列Linux发行版中受官方支持:
Ubuntu Linux
Debian/GNU Linux
在下面这些Linux发行版中同样可以运行,但是不受官方支持:
Arch
CentOS
Fedora
Geetoo
RedHat
Gitlab 需要 Ruby(MRI) 1.9.3+ 以及一些组件才能运行,它要求CPU最好是 4核心的,2核心的同样可以运行,内存需求可以按下表配备:
内存大小    运行状态    用户数量    说明
512MB    GitLab运行会十分缓慢    10    需要至少250MB swap
768MB    GitLab可正常运行    100    最低配置
1GB    GitLab可流畅运行    1000    推荐配置
1.5Gb    GitLab可流畅运行    10000    根据需要自己选择
根据项目文件所占用的硬盘空间选择硬盘即可,但是至少需要两倍于项目文件大小的硬盘,因为GitLab会为每一个项目制作一个复本。
安装流程简要说明
GitLab 的安装流程可以简单的归为下面这几个步骤:
安装依赖包
安装或者更新Ruby
设置系统用户
安装GitLab Shell
配置数据库
安装GitLab
配置Nginx
2.安装部署GitLab
为了减少发生更多未知的问题,需要做如下三个操作:
a、关闭 SELinux
01vi /etc/sysconfig/selinux
02 
03# This file controls the state of SELinux on the system.
04# SELINUX= can take one of these three values:
05# enforcing - SELinux security policy is enforced.
06# permissive - SELinux prints warnings instead of enforcing.
07# disabled - No SELinux policy is loaded.
08SELINUX=disabled
09# SELINUXTYPE= can take one of these two values:
10# targeted - Targeted processes are protected,
11# mls - Multi Level Security protection.
12SELINUXTYPE=targeted
b、关闭防火墙
1service iptables stop
2chkconfig iptables off
c、更改CentOS yum 成中国镜像,加快yum速度
163的开源镜像地址 http://mirrors.163.com/.help/CentOS-Base-163.repo
不同版本见http://mirrors.163.com/.help/centos.html
sohu的开源镜像地址 http://mirrors.sohu.com/help/CentOS-Base-sohu.repo
不同版本见http://mirrors.sohu.com/help/centos.html
中国科技大学 http://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2
不同版本见http://lug.ustc.edu.cn/wiki/mirrors/help/centos
如果使用上面YUM源的话,最好把里面的 mirrorlist 注释掉,否则系统会启动 fastesmirror 插件自动检查的,并不一定会使用这个yum源的.
我用的是中国科技大学的速度不错。
方法:直接下载源文件
CentOS USTC mirror 这个镜像不错,大家更新可用这个
1#yum -y install wget
2#cd /etc/yum.repos.d
3#mv CentOS-Base.repo  CentOS-Base.repo.save
5#yum makecache
注意:如果为第一次安装的新系统的话,则需要先安装wget这个下载软件,不然没有办法下载CentOS-Base.repo这个文件的。
部署Gitlab二种方法
1、使用一键安装包工具安装:http://bitnami.com/stack/gitlab
下载相应版本的安装包,然后以sh方式运行,一路按提示操作即可安装成功。
2、使用陈沙克日志提供的shell脚本自动安装,
陈沙克日志博客地址:http://www.chenshake.com/centos-6-4-installing-and-using-gitlab/
shell脚本下载地址:https://github.com/shake/gitlab-installer
参考资料:
官方文档:https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md
Centos下gitlab安装指南[原创]:http://blog.haohtml.com/archives/13846
在 CentOS 上部署 GitLab (自托管的Git项目仓库):http://heylinux.com/archives/2439.html(可能是源的问题,偿试了好几次都安装失败)
GitLab 安装笔记:http://uloli.com/p/6sh26/
在Ubuntu上配置 GitLab:http://www.sagestroll.com/node/202(基本上是官方文档的翻译)

如何在局域网搭建git服务器

在创业公司,什么东西都要自己搞定,除了开发android系统和研究内核,还要自己来搭建一个代码管理服务器。
其实搭建一个服务器非常简单,尤其只需要在局域网内搭建,网上已经提供好了我们需要的一切。

服务器的搭建

首先我们需要一个装有linux系统的计算机充当服务器,我这里是一台ubuntu12.04的系统。里面默认安装了perl和bash作为shell。
然后需要安装git-core,openssh-server等必备软件,在ubuntu 安装这些软件比较方便。

1
sudo apt-get install git-core openssh-server
创建一个叫做git的用户。创建步骤和可能出现的问题可以参见这里:http://lingavin.com/blog/2013/04/27/add-new-user/

gitolite3.0

安装环境后,就可以使用gitlote来搭建一个服务器了。首先是下载gitolite源码。网址是:https://github.com/sitaramc/gitolite 
安装这个软件,首先要保证$HOME/bin文件夹存在,然后准备好客户机的xxx.pub文件。
这里会涉及到一个问题,什么是xxx.pub和为什么需要用这个文件。xxx.pub是客户端用sshkeygen生成的公钥。至于为什么需要初始化的时候提供这个文件,那是因为初始化后,这个提供公钥的客户机将成为gitolite的管理员,在客户机里管理各个版本库,所以需要在初始化的时候提供。
版本库的管理不会在服务器上直接操作,而是在客户端,通过管理一个特殊的仓库来操作。
具体步骤就是:

1
2
3
4
5
6
7
8
git cloen git://github.com/sitaramc/gitolite

#下面这一步其实是在/home/git/bin做了一个软连接
gitolite/install -ln

export PATH=/home/git/bin:$PATH

gitolite setup -pk xxx.pub
完成了这几步,服务器的设置就算完成了。

客户端

客户端需要保证的是能够ping通服务器端,然后就是下载gitolite-admin这个仓库。命令如下:

1
2
#请把host_ip替换为服务器的真实ip
git clone git@host_ip:gitloite-admin.git
可以发现clone下来的版本库里面有两个文件夹,分别是conf keydir
现在我们就通过添加一个开发者wang和添加一个仓库android403.git来演示如何操作这两个文件夹。

增加一个开发者

首先需要wang的公钥,不会生成公钥的话这里有个参考:https://help.github.com/articles/generating-ssh-keys 
把wang的公钥改名为wang.pub放到keydir文件中,然后git add git commit git push 收工。

增加一个仓库

增加仓库需要到conf目录下,修改gitolite.conf

1
2
3
4
repo android4_0_3
 RW+  = xxx
 RW  = wang
 R  = @all
加上上面内容,同样是git add git commit git push 就可创建一个名叫android403的仓库了。
其中这个版本库赋予了不同人不同的权限。例如xxx用户有读写权限和删除等终极权限。而wang有读写权限和创建新分支的权限,但不可以删除远程版本。其他所有人则有读的权限,也就是只要你知道仓库,就可以clone下来。

开发者可以做的事情

你可以通过ssh git@host_ip info来查看你可访问的版本库以及其地址。

最后

上面这些信息都是通过http://gitolite.com/gitolite/master-toc.html 来获得的,其中还有很多内容和细节大家可以参考。