关于gitlab搭建方法的几点补充

我们部门想搞一些内部开源项目,但缺少一个支撑平台。都知道GitHub很火,但看了一下企业版的架构,还是有些肉痛,加上对git也存在一些争论,于是一番研究之后,决定先把gitlab/gitorious或者trac/redmine之类的都搭上,体验一下再做决定。

我是按照这篇文章来搭建的: Tutorial: setting up Gitlab on Debian 6 (下面简称gitlab-debian),不过实际上却是在一台RHEL 5.6上搭建的。由于我对RedHat系列不熟(后来才看见Installing GitLab 2.1 on Centos 6GitLab installation on Fedora 16 (with gitolite),要按照这两篇估计能省点力),加上RHEL的光盘和在线仓库都比较难找,另外自己还是个ruby/rails小白,还是比较痛苦的 ——不过后来在公司内找到了RHEL 5.6的ISO,然后又发现了一个第三方仓库EPEL——Extra Packages for Enterprise Linux,省了些力。

搭建过程中有不少收获,整理了一下,贴出来(注:内容主要针对Tutorial: setting up Gitlab on Debian 6这篇文章进行补充说明)。

Step 0: 一些准备工作

0.1 proxy设置

export http_proxy=http://username:password@proxy.mycompany.com:8080

如果要让http_proxy能透过sudo传递给apt-get或者gem install,需要在/etc/sudoers里面添加如下配置:

Defaults env_keep = "http_proxy ftp_proxy" 

0.2 添加第三方仓库: EPEL (对于Debian/Ubuntu不用这一步)

cat > /etc/yum.repos.d/fedora-epel.repo <<EOF
[fedora-epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=http://cn.archive.ubuntu.com/fedora-epel/$releasever/$basearch/
enabled=1
gpgcheck=0
gpgkey=
EOF

yum check-update

然后就可以用 yum install wget curl python-pygments 来安装EPEL上的第三方包了。

0.3 建议安装GNU screen或者tmux

因为需要来回切换用户,加上http_proxy的设置问题,还是用screen/tmux方便。

Step 3: Install Gitolite

Gitolite使得多个人通过同一个ssh账号(即不用建立多个UNIX用户)访问不同的git仓库,是GitLab/Gitorious提供 git服务的关键。推荐看看它的文档: gitolite documentation 尤其是 how gitolite uses ssh 这一节。对英文有 障碍的话,可以看看这篇 Gitolite 构建 Git 服务器 (这篇文章详细讲述了gitolite的原理和安装/升级方法)。

这里需要关注原文里如下两步:

sudo -u gitolite cat /var/lib/gitolite/.ssh/id_rsa.pub
#(now select the output in your terminal and copy it to the clipboard)
sudo dpkg-reconfigure gitolite

后面这一步到底干了啥,因为 dpkg-reconfigure 是Debian/Ubuntu系的东西,RedHat上不玩这个啊。 我从Debian下载了gitolite的安装包,看了一下里面的postinst脚本,其实上面两步等价于

sudo -u gitolite -H gl-setup /var/lib/gitolite/.ssh/id_rsa.pub
# or su -c "gl-setup /var/lib/gitolite/.ssh/id_rsa.pub" gitolite

注意,执行这一步时要保证gitolite没有被配置过,如果觉得有问题,就把 /var/lib/gitolite/ 目录下的内容全删掉 (包括 /var/lib/gitolite/.ssh, /var/lib/gitolite/.gitolite.rc ),然后重新开始这一步。 详情可参考gitolite的文档里cleaning out a botched install 这一节。

Step 4: Install Ruby 1.9

编译ruby之前要从epel安装libyaml-devel和libffi-devel包(原文没说),否则后面的 gem install bundler 会 有问题:

yum install libyaml-devel

Step 5: Install Gitlab

5.1 通过proxy访问gitlab

在公司内, 从github取代码时只能使用http链接方式,git(ssh)和https都不行,所以在取gitlabhq本身,以及取下来后用bundler安装子模块时,都需要修改(在 bundle install --without development test --deployment 这一步之前, 需要先修改 /opt/gitlabhq/Gemfile ,将所有https换成http。如果不小心先跑了这 一步,则需要再修改 Gemfile.lock )。

另外,git不使用环境变量http_proxy的值,而是需要单独设置:

git config --global http.proxy http://username:password@proxy.foobar.com:8080
git clone http://github.com/gitlabhq/gitlabhq.git

5.2 bundle install –without development test –deployment

  • 需要事先安装libicu-devel, mysql-devel, pcre-devel这几个包,这几个包在RHEL中已有
  • sqlite必须要3.6以上,否则ruby模块编译不会成功。RHEL 5.6里面的sqlite太老了,需要自己下载源代码包编译

5.3 建立数据库之前需要先安装mysql和redis(文档中没说)

  • mysql在安装光盘中有
    • mysql用这个命令设置其内root用户的密码: mysqladmin -u root password NEWPASSWD
    • config/database.yml 文件里面(仅production节)的mysql root密码必须跟上面的实际值一致
  • redis在EPEL里面: yum install redis
  • 然后 /etc/init.d/mysqld start && /etc/init.d/redis start
  • 注意: bundle exec rake db:seed_fu RAILS_ENV=production 这一步输出的是最后登录网站的管理员 用户名和密码,请记录下来

Step 6: Generate an SSL certificate

如果不是在互联网上部署,这一步并不需要。因为即使按这里所说的生成了SSL证书,也还要浏览器导入这个证书。 如果是在互联网上部署,应该到VeriSign或者StartSSL申请证书,才会被浏览器信任。可参考Nginx + https + 免费SSL证书配置指南

改用http(不用https)的方法:(注意,这里应该是在Step 7里面完成)

server {
  listen       80;
  server_name  hadoop-slave-16;
  root /opt/gitlabhq/public;

  location / {
      #    root   html;
      #    index  index.html index.htm;
      passenger_enabled on;
  }
}    

Step 7: Deploy to Phusion Passenger and Nginx

7.1 部署到nginx

  • 虽然EPEL仓库里有nginx,但不要安装,因为下面的 passenger-install-nginx-module 这一步会下载nginx并重新编译
  • nginx.conf里80端口的rewrite可以取消, "root /nowhere"也可以恢复成缺省配置
  • 如果nginx的配置存在问题,想要重启nginx的话,可以用 kill -QUIT $(pidof nginx) 的方法先停掉nginx, 修改完成后再用 /opt/nginx/sbin/nginx 启动

7.2 部署到apache

如果想将gitlab部署到www root的子目录(比如/gitlab/),可以改用Apache来做Web Server (我不知道在nginx上怎么搞,自己瞎试了一下,没搞定)。

用apache配置gitlab的具体方法, 可以参考如下内容:

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
PassengerRuby /usr/local/bin/ruby

##Note: ln -s /opt/gitlabgq/public/ /var/www/html/gitlab

RailsBaseURI /gitlab
<Directory /var/www/html/gitlab>
    # This relaxes Apache security settings.
    AllowOverride all
    # MultiViews must be turned off.
    Options -MultiViews
</Directory>

BTW: 如果部署gitlab到子目录,另外还需要修改一下 /opt/gitlabhq/app/views/layouts/admin.html.haml 里面Resque的连接,这里是 个绝对连接,需要添加上gitlab的部署前缀(即改为 /gitlab/info/resque )。

posted @ 2012-07-08 17:52  巴蛮子  阅读(27108)  评论(7编辑  收藏  举报