本文档非常混乱 - 它讨论了安装mod_fcgid、mod_fastcgi和mod_passenger。这些都需要运行redmine,还是代表不同的选项?如果是选项,如何知道需要哪个?一个简单的编号步骤列表对新手来说更容易遵循。还有,CentOS 6和/或Fedora的说明怎么样?
如何配置Apache以运行Redmine¶
以下说明假设您已经通过webrick服务器运行了Redmine,并且正在尝试通过现有的Apache安装来运行Redmine。大多数命令假设您位于redmine的根安装目录中,因此在开始之前请确保更改到该目录。
对于CentOS 5¶
假设¶
- 操作系统是CentOS 5
- Web服务器是Apache 2
- mod_cgi已启用
- 使用基于名称的虚拟服务器
- Web服务器在用户apache,组apache下运行
神话¶
- 您不需要运行mod_fcgid
- 您不需要运行mod_fastcgi
此部分需要改进。我无法确定这些是神话还是对神话的纠正。据报道,www.redmine.org 本身运行FastCGI,因此显然这是一个有效、有价值、稳定、性能良好的运行此伟大Web应用的方式。)
(注意:如果有人在这里慷慨地发布了启用FastCGI的有效、已知良好的步骤,那么这对整个社区都将非常有价值。)
我在下面添加了有关mod_fastcgi和mod_fcgid的安装和配置的章节。--wmbaum,(2009-08-30)
我们在使Rails 2.3.5与cgi和fastcgi一起工作时遇到了问题。fcgid在Apache2中对9.3来说效果很好。我们根据最近的fcgid更新调整了一些说明。-- cybersprocket,(2010-04-25)
基本步骤¶
- 按照安装说明安装Redmine,并使用webrick运行它。
- 终止webrick会话
- 将public/dispatch.cgi.example复制到public/dispatch.cgi
- 编辑public/dispatch.cgi文件,修复shell脚本调用以指向ruby可执行文件
#!/usr/local/bin/ruby
或者
#!/usr/bin/ruby
或者
#!c:/ruby_root/bin/ruby.exe
- 在public/dispatch.cgi中,你可能需要根据注释中的说明将require行更改为绝对路径,例如
require "/usr/lib/ruby/gems/1.8/gems/rails-2.1.2/lib/dispatcher.rb"
或者
require "c:/ruby_root/lib/ruby/gems/1.8/gems/rails-3.3.11/lib/dispatcher.rb"
- 确保public/dispatch.cgi具有执行权限,方法如下
# chmod 755 public/dispatch.cgi
- 更新config/environment.rb文件,强制Rails环境设置为生产模式,只需在文件开头取消注释此行即可
ENV['RAILS_ENV'] ||= 'production'
- 将你的虚拟主机条目添加到Apache配置文件(/etc/httpd/conf/httpd.conf)。我们在服务器的/live/redmine文件夹中安装了redmine。注意:务必确保DocumentRoot指向public子文件夹!
<VirtualHost *:80> ServerName redmine.<YOUR-DOMAIN>.com ServerAdmin webmaster@<YOUR-DOMAIN>.com DocumentRoot /live/redmine/public/ ErrorLog logs/redmine_error_log #If you are using mod_fcgid and are going to upload files larger than #131072 bytes you should consider adding the following line #that allows to upload files up to 20 mb MaxRequestLen 20971520 <Directory "/live/redmine/public/"> Options Indexes ExecCGI FollowSymLinks Order allow,deny Allow from all AllowOverride all </Directory> </VirtualHost>
- 不要忘记绑定端口!
Listen *:3000
- 确保你的文件、日志、tmp和vendor目录都可以被apache用户和apache组读写。我们通过更改所有者来实现这一点
# chown -R apache:apache files log tmp vendor
错误信息和解决方法¶
Rails需要RubyGems >= 0.9.4。请安装RubyGems
查找ruby二进制的备用版本。我们同时在/usr/bin/ruby和/usr/local/bin/ruby中有一个较旧的版本。
脚本头提前出现
这是Apache中通用的“CGI脚本中的Content-Type:头之前有内容”错误。运行dispatch.cgi(见下文)并查看在Content-Type:指令之前输出的内容。
有用的命令¶
# which ruby
告诉你在没有指定完整限定名时正在运行哪个ruby二进制文件。
# find / -name ruby
在您的整个系统中搜索任何名为ruby的文件,警告:在大型文件系统中可能需要一段时间。
# ruby -v
默认情况下告诉您正在运行的ruby版本。
#public/dispatch.cgi
运行dispatch CGI脚本。它应该输出以Content-Type: text/html; charset=utf-8
开头的HTML,如果Content-Type文本之前有任何内容,你将在Apache日志文件中获得“premature script headers”错误。
mod_fastcgi¶
我建议使用mod_cgi在redmine上运行,这不仅是为了验证基本的redmine和Apache配置,还可以让你体会到mod_fastcgi或mod_fcgid带来的性能提升。
我们将从mod_fastcgi开始。
安装先决条件
yum install libtool httpd-devel apr-devel apr
下载并安装mod_fastcgi¶
cd /usr/local/src/ wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz tar -zxvf mod_fastcgi-current.tar.gz cd mod_fastcgi-2.4.6/ cp Makefile.AP2 Makefile make top_dir=/usr/lib/httpd make install top_dir=/usr/lib/httpd
创建或编辑/etc/httpd/conf.d/mod_fastcgi.conf
LoadModule fastcgi_module modules/mod_fastcgi.so <IfModule mod_fastcgi.c> FastCgiIpcDir /tmp/fcgi_ipc/ </IfModule>
/tmp/fcgi_ipc/
目录需要可写权限给apache用户
chown -R apache.apache /tmp/fcgi_ipc/ chmod -R 777 /tmp/fcgi_ipc/
注意:我不得不做这件事不止一次……它创建了目录,然后又没有拥有它们…… ??
下载并安装fcgi
(用于fcgi gem)¶
wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz tar -zxvf fcgi-2.4.0.tar.gz cd fcgi-2.4.0 ./configure make make install
安装fcgi gem:¶
gem install fcgi
配置redmine以使用fastcgi:¶
在redmine/public目录中,将dispatch.fcgi.example
复制到dispatch.fcgi
注意:我的脚本头是“#!/usr/bin/env ruby”,这是可以的。我发现了一些参考资料,似乎表明'env'部分比直接调用ruby更好。如果这不起作用,那么你需要将其更改为上面所述的ruby位置。
./public/.htaccess
#RewriteRule ^(stylesheets.*|images.*|favicon.*|javascripts.*|plugin_assets.*|themes.*|help.*)$ $1 [L] #<IfModule mod_fastcgi.c> # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] #</IfModule> #<IfModule mod_fcgid.c> # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] #</IfModule> #<IfModule mod_cgi.c> # RewriteRule ^(.*)$ dispatch.cgi [QSA,L] #</IfModule> RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
默认的.htaccess将使用cgi,如果可用,因此我们需要强制使用fcgi。你可以重新排列指令以优先使用fcgi -我只是注释掉了其他的,并使用RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
强制它。你可以使用ps gaux
查看实际使用的是哪个。
试一试
/etc/init.d/httpd configtest /etc/init.d/httpd restart
额外的Apache配置¶
当我第一次启动Apache并连接Redmine时,Apache启动非常缓慢,并且占用的RAM比正常情况大得多。进一步调查发现,它启动了 8 个 ruby .../redmine/public/dispatch.fcgi
进程!难怪它会这么慢。
我正在使用Apache默认的VirtualHost运行Redmine,并且应用了默认的StartServers、MinSpareServers等设置。您可以在 /etc/httpd/conf/httpd.conf
中调整默认设置,或者更好的方法是让Redmine在 NameVirtualHost
或不同的 VirtualHost
下运行。这样可以防止Apache启动大量无关的进程,并且 NameVirtualHost
应该允许您在同一IP上配置多个Redmine环境,而不会浪费大量资源。
如果您在使用Apache虚拟主机时遇到问题,这可能会非常有帮助
/usr/sbin/httpd -t -D DUMP_VHOSTS
mod_fcgid¶
Apache中的fcgid¶
官方Apache mod_fcgid 这是最新的Apache版本,我们比Coremail托管版本使用得更好。
cd /usr/local/src/ wget http://apache.mirrors.hoobly.com/httpd/mod_fcgid/mod_fcgid-2.3.5.tar.gz tar zxvf mod_fcgid.2.3.5.tgz cd mod_fcgid.2.3.5
配置和安装
./configure.apxs make make install service httpd restart
来自中国Coremail服务的fcgid¶
mod_fcgid 看起来更新且比mod_fastcgi更好。
cd /usr/local/src/ wget http://apache.mirrors.hoobly.com/httpd/mod_fcgid/mod_fcgid-2.2.tar.gz tar zxvf mod_fcgid.2.2.tgz cd mod_fcgid.2.2
编辑Makefile
#top_dir = /usr/local/apache2 top_dir = /usr/lib/httpd
构建它...
make make install
编辑/创建 /etc/httpd/conf.d/mod_fcgid.conf
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so <IfModule mod_fcgid.c> SocketPath /tmp/fcgid_sock/ AddHandler fcgid-script .fcgi </IfModule>
现在您应该可以通过将其中一个重命名到除*.conf以外的名称来在 /etc/httpd/conf.d/
中在mod_fastcgi和mod_fcgid之间切换。
cd /etc/httpd/conf.d/ mv mod_fastcgi.conf mod_fastcgi.conf.not /etc/init.d/httpd restart
版本,权限¶
使用任何fcgid版本,您可能会遇到fcgid服务启动时的问题。请确保socks父目录(通常是 /var/log/httpd)有适当的权限。/var/log/httpd的默认目录权限是用于标准的非fcgid Apache安装。您需要为Apache添加执行权限,以便在运行fcgid时正确地读取/写入目录。
chmod 755 /var/log/httpd service httpd restart
安装来源¶
在上面的步骤中,我只从源代码安装了我在通用仓库中没有找到任何RPM的地方。我非常惊讶,不能简单地使用 yum install
安装mod_fastcgi、mod_fcgid、fcgi等,但就是这样。如果您找到上述任何内容的更好方法或来源,请随时更新。
您可以在以下位置找到mod_fcgid rpm 这里 --yingchun437,(2012-06-25)
Ubuntu服务器(版本?)(这不适合8.04 LTS)¶
安装passenger
sudo aptitude install libapache2-mod-passenger
这确实将Apache服务器的类型从prefork切换到worker,但在我的情况下这是可以接受的。
我将Redmine tarball安装到 /opt/redmine,命名为 redmine-0.8.5,并创建了一个名为current的符号链接。
然后从Apache DocumentRoot创建到Redmine公共目录的链接(请参阅 /etc/apache2/config.d/*)。
ln -s /opt/redmine/current/public /var/www/redmine
更新 /etc/apache/config.d/redmine(或您的虚拟主机定义的位置)如下
RailsEnv production RailsBaseURI /redmine
重启Apache。
对于FreeBSD(以及可能的其他系统)¶
我发现目前的说明在某些方面不够完善。根据上面的信息,脚本和css可能不会正确显示,链接可能会断开,等等。此外,一些修改似乎已经失传(#!/bin/bash/ruby hack,这在当前技术中不再需要)。以下是我使它工作的方式。
请确保已安装 'Apache 2.2'、'Ruby'、'fastcgi'(包括gem)。
首先,将Redmine放入子目录需要更多的工作,留给读者作为练习(提示:Rewrite是您的朋友),所以从现在起,我将假设Redmine将是DocumentRoot。
所以,这是我的httpd.conf文件
LoadModule fastcgi_module libexec/apache22/mod_fastcgi.so DocumentRoot "/usr/local/www/redmine/public" FastCgiServer /usr/local/www/redmine/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -initial-env PATH=/usr/local/bin -processes 2 <Directory /usr/local/www/redmine/public> AddHandler fastcgi-script fcgi Order allow,deny Allow from all AllowOverride all Options +FollowSymLinks +ExecCGI RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi </Directory>现在让我们解释一下发生了什么以及为什么
- 添加处理程序 fastcgi-script fcgi:定义当Apache识别到扩展名为fcgi的文件时,它应该由fastcgi-script处理程序处理。此处理程序的创建是由mod_fastcgi.so模块(当然通过LoadModule指令加载)完成的。
- Options +FollowSymLinks +ExecCGI:告诉Apache在此目录内允许CGI脚本执行
- RewriteCond %{REQUEST_FILENAME} !-f:只有当文件不存在时才进行重写
- RewriteRule ^(.*)$ dispatch.fcgi:所有内容都重定向到dispatch.fcgi
- FastCgiServer /usr/local/www/redmine/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -initial-env PATH=/usr/local/bin -processes 2:这是关键。正如Scott Laird在这篇博客中解释的,FastCGI可以以三种模式运行(见文章)。这告诉FastCGI如何处理我们的脚本,其中最重要的是initial-env定义了在FastCGI上下文中应该设置哪些变量。随着FastCGI的启动,它通常会在一个空白(空的)环境变量中启动,所以你的$PATH将是空的,而且/usr/bin/env 将无法在路径中找到ruby可执行文件,因此会因错误env: ruby: No such file or directory而失败。此外,ruby将不知道它需要在生产环境中启动。有了这一行,你就不需要修复dispatch.fcgi的shebang(#!/usr/bin/env ruby行),也不需要更改config/environment.rb文件中的ENV['RAILS_ENV'] ||= 'production'。
重新启动Apache,你应该就设置好了。
由steevithak . 更新,约10年前 · 2014-05-21 17:47 · 26次修订