CentOS下redmine、apache、svn配置安装心得

CentOS默认开启了SELinux,安装Redmine、apache、svn之类的还是蛮复杂的,经过几次折腾之后,终于顺利将redmine折腾成功了,有些心得记录下来备查:

集成方案大体为:

a) svn和apache集成,通过http协议访问svn,svn使用域名svn.test.com,仓库访问路径为:http://svn.test.com/XXXX

b) svn通过Perl和redmine的数据库集成提供身份和权限认证,仓库访问用户名和密码由redmine中创建的用户和密码访问,可访问项目仓库受redmine控制

c) redmine用mongrel_rails 运行于3000端口

d) apache使用proxy模块将pms.image-pro.com.cn的80端口反向代理到redmine的3000端口

e) 每5分钟通过cron的形式将redmine中项目信息同步到svn中

1、不要使用passenger集成Apache,使用反向代理方式集成Apache

官方指南中使用passenger来和Apache集成,但是passenger跟SELinux集成是很困难正常运行的,解决办法需要将SELinux更改为permissive模式(编辑

/etc/sysconfig/selinux文件修改为SELINUX=permissive),然而使用Apache的反向代理向rails转发却简单得多。

这种方式需要开启redmine的“启用用于版本库管理的Web Service”功能,设置方式为安装完成之后,用admin账号登陆redmine,进入“管理”->“配置”->“版本库”设置页面开启“启用用于版本库管理的Web Service”选项,并生成一个API Key,这个API key有用。

相关virtualhost配置节点如下:

<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

–><VirtualHost *:80>
ServerAdmin bbs@test.com
DocumentRoot
"/var/www/redmine"
ServerName pms.
test.com
ErrorLog
"logs/pms.test.com-error.log"
CustomLog
"logs/pms.test.com-access.log" combined
<Location /sys>
Order deny,allow
Allow from
127.0.0.1
Deny from all
</Location>

ProxyPass / http://localhost:3000/
ProxyPassReverse /
http://localhost:3000/
</VirtualHost>

注意:如果/etc/hosts文件中没有解析相关域名到127.0.0.1的话,最好在Allow from后面添加一行让服务器ip可以正常访问。

2、使用两个virtualhost,分别安装redmine和svn,并使用一个location配置svn

这样的好处是明显的,svn单独访问也足够间接,不使用svn和svn-private两个Location配置来分别供给SVN客户端和redmine使用。

相关virtualhost配置节点如下:

<VirtualHost *:80>
ServerAdmin svn@test.com
ServerName svn.
test.com
ErrorLog
"logs/dummy-svn.test.com-error.log"
CustomLog
"logs/dummy-svn.test.com-access.log" combined

PerlLoadModule
Apache2::Redmine
<Location />
DAV svn
SVNParentPath
"/var/svn"
Order deny,allow
Deny from all
Satisfy any

PerlAccessHandler
Apache::Authn::Redmine::access_handler
PerlAuthenHandler
Apache::Authn::Redmine::authen_handler
AuthType Basic
AuthName
"Redmine SVN Repository"

#read-only access
<Limit GET PROPFIND OPTIONS REPORT>
Require valid-user
Allow from
127.0.0.1
# Allow from another-ip
Satisfy any
</Limit>
# write access
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>

## for mysql
RedmineDSN
"DBI:mysql:database=redmine;host=localhost"

RedmineDbUser
"redmine"
RedmineDbPass
"password"
</Location>
</VirtualHost>

这里Allow from跟上面说的一样,最好添加服务器的ip通过,这样一个Location节点即可完成SVN设置,保证redmine中看到的svn仓库地址和SVN客户端(例如:TortoiseSVN)中使用的svn仓库地址一致(都是http://svn.test.com/XXXXX,而不是一个/svn-private/XXX,一个/svn/XXXX),而且svn仓库地址也够简洁。

3、如果邮件使用GMail的服务,则需要使用ruby 1.8.7,rails要求2.3.5

如果默认安装的是ruby 1.8.6则发送邮件的时候会报错,要求先自行starttls命令。必须升级到1.8.7

相关命令:

ftp ftp.ruby-lang.org
cd /pub/ruby
get ruby-
1.8.7.pXXX.tar.gz
tar zxvf ruby-
1.8.7.pXXX.tar.gz ruby-1.8.7.pXXX
cd ruby-1.8.7.pXXX
./configure –prefix=/usr
make
make install
ruby -v
which ruby
cd ..

这里XXX是对应的发布版本号,当前是330,需要注意的是有些版本不一定能够正常编译通过,我在测试的时候p160编译就通过不了。

4、相关SELinux权限设置

执行以下命令赋予相关目录正确的SELinux属性:

chcon -u system_u -R -t httpd_log_t /var/www/redmine/log
chcon -u system_u -R -t httpd_tmpfs_t /var/www/redmine/tmp
chcon -u system_u -R -t httpd_sys_script_rw_t /var/www/redmine/files
chcon -u system_u -R -t httpd_sys_script_rw_t /var/www/redmine/public/plugin_assets

由于svn版本库的SELinux设置比较复杂,可以通过以下命令直接处理完毕

chcon -u system_u -R -h -t httpd_sys_script_rw_t /var/svn

5、redmine跟svn之间有关版本库通过可以通过cron来完成

cron执行内容如下:

0,5,10,15,20,25,30,35,40,45,50,55 /usr/bin/ruby /var/www/redmine/extra/svn/reposman.rb –redmine pms.test.com -k apikey –svn-dir /var/svn –owner apache –url http://svn.test.com/ >> /var/log/reposman.log

其中apikey内容为redmine后台生成的API key,这样每5分钟都会将redmine中的版本库信息同步到svn中(自动创建版本库)

6、redmine使用mongrel自启动

安装mongrel之后,使用cron来确保在启动时候自动启动mongrel_rails来启动redmine。

cron执行内容如下:

@reboot cd /var/www/redmine; rm -f log/mongrel.pid; /usr/bin/mongrel_rails start -p 3000 -d -e production

7、使用ImageMagick绘制甘特图,需要rMagick 1.5.17版本

执行以下命令:

yum install ImageMagick -y
yum install ImageMagick-devel -y
yum install freetype -y
yum install gd-devel -y
wget
http://www.osresources.com/files/centos-windows-fonts/msfonts.tbz
mkdir /usr/share/fonts/default/TrueType
tar xvjpf msfonts.tbz -C /usr/share/fonts/default/TrueType/
gem install rmagick -v=
1.15.17

8、Redmine.pm存放文字需要根据实际情况来定

x64位操作系统perl库文件位置是/usr/lib64/perl5下,perl5.10版本库位置不再是/perl5.8.8,最后位置也不一定是Apache目录,例如:我机器上就是复制到/usr/lib64/perl5/Apache2目录下,所以具体目录应该根据实际情况决定,拷贝完毕之后Apache的相关VirtualHost配置加载的模块语句就有变化了(如上我的变成了Apache::Redmine)。

 

整体来说,安装过程需要仔细,特别是SELinux在某种程度上来说是设置的羁绊,但RedHat等公司开发它肯定有他的安全必要性,所以我们还是完成SELinux环境下安装比较好。

相关可参考官方资源和文档:

Installing Redmine:http://www.redmine.org/projects/redmine/wiki/RedmineInstall

How To Automate repository creation:http://www.redmine.org/projects/redmine/wiki/HowTo_Automate_repository_creation

Repositories access control with apache, mod_dav_svn and mod_perl:http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Redmine_for_advanced_Subversion_integration

Email Configuration:http://www.redmine.org/projects/redmine/wiki/EmailConfiguration

SELinux, Subversion and mod_svn:http://ejohansson.se/archives/2007/11/04/selinux-subversion-and-mod_svn/