Update: 已可直接从库里安装了~。
# apt-get install redmine redmine-mysql libapache2-mod-passenger
_________________________________________________________________________
按:这是在公司 WIKI 上写的文章,难得这么认真,拿出来分享一下 :)。对比过十多个项目管理系统,然后在比较好的 Redmine, Trac, Mantis 三个当中选择了 Redmine。文中以 Debian Squeeze 为例,但其它 GNU/Linux 特别是 Debian Lenny / Sid、Ubuntu 应该基本一致。
_________________________________________________________________________
一、废话
Debian 的库里有最新的 redmine 发布版(0.9.3),一个命令就可以搞定:
#apt-get install redmine
However……,安装后运行会出现 http 500 service unavailable 等问题。因为 Debian 只有 2.2.3 的 rails,而 redmine 0.9.3 要求 rails 的版本为 2.3.5。
我第一个想法是,既然库里有 redmine,就不折腾了,删掉 rails,再手工装一个新版本。可是 redmine 是依赖于 rails 的,要删得一起删。然后我就想,好,保留它,再装一个新版本覆盖之!就是这个想法……,最后遇到了很多问题,又因为对 ror 不熟,在这上面浪费了不少时间。
没办法,全 purge 掉,实实在在从头来吧。以下以 redmine-trunk 版为例(解决了 0.9.3 中存在的 wiki+php 等一些 bug)。
注:以下 # 开头的命令需以 root 身份执行。
二、依赖关系
#apt-get install ruby rubygems rake mysql-server mysql-client libmysql-ruby libopenssl-ruby
#gem install rails
三、下载 redmine
/var/projects#svn checkout http://redmine.rubyforge.org/svn/trunk redmine
注:稳定发行版本下载 http://rubyforge.org/frs/?group_id=1850
四、创建数据库
# mysql -u root -p
mysql> create database redmine character set utf8;
mysql> grant all privileges on redmine.* to redmine@localhost identified by 'PASSWORD';
五、数据库配置文件
/var/projects/redmine#cat config/database.yml
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: PASSWORD
encoding: utf8
六、生成 session key
#rake generate_session_store
会将结果写入 config/initializers/session_store.rb
七、初始化数据库结构
#RAILS_ENV=production rake db:migrate
八、导入默认设置到数据库
#RAILS_ENV=production rake redmine:load_default_data
九、预览!
#ruby script/server webrick -e production
然后可以用浏览器访问 http://server:3000/ ,待测试没问题再继续。
十、用 apache 运行 redmine
WEBrick 虽然能跑,但是超慢!慢到无法忍受的地步(好奇的是,内存和cpu利用率都超低,它在干嘛呢……)。
安装:
#apt-get install apache2 libapache2-mod-passenger
权限:
#chmod -R g+w redmine
#chown -R root:www-data redmine
符号链接:
#ln -s /var/projects/redmine /var/www/redmine
配置文件:
#cat /etc/apache2/conf.d/redmine
RailsEnv production
RailsBaseURI /redmine
Done:
#/etc/init.d/apache reload
$firefox http://server/redmine/
十一、安装/修改 主题/样式(可选)
Redmine 支持基本的主题自定义(可以覆盖默认的 css)。
可以到 http://www.redmine.org/wiki/redmine/Theme_List 下载别人的主题包,解压后将包目录放到 public/themes/ 下面。
#/etc/init.d/apache reload
之后,即可访问 http://server/redmine/settings?tab=display 选择新的主题。
不过我觉得还是默认的耐看。我直接对默认的主题做了一点修改:
--- public/stylesheets/application.css (revision 3628)
+++ public/stylesheets/application.css (working copy)
+tr.priority-1, table.list.issues tr.priority-1 a { color: black; }
+
+tr.priority-2, table.list.issues tr.priority-2 a { color: #1c1cf3 /*similar to blue*/; }
+tr.priority-3, table.list.issues tr.priority-3 a { color: #1c1cf3; font-weight: bold; }
+
+tr.priority-4, table.list.issues tr.priority-4 a { color: red; }
+tr.priority-5, table.list.issues tr.priority-5 a { color: red; font-weight: bold; }
+
+tr.status-3, table.list.issues tr.status-3 a,
+tr.status-4, table.list.issues tr.status-4 a { color: green; font-weight: normal; }
+
+tr.status-5, table.list.issues tr.status-5 a,
+tr.status-6, table.list.issues tr.status-6 a { color: gray; font-weight: normal; }
以上加的几行,使得以不同的颜色区分不同优先级(低/高/紧急等)、不同状态(新建/进行中/反馈/已关闭等)的 issue。
十二、安装插件(可选)
很方便,下面是安装 email tls 插件的例子:
#ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git
更新数据库:
#RAILS_ENV=production rake db:migrate:upgrade_plugin_migrations
#RAILS_ENV=production rake db:migrate_plugins
十三、配置 email 发送功能 —— 任务建立/变更时,发送邮件提醒(可选)
以 GMail 为例,先要安装上一步提到的 email 插件,然后:
#cat config/email.yml
production:
delivery_method: :smtp
smtp_settings:
tls: true
address: "smtp.gmail.com"
port: 587
domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
authentication: :plain
user_name: "xxxxx@gmail.com"
password: "xxxxxxxxxxxxxxxx"
完了 reload apache 即可。这里 http://server/redmine/settings?tab=notifications 有一些设置选项。我去掉了 bcc,选中了纯文本。
修改 1:
--- app/models/mailer.rb (revision 3628)
+++ app/models/mailer.rb (working copy)
- subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
+ subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.subject}"
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] "
- s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
s << issue.subject
修改的目的,是使得 redmine 发送的邮件提醒在标题中不要包含 issue 的状态(新建/进行中/已关闭等),从而使得关于同一个问题的所有提醒邮件在 GMail 中都能自动组织成一个会话,非常有利于上下文的理解。
redmine 默认在邮件标题中包含 issue 的状态信息,使得每一次状态变更的邮件都分散到不同的会话中,很讨厌。
修改 2:
--- config/locales/zh.yml (revision 3628)
+++ config/locales/zh.yml (working copy)
- text_journal_changed: "{{label}} 从 {{old}} 变更为 {{new}}"
- text_journal_set_to: "{{label}} 被设置为 {{value}}"
- text_journal_deleted: "{{label}} 已删除 ({{old}})"
- text_journal_added: "{{label}} {{value}} 已添加"
+ text_journal_changed: "{{label}}:{{old}} -> {{new}}"
+ text_journal_set_to: "{{label}}: -> {{value}}"
+ text_journal_deleted: "已删除:{{label}} ({{old}})"
+ text_journal_added: "已添加:{{label}} {{value}}"
对中文翻译的一点修改,这是邮件提醒中对 issue 变更的说明,我觉得太啰嗦了,不直观明了,没有重点。
注:如果你发现发出去的邮件,issue 链接都是带 3000 端口号的,而你现在用 apache 跑 redmine 不需要端口号,可以去 http://server/redmine/settings 改“主机名称”。这是因为你第九步的时候无意中保存过这个设置。
十四、打 patch(可选)
以下是作者提供的一个 patch,使得在 redmine 中,可以将任务指派给一个组/group,该组的所有成员都会收到邮件提醒(只是,该任务不会显示在“我的工作台”里)。
redmine#wget http://www.redmine.org/attachments/download/2965/0001-Allow-issues-to-be-assigned-to-a-Group.-2964.patch
redmine#patch -p1 < 0001-Allow-issues-to-be-assigned-to-a-Group.-2964.patch
注一:执行 patch 的时候,它会有一点小抱怨,可不予理会。
注二:http://server/redmine/groups ,此处可以增删/编辑小组及其成员。
十五、与版本控制软件集成(Git / Mercurial)
配置系统(使得只有组内的成员才可以查看/修改项目代码,不同的项目使用不同的组):
#groupadd saas
#echo 'if [ "saas" == "$(id -gn $(whoami))" ]; then umask 007; fi' >> /etc/profile
Update:
在 /etc/profile 中设置 umask 只会影响 login shell,而我们通过 git push 过来的文件仍然是默认的 755 权限(修改 .bashrc 等亦无效)。
要设置 git push 到服务器的文件的权限为 770(同组成员可写),正确的做法是:
# echo "session optional pam_umask.so umask=007" >> /etc/pam.d/common-session
此外,以下方法应该也可以(没有测试):
# echo "Subsystem git /bin/bash -c 'umask 007; /usr/bin/git'" >> /etc/ssh/sshd_config
安装 git:
#apt-get install git-core
初始化 git 版本库:
#mkdir /var/projects/saas
#cd /var/projects/saas
#git --bare init
#chown -R root:saas ../saas
#chmod -R 770 ../saas
版本库初始化完成,若要增加新的开发者(各自使用自己的帐号),由管理员执行:
#useradd -m -s /bin/bash -g saas username # 注意,若不指定,默认的 dash 会出错
并将其 pub key 添加到 /home/username/.ssh/authorized_keys 之内。
开发人员在客户端的操作:
$git config --global user.name "xxx yyy"
$git config --global user.email "xxx@gmai.com"
$git clone username@server:/var/projects/saas
测试:
$cd saas
$echo hello > world
$git add .
$git commit -a -m 'hello world'
$git push origin master
以后再 push,就不需要 “origin master” 这两个参数了。
最后,因为初始化版本库的时候我们用了 –bare 参数,在 /var/projects/saas 下是看不到项目代码文件的。
可以生成一份代码拷贝,用来在 apache 下进行测试:
#cd /var/www
#git clone /var/projects/saas
#chown -R root:saas saas
#chmod -R 770 saas
#addgroup www-data saas
开发者 push 完后,apache 下的代码并不会自动更新,若想测试(这个测试相当于预览,因为开发人员 push 之前是需要先在自己的机器上认真测试的)更新后的代码:
/var/www/saas$git pull # 注意,各用自己的帐号执行,不要用 root
至此,版本管理系统已经正常工作,还剩最后一件事:那就是告诉 Redmine,我们版本库的路径。
浏览器里打开 Redmine,新建一个项目,然后在“设置”里会有个标签叫“版本库”,选择 git,并在 path 里填 /var/projects/saas 就搞定了!
另,hg 的设置与 git 非常相似,大部分参数都一样,不另述。
十六、升级 redmine svn trunk(可选)
#svn update
#rake tmp:cache:clear
#rake tmp:sessions:clear
可能还要执行第七步和第十二步提到的更新数据库的操作。升级之前应该先备份,在测试实例上确认没有问题再升级。
十七、备份redmine数据
一是数据库:
#mysqldump -u redmine -p redmine > redmine.$(date +%F).sql
二是上传的文件:
/var/projects/redmine#tar cvzf ../redmine.uploaded.files.$(date +%F).tar.gz files/
(完)