在 Ubuntu 12.04 上安装 GitLab

gitlab

我们需要一套能自己托管 git 的工具,类似 GitHub,但是要求能 host 在自己的服务器上,看了一下 Git Enterprise 版本,20人每年授权费用是5000美金,太贵,只能找找类似的开源工具,以前用的是 Redmine + GitTrac + Git/Subversion 来管理实验室的项目,有点腻了,听一个朋友说 GitLab 挺好用、基于 Rails & Gitolite、社区活跃每月都有 release、安装起来比 Gitorious 要简单。下午没事装了一个试了一下,感觉还不错,有个重要功能是支持 LDAP 认证,可以很容易和我们的 LDAP 服务器连起来,这样我们不需要在 GitLab 里另外创建用户就可以使用 GitLab 了。GitLab 的官方安装文档非常详细,按照步骤就可以完成安装。

安装 GitLab

安装 curl 后下载 GitLab 的自动安装脚本 debian_ubuntu.sh 并安装:

$ sudo apt-get install curl
$ sudo curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu.sh | sh

上面的安装脚本只进行了完成了部分工作,接下来安装一些库和包、下载 gitlab 源代码、拷贝配置文件:

$ sudo gem install charlock_holmes --version '0.6.8'
$ sudo pip install pygments
$ sudo gem install bundler
$ cd /home/gitlab

# 下载 gitlab 源代码
$ sudo -H -u gitlab git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab

$ cd gitlab

# 拷贝配置文件
$ sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml

安装数据库引擎(可选 SQLite, MySQL, Postgres)、根据对应的数据库引擎(这里选择 SQLite)选择拷贝相应的配置文件并按照对应的 gem,最后安装数据库表:

$ sudo apt-get install -y sqlite3 libsqlite3-dev

$ sudo -u gitlab cp config/database.yml.sqlite config/database.yml

$ sudo -u gitlab -H bundle install --without development test mysql postgres  --deployment

$ sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production

配置 gitlab hooks:

$ sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
$ sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

测试一下程序状态,是否该有的配置文件都有了:

$ sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production

运行 gitlab 和 resque:

$ sudo -u gitlab bundle exec rails s -e production
$ sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=yes

下载 gitlab 启动脚本并设为系统自动启动:

$ sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/
$ sudo chmod +x /etc/init.d/gitlab

$ sudo update-rc.d gitlab defaults 21

现在可以通过 /etc/init.d/gitlab 来启动、关闭和重启 gitlab 服务了:

$ sudo /etc/init.d/gitlab restart

配置 LDAP 支持(可选)

如果需要配置 LDAP 认证登陆,修改 gitlab.yml 文件的 2. Auth settings 部分:

$ sudo vi config/gitlab.yml
#
# 2. Auth settings
# ==========================
ldap:
  enabled: true
  host: 'ldap.vpsee.com'
  base: 'dc=vpsee,dc=com'
  port: 636
  uid: 'uid'
  method: 'ssl' # plain
  bind_dn: 'cn=admin,dc=vpsee,dc=com'
  password: 'password'

安装和配置 Nginx + Unicorn

GitLab 可以用 Rails 自带的服务器独立运行,但是在生产环境我们选择用 Nginx + Unicorn:

# 配置 Unicorn
$ cd /home/gitlab/gitlab
$ sudo -u gitlab cp config/unicorn.rb.example config/unicorn.rb
$ sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D

# 安装 nginx
$ sudo apt-get install nginx

# 增加 gitlab 的 nginx 配置文件
$ sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

# 修改 **YOUR_SERVER_IP** 和 **YOUR_SERVER_FQDN**
$ sudo vi /etc/nginx/sites-enabled/gitlab

# 重启 nginx
$ sudo /etc/init.d/nginx restart

测试

打开浏览器访问这台机器域名或 IP 地址,默认用户名是 admin@local.host 密码是 5iveL!fe,登陆后可见如下界面:

gitlab

如何让 Git 使用 HTTP 代理服务器

因为我们的内部网络使用了代理,所以在 安装 OpenStack 基于 Web 的管理控制台 的时候有个小麻烦,我们的 http 代理服务器无法通过 git 协议下载 openstack-dashboard 所需的代码,也就是说可以 git clone https:// 这样克隆代码,但是不能使用 git 协议 git clone git://。糟糕的是在 openstack-dashboard/tools/pip-requires 里恰好用到了 git 协议,所以运行 openstack-dashboard 安装脚本的时候会因为网络无法连接 git:// 而中途失败。如何让 git 使用 http 代理服务器呢?

如果是 git clone http:// 或 git clone https:// 的话直接把代理服务器加到环境变量就可以了:

$ export http_proxy="http://username:password@squid.vpsee.com:3128/"
$ export https_proxy="http://username:password@squid.vpsee.com:3128/"

如果是 git clone git:// 的话麻烦一些(可能有的 git 源不提供 http/https 的方式),需要先安装 socat,然后创建一个叫做 gitproxy 的脚本并填上合适的服务器地址、端口号等,最后配置 git 使用 gitproxy 脚本:

$ sudo apt-get install socat

$ sudo vi /usr/bin/gitproxy
#!/bin/bash

PROXY=squid.vpsee.com
PROXYPORT=3128
PROXYAUTH=username:password
exec socat STDIO PROXY:$PROXY:$1:$2,proxyport=$PROXYPORT,proxyauth=$PROXYAUTH

$ sudo  chmod +x /usr/bin/gitproxy

$ git config --global core.gitproxy gitproxy

CentOS 5 上配置 Redmine 和 Git

redmine

现在我们用 Trac + Git 来管理所有的项目,早些时候是由 Trac + Subversion 管理的,和 Git 比较起来 Subversion 简直就是龟速。虽然我们前段时间换成了 Git 做版本控制,但是 web 管理界面还主要是在用 Trac 来管理,现在随着项目增多,人员变多,管理 Trac 也变得越来越麻烦。在 Trac 里改个小地方就需要动代码,比如删除 “about and help/guide, search” 导航条还需要改代码,太多需要 hack 的地方。Trac 不直接支持多项目管理(可以通过插件支持),不能很方便的分配权限给不同的项目,不适合多项目管理。现在我们需要一个能象 Github、Google Code 那样能自己注册,自己管理的多用户版本控制和项目管理工具。Redmine 是一个用 Ruby on Rails 写的类似 Trac 的工具,功能比 Trac 丰富一些,内置常用的 SCM,比如:Subversion, Git 和 Mercurial,更重要的是支持多项目多人管理、自己管理自己的项目、界面简单清晰、装上就可以用没有太多需要 hack 的地方,先用一段时间如果感觉好就打算替代 Trac.

安装必要的软件包

首先安装必要的库和软件包:

# yum install zlib-devel curl-devel expat-devel gettext-devel 
# yum install mysql-server mysql-devel openssl-devel gcc make

安装和配置 Ruby on Rails

下载 ruby 和 rubygems:

# wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
# wget http://rubyforge.vm.bytemark.co.uk/files/rubygems/rubygems-1.3.5.tgz

编译和安装 ruby:

# tar zxvf ruby-1.8.7.tar.gz
# cd ruby-1.8.7

# ./configure
# make
# make install

# cd ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
# cd ../../
# make
# make install

编译和安装 rubygems,安装 ruby mysql 支持:

# tar zxvf rubygems-1.3.5.tgz
# cd rubygems-1.3.5

# ruby setup.rb

# gem sources -r http://gems.rubyforge.org/
# gem sources -a http://gems.tron.name/gems.rubyforge.org/

# gem install mysql

安装 ruby on rails,指定版本号因为 redmine 需要这个版本:

# gem install rails -v=2.1.2

安装完以后检查一下是否都正确装上:

# gem list

*** LOCAL GEMS ***

actionmailer (2.1.2)
actionpack (2.1.2)
activerecord (2.1.2)
activeresource (2.1.2)
activesupport (2.1.2)
mysql (2.8.1)
rails (2.1.2)
rake (0.8.7)

安装和配置 Redmine

下载 redmine 并增加一个 redmine 用户:

# wget http://rubyforge.org/frs/download.php/66633/redmine-0.8.6.tar.gz
# /usr/sbin/adduser redmine

创建 redmine 需要的数据库:

# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 50
Server version: 5.1.40 MySQL Community Server (GPL) by Remi

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database redmine character set utf8;
mysql> grant all on redmine.* to 'redmine'@'localhost' identified by 'yourpassword';
mysql> flush privileges;

配制 redmine 环境和数据库:

# rm -rf /home/redmine
# mv redmine-0.8.6 /home/redmine
# cd /home/redmine/config
# cp database.yml.example database.yml

# vi database.yml

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: yourpassword
  encoding: utf8

# cd /home/redmine
# rake db:migrate RAILS_ENV="production"

# chown -R redmine:redmine /home/redmine
# chmod -R o-rwx,g-rwx /home/redmine

启动 redmine:

# su - redmine -c "ruby script/server webrick -e production"

访问 redmine,打开浏览器访问 http://your-server-ip-address:3000,输入默认用户名密码登陆:admin/admin

安装和配置 Git

安装 Git,默认 respository 没有 git,需要先安装额外的源:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
# yum update

# yum install git

配置和使用 Git,注意这里要修改 git_repositories 的权限,以便以 su – redmine 用户启动 redmine server 的时候有权限访问到 git_repositories 目录,所以最好把 git_repositories 建在 redmine 的下面:

# git config --global user.name "vpsee"
# git config --global user.email "admin@vpsee.com"

# mkdir -p /home/redmine/git_repositories/project1
# cd /home/redmine/git_repositories/project1
# git init
# git add .
# git commit

# chown -R redmine:redmine /home/redmine/git_repositories

Git 的基本使用和配置可以看 “CentOS 5 上配置 Trac 和 Git“。

集成 Git 到 Redmine

安装完 Git 和 Redmine 后,需要集成 Git 到 Redmine,登陆 redmine 后,新建一个 project,在 “settings->respository->SCM” 选择 git,在 “Path to .git directory” 加上 git 路径就可以了,而且还需要让 redmine 知道有 git repository 加进来。

# su - redmine -c "ruby script/runner "Repository.fetch_changesets" -e production"

redmine settings git

CentOS 5 上配置 Trac 和 Git

git

VPSee 一直使用 Subversion 来管理自己和其他人的项目,甚至文档和资料也是通过 Subversion 来管理的。最近大家对 Subversion 抱怨变多,主要是因为慢,特别是 merge 速度很慢,checkout 也很慢,从本地局域网 checkout 有时候不到 20K 每秒,一直想找个机会换掉 Subversion。版本控制软件可选的不多,有名的就这么几个:CVS、Subversion、Arch、Bazaar、BitKeeper、Git。Git 是 Linus Torvalds 开发的一套版本控制系统,其初衷是用来替代 BitKeeper。经过一段时间的沉淀,现在 Git 终于开始步入主流,在开源项目里很受欢迎,Linux Kernel、Perl、Gnome、Ruby on Rails、Android、Fedora、Debian、X.org 等都是用 Git 来做版本控制的,Digg 最近也在考虑从 Subversion 移到 Git。Git 是分布式版本控制,与 Subversion 集中式控制不同,刚开始接触 Git 可能有点不适应,一旦熟悉以后就会发现 Git 特别方便,简单实用,而且速度超快。Trac 和 Subversion 组合起来很强大,通过 Git Plugin for Trac 插件 也可以把 Trac 和 Git 组合起来,而且还不需要额外的类似 Apache + mod_svn 的支持。

安装和使用 Git

安装过程很简单:

# yum install git

增加 Git 用户:

$ git config --global user.name "vpsee"
$ git config --global user.email "admin@vpsee.com"

创建一个项目目录,把所有想被版本控制的文件、目录拷贝进来:

$ mkdir myproject
$ cd myproject/


继续阅读 »