Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7605050
  • 博文数量: 1769
  • 博客积分: 18684
  • 博客等级: 上将
  • 技术积分: 16352
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 10:28
个人简介

啥也没写

文章分类

全部博文(1769)

文章存档

2024年(15)

2023年(44)

2022年(39)

2021年(46)

2020年(43)

2019年(27)

2018年(44)

2017年(50)

2016年(47)

2015年(15)

2014年(21)

2013年(43)

2012年(143)

2011年(228)

2010年(263)

2009年(384)

2008年(246)

2007年(30)

2006年(38)

2005年(2)

2004年(1)

分类: LINUX

2009-08-20 10:37:11

个人使用Git很长时间了,感觉比subversion方便太多。因此,最近准备将团队的版本管理工具从subversion转向git.
周末花了点时间搭建了一个项目开发构建的环境:

版本管理使用git并用gitosis来搭建。
项目管理使用redmine。
部署:Nginx+Passenge(mod_rails)

中间出现了不少问题,做个笔记,以备后查:

一、安装Git/Gitosis环境
1.安装git
这部分没有什么问题

2.安装gitosis
git环境默认是可以直接使用的,但需要为每个成员开ssh权限帐号,且各个仓库之间的交叉权限管理很麻烦,
所以需要使用gitosis, 它无需为每个开发人员开设ssh帐号,安全方便。

我使用的机器还是Redhat EL4U3, 其中python的版本是2.3, gitosis并不兼容。
所以首先是安装一个独立的python26环境。
之后就简单了:
* 添加一个git用户,用它来运行gitosis,将其home设置为要存放git repositories的目录,注意将owner设置为git.
* clone gitosis

git clone git://eagain.net/gitosis.git
python setup.py install

* 上传你的ssh public key到服务器
scp ~/.ssh/id_rsa.pub root@xxx:/tmp/

* 用你的key初始化gitosis
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
这将创建gitosis-admin 库,位于:
/repsository/gitosis-admin.git

gitosis将使用这个库进行用户和库权限的管理,由于其自身就是一个git repository,所以管理起来很方便:

修改post-update hook:
chmod a+x /repsository/gitosis-admin.git/hooks/post-update

现在服务端部署完毕.

git clone git@xxx:gitosis-admin.git

这将checkout/clone 到你本地.
现在将你的开发组成员的public key放到keys目录下,
格式为: user_name.pub , 如night.pub, little_zhang.pub.
然后,修改gitosis.conf:

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = night

[group night-team]
members = night
writable = nginx-cache nginx-mirror

[group doggy-team]
members = night
writable = doggy doggy-passport

每个group是一个组,members是成员名,空格分隔, writeable定义该组成员可以写入的repository.
members对应的就是keys目录下的文件名(无pub后缀)。

修改后,提交并push到服务端:

git commit -m’setup users and access’
git push

如何使用?
现在,某个用户就可以创建一个repository并push到服务端了:
假设night这个用户 要创建一个nginx-mirror仓库并push上去, 他需要这样做:

mkdir nginx-mirror
git init
touch .gitignore
git commit -m’init commit’
git remote add origin git@xxx:nginx-mirror.git
git push –mirror

现在本地的nginx-mirror就和服务端的nginx-mirror.git同步了,之后就是正常的git日常管理流程:
add,commit,branch,push….

Git环境至此就告一段落。

二、安装部署Redmine

是一个Rails项目,和Trac类似,但操作界面要比trac要简单方便很多. 包括项目管理中常用的模块:Issue, Timeline,
Wiki,Files,Documents, 并且可以和Subversion,Git整合, 多数plugin都有中文的locale.

1. 安装Ruby
最新的Ruby是1.9,但Rails2.2不支持,只能安装1.8
2.安装Rails 2.2
3. 安装mysql和其他可选模块,如RMagic
4.Checkout最新的代码
svn co svn://rubyforge.org/var/svn/redmine/trunk redmine

5. 配置数据库
创建project数据库,并修改config/database.yml

6.Load数据库并插入初始数据
rake config/initializers/session_store.rb
rake db:migrate RAILS_ENV=”production”
rake redmine:load_default_data RAILS_ENV=”production”

7. 创建并修改临时目录的权限
mkdir tmp public/plugin_assets
chmod -R 777 files log tmp public/plugin_assets

8.测试
ruby script/server webrick -e production
现在,3000端口就可以进入,默认的用户 admin/admin

9. 部署Redmine
Redmine是一个rails应用, 所以如何部署是和普通rails一样, 我使用nginx+mod_rails方式,简单,高效。

安装 mod_rails()
gem install passenger

现在需要安装passenger的nginx模块, 其自带了一个passenger-install-nginx-module命令,
可以自动编译并安装nginx,不过我嫌啰嗦,自己编译:
cd /usr/local/src/nginx-0.7.58
./configure –with-http_stub_status_module –with-http_gzip_static_module –add-module=’/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/nginx’
make install

现在修改nginx.conf:
在http段加入:
passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2;

然后在虚拟主机启用passenger:
server {
listen 80;
server_name dev.xxx.com;
access_log /logs/dev.access.log;
index index.html;
passenger_enabled on;
root /project/redmine/public;
}

现在重启nginx,访问上述域名即可.Passenge会自动监测并重启ruby进程.
其他高级配置可以参考相应文档.

三、整合Gitosis和redmine
这部分稍微有点小麻烦。
1. 创建新项目,在版本库中SCM选择git,
然后将gitosis的仓库位置填入.
2. 刷新,并访问版本库模块,此时出错,显示没有相应的修订条目
这个问题主要是由于gitosis创建的仓库的权限是750,而gitosis和redmine的运行
用户不同.因此,需要将redmine的运行用户调成git,这样才能读取仓库的信息。
感谢mod_rails(Passenge), 它支持user switching, 由于redmine是rails程序,
因此只需要改变config/environment.rb文件owner即可,mod_rails默认将该应用切换这个文件的owner:
chown /project/redmine/config/environment.rb
killall -HUP nginx

现在,可以在redmine中浏览版本库了.

3. Hack redmine支持branches/tags的浏览
还有一个小问题,那就是默认的redmine的git插件只能浏览HEAD/master的信息,而无法查看branche/tags的信息,
这是我不能容忍的。
所以,需要对redmine打个.
cd /project/redmine
path -p1 < ../redmine_git_branches.diff
killall -HUP nginx

现在重新刷新,wow!, 所有的分支和tag都能够浏览了,虽然还没有像github那样完美,但至少满足我的工作要求了。

这是我所使用的patch:,可以对现在trunk版本直接patch。
=====================END===================

阅读(1534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~