HowTo Install Redmine in a sub-URI on Windows with Apache » History » Version 11

Version 10 (Jozef Izso, 2010-09-11 16:02) → Version 11/13 (Jack Kurzecki, 2010-12-19 10:55)

h1. HowTo Install Redmine in a sub-URI on Windows with Apache

{{>toc}}

bq. Following the steps below exactly as listed will produce a working *Redmine* installation hosted under *http://localhost/redmine* sub-URI on Windows XP/2003/2008 x86/x64 with Apache HTTP Server 2.2.x, MySQL 5.1.x, PHP 5.3.x and Ruby 1.8.7.
This walk-through was tested with *Redmine 1.0.4.devel.4543* 1.0.0.devel.3919* but should work with any version >= 0.8 .
The intended audience for this walk-through are Windows users.

+In case you encounter problems, please look at "*this forum thread*":http://www.redmine.org/boards/1/topics/10162 for information about some known issues and their workarounds+

h2. Install Apache HTTP server 2.2.x

# Download *"Win32 Binary without crypto (no mod_ssl) (MSI Installer)"* or *"Win32 Binary including OpenSSL (MSI Installer)"*, depending if you intend to use SSL on your webserver, from "here":http://httpd.apache.org/download.cgi
# Install to *C:\webserver\Apache\*

h2. Install MySQL 5.1.x

# Download *"Windows (x86, 32-bit), MSI Installer - Essentials - Recommended"* from "here":http://dev.mysql.com/downloads/mysql/5.1.html#win32
#* _(the *64-bit* version could be installed on x64 Windows platforms, but the *32-bit* version is +recommended+ and it works well on both x86 and x64 versions of Windows.)_
# Install to *C:\webserver\MySQL\*
#* During initial setup:
#*# (_optional:_) set data files installation directory to *C:\webserver\MySQL_Data\*
#* During Server Instance Configuration Wizard:
#*# (_optional:_) Add firewall exception for the port used
#*# set +default character set+ to "Best Support for Multilingualism" *UTF8*
#*# select "Include Bin Directory in Windows PATH"

h2. Install MySQL Workbench 5.2.x

# Download *"Windows (x86, 32-bit), MSI Installer"* from "here":http://dev.mysql.com/downloads/workbench/
# Install to *C:\webserver\MySQL_Workbench\*

h2. Install PHP 5.3.x

# Download *"VC6 x86 Thread Safe - Installer"* from "here":http://windows.php.net/download/
# Install to *C:\webserver\PHP\*
#* During setup:
#*# for webserver, choose "Apache 2.2.x Module"
#*# configuration directory is "C:\webserver\Apache\conf\"
#*# you can leave all default Extensions as they are, optionally adding "Internationalization" and "Multi-Byte String"

h2. Install Ruby 1.8.7 with RubyGems

* _At the time of writing this document the latest version of Ruby was 1.9.2, 1.9.1, however for best compatibility use +Ruby version 1.8.7+._

# Download *"rubyinstaller-1.8.7-p302.exe"* *"rubyinstaller-1.8.7-p299.exe"* from "here":http://rubyforge.org/frs/?group_id=167
# Install to *C:\webserver\Ruby\*
# During setup, select *"Add Ruby executables to your PATH"*
# Verify Ruby version
#* Open command window, execute: <pre>
ruby -v
</pre>
#** expected output:<pre>
ruby 1.8.7 (2010-08-16 (2010-06-23 patchlevel 302) 299) [i386-mingw32]
</pre>
# Verify RubyGems version
#* in command window, execute: <pre>
gem -v
</pre>
#** expected output:<pre>
1.3.7
</pre>
##* _At the time of writing this document the latest version of RubyGems was 1.3.7. Newer versions should work too._
# Check for RubyGems update
#* in command window, execute: <pre>
gem update --system
</pre>
#** expected output:<pre>
Updating RubyGems
Nothing to update
</pre>

* _If you get errors about missing "SSLEAY32.dll", install PHP as shown above and this dll will become available_

h2. Additional gems

* _mongrel-service and win32-service gems have to be downloaded manually. Download locations are added to sections below._

h3. Install Rake

* _At the time of writing this document the latest version of Rake was 0.8.7. Newer versions should work too._

# Install Rake gem
#* in command window, execute: <pre>
gem install rake</pre>
#** expected output:<pre>
Successfully installed rake-0.8.7
</pre>

h3. Install Rails

* _At the time of writing this document, the latest version of Rails is 3.0.3, 2.3.8, but *Redmine 1.0.4* 1.0.0* installation requires *Rails 2.3.5*._

# Install Rails gems
#* in command window, execute: <pre>
gem install rails -v=2.3.5
</pre>
#** expected output:<pre>
Successfully installed activesupport-2.3.5
Successfully installed activerecord-2.3.5
Successfully installed rack-1.0.1
Successfully installed actionpack-2.3.5
Successfully installed actionmailer-2.3.5
Successfully installed activeresource-2.3.5
Successfully installed rails-2.3.5
7 gems installed
</pre>

h3. Install i18n


* _At the time of writing this document, the latest version of i18n is 0.5, but *Redmine 1.0.4* installation requires *i18n 0.4.2*._

# Install i18n gem
#* in command window, execute: <pre>
gem install -v=0.4.2 i18n
</pre>
#** expected output:<pre>
Successfully installed i18n-0.4.2
1 gem installed
</pre>

h3. Install Mongrel

* _At the time of writing this document the latest version of Mongrel was 1.1.5. Newer versions should work too._
* "_Project page_":http://rubyforge.org/projects/mongrel/

# Install Mongrel gems
#* in command window, execute: <pre>
gem install mongrel
</pre>
#** expected output:<pre>
Successfully installed gem_plugin-0.2.3
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.5-x86-mingw32
3 gems installed
</pre>

h3. Install mysql gem

* _At the time of writing this document the latest version of mysql gem was 2.8.1. Newer versions should work too._
* It drastically improves page generation speed.

# Install mysql gem
#* in command window, execute: <pre>
gem install mysql
</pre>
#** expected output:<pre>
Successfully installed mysql-2.8.1-x86-mingw32
1 gem installed
Installing ri documentation for mysql-2.8.1-x86-mingw32...
No definition for (...)
</pre>
#** _The gem was made for MySQL 5.0 so there are some additional features in 5.1 which will not be defined, so you will see a number of lines about missing definitions, but it does not cause any problems_

h3. Install mongrel-service + win32-service gems

* _At the time of writing this document the latest version of win32-service was 0.7 which does *NOT* work with Ruby 1.8.7_
* *Use only win32-service version 0.5.2 for Redmine deployment.*

# Download *"mongrel_service-0.3.4-i386-mswin32.gem"* from "here":http://rubyforge.org/frs/?group_id=1306
# Move *mongrel_service-0.3.4-i386-mswin32.gem* to *C:\webserver\*
# Download *"win32-service-0.5.2-mswin32.gem"* from "here":http://files.ruby.inoack.com/win32utils/
#* _This file is also attached at the bottom of this wiki page_
# Move *win32-service-0.5.2-mswin32.gem* to *C:\webserver\*
# Install the gem
#* in command window, execute: <pre>
cd C:\webserver\
gem install mongrel_service
</pre>
#** expected output:<pre>
Successfully installed win32-service-0.5.2-x86-mswin32
Successfully installed mongrel_service-0.3.4-x86-mswin32
2 gems installed
</pre>
# Delete the two .gem files from C:\webserver\

h2. Install Redmine

* _Procedure below assumes we will be installing Redmine 1.0.4, 1.0.0, but it also works with any revisions >= r3235_

# Download *"redmine-1.0.4.zip"* *&quot;redmine-1.0.0.zip&quot;* from "here":http://rubyforge.org/frs/?group_id=1850
# Extract the contents of the +redmine-1.0.4+ +redmine-1.0.0+ directory in the archive to *C:\webserver\Redmine*
# Log into MySQL as *root* using "MySQL Workbench". You can also use command prompt or another tool, such as "MySQL GUI Tools" or "phpMyAdmin".
## "Open connection to Start Querying"
## In SQL Query window enter the following script: <pre>
create database redmine character set utf8;
create user 'redmineUser'@'localhost' identified by 'myPassword';
grant all privileges on redmine.* to 'redmineUser'@'localhost';
</pre>
## "Execute SQL Script in Connected Server"
##* _You should of course change *redmineUser* and *myPassword* to something different._
# Copy *C:\webserver\Redmine\config\database.yml.example* to *C:\webserver\Redmine\config\database.yml*
# Edit *C:\webserver\Redmine\config\database.yml* file to configure your database settings for "production" environment. It should look like this:<pre>
production:
adapter: mysql
database: redmine
host: localhost
username: redmineUser
password: myPassword
encoding: utf8
</pre>
## Set username and password to the values entered in the SQL script above.
## Save and close the file.
# Create (or update) Redmine database tables
#* in command window, execute: <pre>
cd C:\webserver\Redmine
set RAILS_ENV=production
rake generate_session_store
rake db:migrate
</pre>
#** _If you encounter this error: *Mysql::Error: query: not connected: CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB*_ :
#**# download *libmySQL.dll* from "here":http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/
#**# move this .dll file to *C:\webserver\Ruby\bin\*
#**# in command window, again execute: <pre>
rake db:migrate
</pre>
#** There is a known issue with Redmine 1.0.0 on Win32 and you might get an error: *Mysql::Error: BLOB/TEXT column &#x27;path&#x27; can&#x27;t have a default value: ALTER TABLE `c
hanges` CHANGE `path` `path` text DEFAULT &#x27;&#x27; NOT NULL*
#*** It is resolved in r3860 , to resolve yourself:
#***# open *C:\webserver\Redmine\db\migrate\20100705164950_change_changes_path_length_limit.rb*
#***# in the *def self.up* block insert at the beginning: &lt;pre&gt;
change_column :changes, :path, :text, :default =&gt; nil, :null =&gt; true
&lt;/pre&gt;
#***# save file
#***# in command window, again execute: &lt;pre&gt;
rake db:migrate
&lt;/pre&gt;
# If this is a fresh install, you can pre-populate the tables with default data
#* in command window, execute: <pre>
rake redmine:load_default_data
</pre>
# _Assuming that we will be hosting Redmine under http://localhost/redmine_
#* Edit *C:\webserver\Redmine\config\environment.rb* file to configure Redmine to work as a sub-URI (Apache configuration is also required and is listed later on in this document).
#* add the following line at the bottom of the file:<pre>
Redmine::Utils::relative_url_root = "/redmine"
</pre>
#* save and close the file.
#* _This is a preferred way of setting up the application prefix. *Mongrel_rails service "--prefix" directive does +NOT+ work with Rails 2.3.x*_
#** Optionally, you can add To fix this issue create a following initializer, but *_ONLY IF_* you want to use "--prefix" in "Mongrel_rails service" command +instead+ of changing "environment.rb":
#*** Create a
file config/initializers/patch_for_mongrel.rb [name of file can be anything]:
<pre>
# Fix for mongrel which still doesn't know about Rails 2.2's changes,
# We provide a backwards compatible wrapper around the new
# ActionController::base.relative_url_root,
# so it can still be called off of the actually non-existing
# AbstractRequest class.

module ActionController
class AbstractRequest < ActionController::Request
def self.relative_url_root=(path)
ActionController::Base.relative_url_root=(path)
end
def self.relative_url_root
ActionController::Base.relative_url_root
end
end
end
#
# Thanks to http://www.ruby-forum.com/topic/190287
</pre>

h2. Setup windows services

* Memory usage is greatly affected by the number of mongrels running. Keep that in mind when deciding on how many processes you want to run. For example, memory usage on Windows Server 2003 x64 SP2:
** Apache = 5MB + 20MB + 40MB = 65MB
** MySQL = 35MB
** Mongrel cluster = number-of-mongrel_rails-services x (3MB + 90MB) = 279MB (@3 processes)

# Create windows services
## in command window, execute: <pre>
mongrel_rails service::install -N mongrel_redmine_3001 -D "Mongrel serving Redmine on 3001" -p 3001 -e production -c C:\webserver\Redmine
mongrel_rails service::install -N mongrel_redmine_3002 -D "Mongrel serving Redmine on 3002" -p 3002 -e production -c C:\webserver\Redmine
mongrel_rails service::install -N mongrel_redmine_3003 -D "Mongrel serving Redmine on 3003" -p 3003 -e production -c C:\webserver\Redmine
</pre>
# Start windows services, which in turn will start mongrel servers
## in command window, execute: <pre>
net start mongrel_redmine_3001
net start mongrel_redmine_3002
net start mongrel_redmine_3003
</pre>
# Go to the Windows Services list and set all "Mongrel serving Redmine on 300#" services to start automatically
## in command window, execute: <pre>
services.msc /s
</pre>
## find each one of "Mongrel serving Redmine on 300#" services
## right click, select *Properties*
## set *Startup type* to *"Automatic"*
## press OK and repeat for the remaining Mongrel services.
#* _Alternatively you can execute this command on elevated command prompt for each mongrel service installed:_ <pre>
sc config mongrel_redmine_3001 start= auto
</pre>

h2. Configure Apache 2.2.x as proxy to Mongrel cluster

* _Procedure below assumes we will be hosting Redmine under http://localhost/redmine and must match the *relative_url_root* set above_

# Open *C:\webserver\Apache\conf\httpd.conf*
# At the bottom of this file add the following line: <pre>
Include conf/httpd-proxy-mongrel.conf
</pre>
# Create a file *C:\webserver\Apache\conf\httpd-proxy-mongrel.conf*
# Enter the following: <pre>
<IfModule !mod_proxy.c>
LoadModule proxy_module modules/mod_proxy.so
</IfModule>
<IfModule !mod_proxy_http.c>
LoadModule proxy_http_module modules/mod_proxy_http.so
</IfModule>
<IfModule !mod_proxy_balancer.c>
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
</IfModule>

ProxyPass /redmine balancer://redmine_cluster
ProxyPassReverse /redmine balancer://redmine_cluster

<Proxy balancer://redmine_cluster>
BalancerMember http://127.0.0.1:3001
BalancerMember http://127.0.0.1:3002
BalancerMember http://127.0.0.1:3003
</Proxy>
</pre>
# Restart the Apache service.
#* in command window, execute: <pre>
C:\webserver\Apache\bin\httpd.exe -w -n "Apache2.2" -k stop
C:\webserver\Apache\bin\httpd.exe -w -n "Apache2.2" -k start
</pre>

*+DONE!+*
Your local installation of Redmine is now accessible at http://localhost/redmine

h2. Additional components

h3. Install RMagic

# Download *"RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip"* or a later version from "here":http://rubyforge.org/frs/?group_id=12
# Extract *"rmagick-2.12.0-x86-mswin32.gem"* to *C:\webserver\*
# Install *"ImageMagick-6.5.6-8-Q8-windows-dll.exe"* to *C:\webserver\ImageMagick*
# Install the RMagic gem
#* in command window, execute: <pre>
cd C:\webserver
gem install rmagick --local
</pre>
#** expected output:<pre>
Successfully installed rmagick-2.12.0-x86-mswin32
1 gem installed
</pre>
# Delete the .gem file from C:\webserver\
# Reboot your server. (I was unsuccessful trying to get it to work without rebooting)

h3. Add redmine_attach_screenshot plugin

# download source from "here":https://github.com/blondak/redmine_attach_screenshot &quot;here&quot;:http://github.com/snej/redmine_attach_screenshot
# Extract the archive to *C:\webserver\Redmine\vendor\plugins\redmine_attach_screenshot*
# Restart the Mongrel cluster
#* in command window, execute: <pre>
net stop mongrel_redmine_3001
net stop mongrel_redmine_3002
net stop mongrel_redmine_3003
net start mongrel_redmine_3001
net start mongrel_redmine_3002
net start mongrel_redmine_3003
</pre>

+In case you encounter problems, please look at "*this forum thread*":http://www.redmine.org/boards/1/topics/10162 for information about some known issues and their workarounds+