作者 Leopku 微博 http://www.himysql.com 微博 http://weibo.com/leopku 最后更新时间 2013年4月26日
前言
Gitlab是一个开源项目,通过Gitlab可以搭建自己的类Github源码管理平台。
Gitlab 5.0相对之前的版本,最大改进是底层使用Gitlab自己研发的gitlab-shell代替了来自第三方的Gitolite。改进后的Gitlab将更稳定更高效,避免了之前一些用户遇到的莫名其妙的问题。
另外,Gitlab 5.0开始,加入了一个非常实用的新功能——跟Redmine的Issue系统整合。Gitlab自带的Issue功能跟Github类似,简洁明快。但是对于某些项目来说,有些轻量级。Redmine的Issue系统要强大很多。
系统环境
我们采用的系统平台是 Ubuntu 12.04 Server LTS
应用环境
由于服务器上运行着多个RoR项目,包括我们自己的业务系统、将要整合的Redmine、持续集成系统Gitlab-ci,我们使用了Ruby圈常用的RVM来作为Ruby环境。这是跟官方安装文档不一致的地方,也是可能会出问题的地方(所谓的坑)。
数据库环境
- 关系型数据库:MySQL 5.5
- KV数据库:Redis
注:我们的架构是业务、数据分离,MySQL和Redis分别运行在跟应用环境独立的服务器上。这一点也是跟官方安装文档不一致的地方,官方文档中应用、数据库是部署在同一台服务器上。在这里,我在安装的过程中也遇到了坑。主要是Redis。
安装步骤
基本跟官方文档一致,但是Ruby环境和数据库这两部分会略有不同。我会将安装过程遇到问题的地方也会标注出来。
添加Git帐号
$ sudo adduser --disabled-login --gecos 'GitLab' git
$ sudo su - git
若未作特殊说明,下面的操作均以git身份运行
安装系统依赖包
# 使用有sudo权限的账号执行
# 保持系统为最新
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install -y build-essential zlib1g zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev libcurl3-dev libreadline6 libreadline6-dev autoconf automake libtoolimagemagick libmagickwand-dev libpcre3-dev libsqlite3-dev libmysql-ruby libmysqlclient-dev vim nginx
官方文档中依赖包有postfix,由于我们有专用的邮件服务器,通过SMTP账号发送邮件,故在这里去掉。
检查系统中Python版本
$ python --version
# 如果显示python版本在2.5以上3.0以下,则符合要求。
# 如果你的系统也是Ubuntu 12.04 LTS,系统默认的python即可。
# 如果不是,则留意一下这里。
# 检查python2命令是否正常
$ python2 --version
# 如果出现找不到命令的错误,则运行如下命令
$ sudo ln -s /usr/bin/python /usr/bin/python2
安装Ruby环境
安装RVM
$ curl -L https://get.rvm.io | bash -s stable
# 载入 RVM 环境(新开 Termal 就不用这么做了,会自动重新载入的)
$ source ~/.rvm/scripts/rvm
# 检查一下是否安装正确
$ rvm -v
rvm 1.17.3 (stable) ...
2013年4月26日更新
在.vimrc的中找到 [ -z "$PS1" ] && return
所在行,将下述第3行插入在该行前。完成后的代码如下:
$ vim ~/.bashrc
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Ubuntu用户的若不设置该处,gitlab搭建完之后git将出现git-shell错误、或连接ssh失败。
gitlab-shell:8: undefined method `require_relative' for main:Object (NoMethodError)
这是git-shell典型的错误信息。
安装Ruby
$ sed -i 's!ftp.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
# 安装 Ruby 1.9.3
$ rvm install 1.9.3
设置ruby版本
$ rvm 1.9.3 --default
# 检查ruby版本是否正确
$ ruby -v
ruby 1.9.3p374 ...
$ gem -v
1.9.3
$ gem source -r https://rubygems.org/
$ gem source -a http://ruby.taobao.org
安装ruby包管理器Bundler
$ gem install bundler
# 检查安装是否正确,有版本号输出即可。
$ bundle -v
Bundler version 1.0
安装Gitlab shell
$ cd /home/git
# 下载gitlab shell源码
$ git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell
$ cp config.yml.example config.yml
# 根据实际情况填写
$ vim config.yml
# 安装
./bin/install
安装数据库
MySQL
参照https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/databases.md
Redis
第2步已经安装,确保redis服务器已经启动、监听端口正常即可。
安装Gitlab
$ cd /home/git
# 下载gitlab源码
$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd gitlab
# 取出5.0分支
$ git checkout 5-0-stable
$ cp config/gitlab.yml.example config/gitlab.yml
# 根据实际情况填写
$ vim config/gitlab.yml
# 如果要跟redmine整合的话,打开这里issues_tracker部分的redmine相关行的注释,将url改为你的redmine访问url即可。
# 设置目录权限
$ sudo chown -R git log/
$ sudo chown -R git tmp/
$ sudo chmod -R u+rwX log/
$ sudo chmod -R u+rwX tmp/
$ mkdir tmp/pids/
$ chmod -R u+rwX tmp/pids/
#创建satellites目录
$ mkdir /home/git/gitlab-satellites
$ cp config/unicorn.rb.example config/unicorn.rb
# 配置数据库
$ cp config/database.yml.mysql config/database.yml
# 根据实际情况编辑
$ vim config/database.yml
$ cp config/resque.yml.example config/resque.yml
# 根据实际情况编辑
$ vim config/resque.yml
安装gem包
$ gem install charlock_holmes --version '0.6.9'
$ bundle install --deployment --without development test postgres
初始数据库
bundle exec rake gitlab:setup RAILS_ENV=production
安装自启动脚本
# 切换到有sudo权限的账号执行
$ sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab
$ sudo chmod +x /etc/init.d/gitlab
# 设为开机自启动
$ sudo update-rc.d gitlab defaults 21
配置nginx虚拟主机
# 切换到有sudo权限的账号执行
$ sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
# 根据实际情况编辑
$ sudo vim /etc/nginx/sites-available/gitlab
做下最后的检查
$ bundle exec rake gitlab:env:info RAILS_ENV=production
$ bundle exec rake gitlab:check RAILS_ENV=production
# 如果所有检查结果都是绿色,恭喜你!
启动服务
# 切换到有sudo权限的账号执行
# 启动gitlab服务
$ sudo service gitlab start
# 或者
$ sudo /etc/init.d/gitlab restart
# 重载nginx服务
$ sudo nginx restart
大功告成
通过刚才配置好的nginx虚拟主机名(比如,http://git.yourdomain.com)赶紧体验吧。默认管理员账号:
admin@local.host
5iveL!fe
后记:
感谢群友 Microdog
指出文中多出笔误。 欢迎各位加入HiMySQL官方群讨论:8066111。