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配置节点如下:
<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/

Dominic
另外,还要更改 管理->配置->一般 选项卡中的主机名称为pms.test.com,这样发送的邮件中的连接就正常了。
用代理方式,如果碰到提示503错误“Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.”
则需要执行setsebool -P httpd_can_network_connect=1来开启apache 网络连接权限。
我用你的反向代理的方法指向redmine工作目录,首页已经能打开了,可是打开的页跟与端口访问的页面完全不同是怎么回事呢?而且我点了登陆和其它之类的就出错了,提示proxyerror
请问楼主,这是什么原因呢
proxy 反向代理需要指向redmineURL链接,不能指向路径或者工作目录,如果两个页面不一样肯定是有问题的。proxyerror可以看看apache的error.log。谢谢!
我用你的方法, 首页已经能打开了, 但用default的admin登入時, 就出現以下錯誤
Internal error
An error occurred on the page you were trying to access.
If you continue to experience problems please contact your Redmine administrator for assistance.
If you are the Redmine administrator, check your log files for details about the error.
Back
请问楼主,这是什么原因呢
首页能打开说明安装过程正确,登入出现问题,说明redmine配置过程出现问题。请查看redmine日志以获取更多信息,确认问题。
感謝楼主提示,已經可以, 但在使用cron来确保在启动时候自动启动mongrel_rails来启动redmine部分失敗, 我在root下 crontab -e 把 @reboot cd /var/www/redmine; rm -f log/mongrel.pid; /usr/bin/mongrel_rails start -p 3000 -d -e production
放進, reboot, 檢查/var/spool/mail/root, 確實有執行,但首页打不开, 用手動執行mongrel_rails, 就可以打开, 请问楼主,这是什么原因呢
有可能是root在某个地方没有权限,或者你root账号下PATH环境变量有问题。建议查看redmine日志和系统日志。
请问楼主, 目前我把SELinux設为permissive模式是可以打开首页,但設为enforce模式時,就打不开,按照你的安装过程,這現象是否正確?
首先要明确SELinux的两种模式的区别。enforce使用的安全策略,不正常是正常的,redmine要配好SELinux太困难了。