Project

General

Profile

HowTo configure Apache to run Redmine » History » Version 26

steevithak ., 2014-05-21 17:47
requested some clarifications to Apache config instructions

1 26 steevithak .
This document is very confusing - it talks about installing mod_fcgid, mod_fastcgi, and mod_passenger. Are ALL of these needed to run redmine or do they represent different options? If they are options, how does one know which is needed? A simple, numbered list of steps would be easier for a new user to follow. Also, how about some instructions for CentOS 6 and/or Fedora?
2
3 1 Cyber Sprocket
h1. HowTo configure Apache to run Redmine
4
5 7 Mischa The Evil
{{>toc}}
6 1 Cyber Sprocket
7 2 Cyber Sprocket
These notes assume you already have Redmine running via the webrick server and are looking to get Redmine running via your existing Apache installation.   Most of the commands assume you are in the root installation directory of redmine, so be sure to change directory there before starting.
8 1 Cyber Sprocket
9
h2. For CentOS 5
10
11
h3. Assumptions
12
13
* OS is CentOS 5
14
* Web server is Apache 2
15
** mod_cgi is enabled
16
** name based virtual servers are being used
17 2 Cyber Sprocket
** the web server runs under the user apache, group apache
18 1 Cyber Sprocket
19 4 Cyber Sprocket
h3. Myths
20
21
* You do not need to run mod_fcgid
22
* You do not need to run mod_fastcgi
23 8 William Baum
 
24
bq. -This section needs work. I can't tell if these are the myths or the corrections to the myths.
25
_(note: if someone were so generous to post working, known good, HOWTO steps here for enabling FastCGI, that would be highly valuable to the entire community.- It is reported that www.redmine.org itself runs FastCGI, so it is obviously a valid, worthwhile, stable, performing way to run this great great web app'.)_
26 5 Brad Mace
27 14 Cyber Sprocket
bq. I have added sections detailing the installation and configuration of mod_fastcgi and mod_fcgid below. --wmbaum, (2009-08-30)
28 1 Cyber Sprocket
29 14 Cyber Sprocket
bq. We had problems with getting Rails 2.3.5 working with cgi and fastcgi.  fcgid on Apache2 worked great for 9.3. We tweaked some of the notes based on the recent fcgid updates. -- "cybersprocket":http://www.cybersprocket.com, (2010-04-25)
30
31 1 Cyber Sprocket
h3. Basic Steps
32
33 11 Patrick OMalley
* Install Redmine per the [[RedmineInstall| installation instructions]] and get it running with webrick.
34 1 Cyber Sprocket
35
* Kill the webrick session
36
37
* Copy the public/dispatch.cgi.example to public/dispatch.cgi
38
39 18 Matt Brown
* Edit public/dispatch.cgi to fix the shell script invocation to point to the ruby executable:
40 1 Cyber Sprocket
  @#!/usr/local/bin/ruby@
41 9 Patrick OMalley
  or 
42 1 Cyber Sprocket
  @#!/usr/bin/ruby@
43 18 Matt Brown
  or
44
  @#!c:/ruby_root/bin/ruby.exe@
45 1 Cyber Sprocket
46 10 Patrick OMalley
* Also in public/dispatch.cgi, you may need to change the require line to an absolute path as stated in the comment to something like
47
  @require "/usr/lib/ruby/gems/1.8/gems/rails-2.1.2/lib/dispatcher.rb"@
48 19 Matt Brown
  or
49
  @require "c:/ruby_root/lib/ruby/gems/1.8/gems/rails-2.3.11/lib/dispatcher.rb"@
50 10 Patrick OMalley
51 1 Cyber Sprocket
* Make sure public/dispatch.cgi has execute permissions via:
52
  @# chmod 755 public/dispatch.cgi@
53
54
* Update the config/environment.rb file to force the rails environment to production, simply uncomment this line at the start of the file:
55
  @ENV['RAILS_ENV'] ||= 'production'@
56
57 3 Cyber Sprocket
* Add your virtual host entry to the apache configuration file (/etc/httpd/conf/httpd.conf).  We installed redmine into the /live/redmine folder on our server. _Note: be sure to point your DocumentRoot to the public sub-folder!_
58
59 1 Cyber Sprocket
<pre>
60
    <VirtualHost *:80>
61
        ServerName redmine.<YOUR-DOMAIN>.com
62
        ServerAdmin webmaster@<YOUR-DOMAIN>.com
63
        DocumentRoot /live/redmine/public/
64
        ErrorLog logs/redmine_error_log
65
66 21 Anton Kovalenko
        #If you are using mod_fcgid and are going to upload files larger than
67
        #131072 bytes you should consider adding the following line
68
        #that allows to upload files up to 20 mb
69
        MaxRequestLen 20971520
70
71 1 Cyber Sprocket
        <Directory "/live/redmine/public/">
72
                Options Indexes ExecCGI FollowSymLinks
73
                Order allow,deny
74
                Allow from all
75
                AllowOverride all
76
        </Directory>
77
    </VirtualHost>
78
</pre>
79
80 24 Genadi Saltikov
* Dont forget to bind to the port!
81
<pre>
82
Listen *:3000
83
</pre>
84
85 1 Cyber Sprocket
* Make sure your files, log, tmp, and vendor directories are all accessible (read/write) by user apache, group apache. We did that via a change of ownership:
86
  @# chown -R apache:apache files log tmp vendor@
87
88
89 2 Cyber Sprocket
h3. Error Messages and Resolutions
90 1 Cyber Sprocket
91 2 Cyber Sprocket
  * @Rails requires RubyGems >= 0.9.4. Please install RubyGems@
92 1 Cyber Sprocket
    Look for rogue versions of ruby binaries.  We had an older version in /usr/bin/ruby as well as /usr/local/bin/ruby.
93
94 2 Cyber Sprocket
  * @Premature script headers@
95
    This is the generic "got something before the Content-Type: header in a CGI script" error from Apache.  Run dispatch.cgi (see below) and see what comes out BEFORE the Content-Type: directive.
96
97 8 William Baum
h3. Helpful Commands
98 2 Cyber Sprocket
99
 * @# which ruby@
100
   tells you which ruby binary is being run when the fully-qualified-filename has not been specified.
101
102
 * @# find / -name ruby@
103
   searches your entire system for any file named ruby, warning: can take a while on large filesystems.
104
 
105
 * @# ruby -v@
106 1 Cyber Sprocket
   tell you what version of ruby you are running by default
107
108
 * @#public/dispatch.cgi@
109
   runs the dispatch CGI script.   It should spit out HTML that start with @Content-Type: text/html; charset=utf-8@, if ANYTHING precedes the Content-Type text you will get a "premature script headers" error in the Apache log files.
110 8 William Baum
111
h2. mod_fastcgi
112
113 17 André Jonsson
I suggest getting redmine running with mod_cgi above, not only to verify your basic redmine and apache configuration, but also so you can appreciate the perfomance gains you'll get from mod_fastcgi or mod_fcgid.
114 8 William Baum
115
We'll start with "mod_fastcgi":http://www.fastcgi.com/.  
116
117
Install prerequisites:
118
119
<pre>
120
yum install libtool httpd-devel apr-devel apr
121
</pre>
122
123
h3. Download and Install mod_fastcgi
124
125
<pre>
126
cd /usr/local/src/
127
wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
128
129
tar -zxvf mod_fastcgi-current.tar.gz
130
cd mod_fastcgi-2.4.6/
131
cp Makefile.AP2 Makefile 
132
make top_dir=/usr/lib/httpd
133
make install top_dir=/usr/lib/httpd
134
</pre>
135
136
Create or edit @/etc/httpd/conf.d/mod_fastcgi.conf@
137
<pre>
138
LoadModule fastcgi_module modules/mod_fastcgi.so
139
<IfModule mod_fastcgi.c>
140
FastCgiIpcDir /tmp/fcgi_ipc/
141
</IfModule>
142
</pre>
143
144
The @/tmp/fcgi_ipc/@ directory needs to be writable to the apache user:
145
<pre>
146
chown -R apache.apache /tmp/fcgi_ipc/
147
chmod -R 777 /tmp/fcgi_ipc/
148
</pre>
149
150
> Note:  I had to do this more than once.. It created directories which it then didn't own.. ??
151
152
h3. Download and install @fcgi@ (for fcgi gem)
153
154
<pre>
155
wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
156
tar -zxvf fcgi-2.4.0.tar.gz
157
cd fcgi-2.4.0
158
./configure
159
make
160
make install
161
</pre>
162
163
h3. Install fcgi gem:
164
165
<pre>
166
gem install fcgi
167
</pre>
168
169
h2. Configuring redmine to use fastcgi:
170
171
In your redmine/public/ directory, copy @dispatch.fcgi.example@ to @dispatch.fcgi@
172
> Note: Mine was shebanged to "#!/usr/bin/env ruby", which is fine.  I found a reference or two that seemed to indicate the 'env' bit is preferable to calling ruby directly.  If this doesn't work, then you'll need to change it to wherever your ruby is as above.
173
174
@./public/.htaccess@
175
<pre>
176 22 Anton Kovalenko
#RewriteRule ^(stylesheets.*|images.*|favicon.*|javascripts.*|plugin_assets.*|themes.*|help.*)$ $1 [L]
177 8 William Baum
#<IfModule mod_fastcgi.c>
178
#       RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
179
#</IfModule>
180
#<IfModule mod_fcgid.c>
181
#       RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
182
#</IfModule>
183
#<IfModule mod_cgi.c>
184
#       RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
185
#</IfModule>
186
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
187
</pre>
188
189
The default .htaccess will use cgi if it's available, so we need to force fcgi.  You could perhaps rearrange the directives to prefer fcgi -- I just commented out the others and forced it with <code>RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]</code>  You can see which one is actually in use with <code>ps gaux</code>
190 24 Genadi Saltikov
191
192 8 William Baum
193
Give it a whirl:
194
<pre>
195
/etc/init.d/httpd configtest
196
/etc/init.d/httpd restart
197
</pre>
198
199
h2. Additional Apache Configuration
200
201
When I first fired up apache with redmine, apache started very slowly and sucked up a significantly larger chunk of RAM than normal.  Further investigation revealed that it had fired off *8* @ruby .../redmine/public/dispatch.fcgi@ processes! No wonder it was slow. 
202
203
I was running redmin under the apache default VirtualHost, and the default StartServers, MinSpareServers, etc. applied.  You can adjust the defaults in @/etc/httpd/conf/httpd.conf@ or even better is to run redmine under a @NameVirtualHost@ or a different @VirtualHost@.  This prevents apache from firing off a bunch of extraneous processes, and @NameVirtualHost@ should allow you to configure multiple redmine environments on the same IP without wasting a bunch of resources.
204
205
If you're having issues with apache virtual hosts, this can be very helpful:
206
<pre>
207
/usr/sbin/httpd -t -D DUMP_VHOSTS
208
</pre>
209
210
h2. mod_fcgid
211 1 Cyber Sprocket
212 14 Cyber Sprocket
h3. fcgid from Apache
213
214
"Official Apache mod_fcgid":http://httpd.apache.org/mod_fcgid/ this is the Apache version, seems newer and we had more luck with this than the Coremail hosted version below.
215
216
<pre>
217
cd /usr/local/src/
218
wget http://apache.mirrors.hoobly.com/httpd/mod_fcgid/mod_fcgid-2.3.5.tar.gz
219
tar zxvf mod_fcgid.2.3.5.tgz
220
cd mod_fcgid.2.3.5
221
</pre>
222
223
Configure and Install
224
<pre>
225
./configure.apxs
226
make
227
make install
228
service httpd restart
229
</pre>
230
231
232
233
h3. fcgid from China Coremail service
234
235 8 William Baum
"mod_fcgid":http://fastcgi.coremail.cn/ seems newer and preferable to mod_fastcgi.
236 1 Cyber Sprocket
237 14 Cyber Sprocket
238 1 Cyber Sprocket
<pre>
239 8 William Baum
cd /usr/local/src/
240 14 Cyber Sprocket
wget http://apache.mirrors.hoobly.com/httpd/mod_fcgid/mod_fcgid-2.2.tar.gz
241 13 William Baum
tar zxvf mod_fcgid.2.2.tgz
242
cd mod_fcgid.2.2
243 8 William Baum
</pre>
244
245
Edit Makefile
246
<pre>
247
#top_dir      = /usr/local/apache2
248 1 Cyber Sprocket
top_dir      = /usr/lib/httpd
249 13 William Baum
</pre>
250
251
Build it..
252
<pre>
253
make
254
make install
255 8 William Baum
</pre>
256
257
Edit/create @/etc/httpd/conf.d/mod_fcgid.conf@
258
<pre>
259
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so
260
261
<IfModule mod_fcgid.c>
262
    SocketPath /tmp/fcgid_sock/
263
    AddHandler fcgid-script .fcgi
264
</IfModule>
265
</pre>
266
267
Now you should be able to switch between mod_fastcgi and mod_fcgid by renaming one of them to other than *.conf in @/etc/httpd/conf.d/@
268
<pre>
269
cd /etc/httpd/conf.d/
270
mv mod_fastcgi.conf mod_fastcgi.conf.not
271 1 Cyber Sprocket
/etc/init.d/httpd restart
272
</pre>
273 14 Cyber Sprocket
274
275
h3. Either Version, Permissions
276
277
With either fcgid version you may run into problems with the fcgid service starting.   Make sure the socks parent directory (typically /var/log/httpd) has proper permissions.   The default directory permissions for /var/log/httpd is for a standard non-fcgid install of Apache.  You need to add execute permissions for Apache to read/write to the directory properly while it is running fcgid.
278
279
<pre>
280
chmod 755 /var/log/httpd
281
service httpd restart
282
</pre>
283
284 8 William Baum
285
h2. Installation Sources
286
287
In the above steps, I installed from sources only where I didn't find any RPM's in common repo's.  I'm rather surprised that one can't simply @yum install@ mod_fastcgi, mod_fcgid, fcgi, etc., but there we are.  If you find better methods or sources for any of the above, please feel free to update.
288 12 Fred Eisele
289 23 Clinton Ooi
bq. You can find mod_fcgid rpm "here":http://rpmfind.net/linux/RPM/epel/6/x86_64/mod_fcgid-2.3.7-1.el6.x86_64.html --yingchun437, (2012-06-25)
290
291
292 16 Lu Pon
h2. Ubuntu Server (Version ?) (This not don't work for 8.04 LTS)
293 12 Fred Eisele
294
Install passenger
295
<pre>
296
sudo aptitude install libapache2-mod-passenger
297
</pre>
298
This did switch the type of apache server to worker from prefork but in my case that was acceptable.
299
300
I had installed the redmine tarball into /opt/redmine as redmine-0.8.5 and made a symlink named current.
301
Then make a link to the redmine public directory from the apache DocumentRoot (see /etc/apache2/config.d/*).
302
<pre>
303
ln -s /opt/redmine/current/public /var/www/redmine
304
</pre>
305
306
Updated /etc/apache/config.d/redmine (or wherever your virtualhost is defined) with the following:
307
<pre>
308
RailsEnv production
309
RailsBaseURI /redmine
310
</pre>
311
312
Restart apache.
313 15 Martin Cyr
314
h2. For FreeBSD (and possibly others)
315
316
I found the current instructions to be lacking on some way. With the information above, the scripts and css might not appear correctly, the link get broken and such. Also, some hacks seems to have been lost to history (the #!/bin/bash/ruby hack, wich is not required with this technique). Here is how I got it going.
317
318
Make sure 'Apache 2.2', 'Ruby', 'fastcgi' (including the gem) are installed.
319
First, putting redmine in a sub-directory requires more work and is left for the reader as an exercise to get properly (hint Rewrite is your friend), so from now on, I will assume that redmine will be the DocumentRoot.
320
So here it is, my httpd.conf :
321
<pre>
322
LoadModule fastcgi_module     libexec/apache22/mod_fastcgi.so
323
324
DocumentRoot "/usr/local/www/redmine/public"
325
326
FastCgiServer /usr/local/www/redmine/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -initial-env PATH=/usr/local/bin -processes 2
327
328
<Directory /usr/local/www/redmine/public>
329
   AddHandler fastcgi-script fcgi
330
   Order allow,deny
331
   Allow from all
332
   AllowOverride all
333
   Options +FollowSymLinks +ExecCGI
334
   RewriteEngine On
335
   RewriteCond %{REQUEST_FILENAME} !-f
336
   RewriteRule ^(.*)$ dispatch.fcgi
337
</Directory>
338
</pre>
339
340
Now let's explain what happens and why:
341
# _AddHandler fastcgi-script fcgi_: defines that when apache identifies a file with extension fcgi, if should be handled buy the fastcgi-script handler. This definition of a handler is created by the mod_fastcgi.so module (loaded through the LoadModule directive of couse).
342
# _Options +FollowSymLinks +ExecCGI_: tells apache that within this directory, CGI-ish script execution is allowed
343
# _RewriteCond %{REQUEST_FILENAME} !-f_: only rewrite if the file doesn't exist
344
# _RewriteRule ^(.*)$ dispatch.fcgi_: everything goes to dispatch.fcgi
345
# _FastCgiServer /usr/local/www/redmine/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -initial-env PATH=/usr/local/bin -processes 2_: This is the main thing. As Scott Laird explains in this "blog":http://scottstuff.net/blog/2005/07/20/apache-tuning-for-rails-and-fastcgi, running FastCGI can run in three modes (see post). This tells FastCGI how to handle our script, with the important part being the initial-env to define what variables should be set in the FastCGI context. As FastCGI starts, it will normally start with a blank (*emtpy*) environment variables, so yeah, your $PATH will be empty, and no /usr/bin/env *will NOT* find the ruby executable in the path and thus failing with the error _env: ruby: No such file or directory_. Also, ruby will not know that he is expected to start in production env. With this line, you don't have to fix your dispatch.fcgi shabang (the #!/usr/bin/env ruby line) nor will you have to change the config/environment.rb file with a ENV['RAILS_ENV'] ||= 'production'.
346
347
Restart apache and you should be set.