This how-to is designed to help you install Redmine and Subversion on Ubuntu 10.04. It may work on other versions of Ubuntu, and for that matter Linux but I haven’t tested or tried it out.
This guide aims to:
- Install Subversion with a basic setup
- Install and setup Ruby on Rail to use Apache via Passenger
- Install and setup Redmine in a basic configuration
This guide does not:
- Consider advanced features of Subversion, Redmine, Passenger or Ruby on Rails
- Look into using other server methods, e.g. mongrel and thin
This is not to say I cannot help you with more advanced configurations, or won’t post about it in the future, I just wanted this guide to help you get up and running with Redmine and subversion as quickly as possible. While this may seem simple, it can be more difficult than first thought, due to Ubuntu’s quirks.
PrerequisitesThere are a couple of things that need to be installed before you can begin this guide, effectively you need a LAMP configuration, of which this series of blog posts describes how to install and configure. Now that the server is all setup, lets start by installing subversion
Subversion Installation and ConfigurationThe main reason for installing Subversion, or SVN for short, is because it is needed to check out some components later. So lets get stuck in and install SVN.
sudo apt-get install subversion libapache2-svnThe next thing to do is configure the user access for subversion this is done by executing
sudo htpasswd -c /etc/subversion/passwdWhere
Now you need to decide where you want to put your repositories. I suggest you put them all under one root path, for example /home/svn. For each repository you want create a new folder in the svn root folder and then run the following command to turn it into a repository
svnadmin create /home/svn/yourprojectOne thing to note is that we are going to use apache to serve the repositories so we need to make the svn root folder and all subsequent child files and folders accessable by apache. This is typically done by using the following command
sudo chown -R www-data:www-data /home/svn/The final part to getting your repositories to be accessed from a web address, like , is to add the following code to your sites apache config file nomally located in /etc/apache2/sites-available
The last thing to do is restart apache after saving the file
sudo /etc/init.d/apache2 restartA couple of caveats. Firstly this only allows you to view and upload to the repository if you have a username and password, and secondly all password details are sent via plain text not via ssl. Configuring subversion to allow gest to view, or upload to, a repository and allowing only ssl access are outside the scope of this document. Check out the and website for more advance configurations
Redmine Installation and ConfigurationThe first thing to note is that the current version of Redmine is 1.0.0RC, although a bugfix version, 1.0.1 is a couple of weeks away. This is important as it requires some specific versions of some applications, which might change in future releases, although I will try to keep this up-to-date.
The second thing to note is that Redmine runs on Ruby on Rails rather than things like php. So we will need to install and setup Ruby on Rails first.
Ruby on Rails InstallationThe first thing to do is install ruby, and it’s here that a big quirk of Ubuntu crops up. If you were to install the standard ruby package several key parts for running Redmine are left out so instead the following is executed, to install all required components.
sudo apt-get install ruby-full build-essentialIf you want to you can get the installation version by running
ruby –vYou should get something like
ruby 1.8.7p5000 (2009-02-22) [i686-linux]Importantly if your version of ruby is NOT 1.8.6 or 1.8.7 Redmine will fail to work.
Ruby GemsIn order to install a lot of the required components for Redmine, an install called RubyGems will be installed. Unfortunately the current version of RubyGems in Ubuntu seems not to work properly instead download the latest version from the . For me the latest version is 1.3.7. So lets download RubyGems and extract the files
wget tar xzvf rubygems-1.3.7.tgzThe next thing to do is run the setup file and make sure we can use RubyGems using the gem prefix instead of the gem1.8 prefix. This is accomplished by creating a symbolic link.
sudo ruby rubygems-1.3.7/setup.rb sudo ln –s /usr/bin/gem1.8 /usr/bin/gemFinally lets just do a bit of housekeeping
rm rubygems-1.3.7.tgz rm -r rubygems-1.3.7RailsNow we are ready to install Rails, and a couple of other things required for Redmine to work. It is important to add the version number after each application as these are required version for Redmine and current versions are not compatible with Redmine.
sudo gem install rails -v=2.3.5 sudo gem install rack -v=1.0.1 sudo gem install rake -v=0.8.3Be patient when installing. It may take some time and seem to have crashed, it hasn’t. A way to speed up the install is by adding the “–no-rdoc” command. The documentation is normally the longest part of the install.
MySQL OptimisationA quick tip that can help performance of a Ruby on Rails application that accesses MySQL is to install the Ruby interface components and the MySQL gem
sudo apt-get install libmysql-ruby libmysqlclient-dev sudo gem install mysqlRedmine InstallationNow you have installed all the prerequisits of Redmine, its time to get down to intalling the actual product, Redmine. You can either download the latest version of Redmine from , and extract it to the location you are hosting your Redmine site, or like me, check it out from the SVN repository. First go to the folder you want to contain Redmine then check it out and update the owner of the new folder
cd /path/to/your/site sudo svn co redmine sudo chown -R www-data:www-data redmineThe final “redmine” part indicates the folder you want to check out Redmine into. Assuming you’ve installed phpmyadmin to administer MySQL, fire it up and open the sql tab and enter the following to create a new database for Redmine. (If you haven’t installed phpmyadmin go to to ensure you have php installed, and to install phpmyadmin)
create database redmine character set utf8; create user 'redmine'@'localhost' identified by 'my_password'; grant all privileges on redmine.* to 'redmine'@'localhost';Now we have the database we need to tell Redmine all about, so we’ll jump into the Redmine folder and configure the database file
cd redmine sudo cp config/database.yml.example config/database.yml sudo nano config/database.ymlThis will copy the example database file and open it so you can update the file. You need to update the production section so it looks something like this:
production: adapter: mysql database: redmine host: localhost username: redmine password: my_passwordOf course, you need to update it with your database details. We now need to create a session store for Redmine and create the database. This is carried out using the following commands
rake generate_session_store RAILS_ENV=production rake db:migrateNow you have an empty database. This is all well and good but I suggest you load the default data in so that you get an idea of how Redmine works
RAILS_ENV=production rake redmine:load_default_dataSo now we’ve pretty much done all the work to test that Redmine does in fact work the permissions and the database. We can test is using the built in WEBrick web server, which is good for testing but not for production. So lets allow it through our firewall and start it up
sudo ufw allow 3000 sudo ruby script/server webrick -e productionNow all you need to is navigate to and you should see Redmine. The default login details are
login:admin password:adminWhen you have finished testing press ctrl+c in the shell to stop WEBrick. I would suggest now you’ve finished testing Redmine you close the port for WEBrick
sudo ufw deny 3000Redmine and ApacheSo we have Redmine and you will quickly see that if you were to navigate to its path you won’t be able to access it. What we need to do is set up Apache to work with it. There are plenty of ways you can run Ruby on Rails applications. I prefer to use so that’s what I’ll describe here. So lets install Passenger
sudo gem install passengerApache unfortunately has some quirks attached to it which make using Passenger out of the box a bit of a pain, so we need to install some more components
sudo apt-get install apache2-prefork-dev libapr1-dev libaprutil1-devNow Apache is ready to interface with Passenger, so lets go ahead and install it
passenger-install-apache2-moduleWe now need to modify the Apache config files so that Passenger will handle Ruby applications when Apache is pointed to one so execute the following command
sudo nano /etc/apache2/apache2.confAnd add the following to the bottom of the file
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15 PassengerRuby /usr/bin/ruby1.8Once this is done a reboot of Apache is required to tell it we have updated its configuration.
sudo /etc/init.d/apache2 restartRedmine is almost at the stage it can be through Apache, just a couple more steps. First open your websites config file
cd /etc/apache2/sites-available sudo nano siteconfig.confAnd modify the file so it looks something like this
Or if you access SVN from the same file like this
I just want to explain a couple of things. Firstly, PassengerPoolIdleTime set to 0 means that Passenger will never close down its running applications. Secondly, PassengerEnabled on ensures that Apache understands that it need to call passenger for this directory. Finally, for me leaving AllowOverride as it is seems to work for me.
I hope you found this useful. I’m opening this one up to comments so that anyone who has problems can let me know