关于gitlab搭建方法的几点补充
我是按照这篇文章来搭建的: Tutorial: setting up Gitlab on Debian 6 (下面简称gitlab-debian),不过实际上却是在一台RHEL 5.6上搭建的。由于我对RedHat系列不熟(后来才看见Installing GitLab 2.1 on Centos 6和GitLab 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密码必须跟上面的实际值一致
- 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的具体方法, 可以参考如下内容:
- Installing GitLab 2.1 on Centos 6 中 Install passenger for Apache一节
- Is it possible to host GitLab in a subdirectory of www root, like http://www.mydomain.com/gitlab (Google Groups)
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
)。