Das auf Rails aufsetzende Ticketsystem Redmine bietet unter anderem ein integriertes Wiki, eine Dateiverwaltung sowie Anbindungen an diverse Versions-Verwaltungs-Systeme. In diesem Artikel möchte ich zeigen, wie Redmine unter Debian Lenny installiert und mit MySQL-Anbindung sowie Apache2 und mod_fcgid konfiguriert werden kann.

Ich gehe im Folgenden von einer Lenny-Basisinstallation aus, d.h. es sind keine Pakete aus Fremdquellen oder ähnliches installiert. Der Server, auf dem Redmmine aufgesetzt wird, ist unter dem Namen redmine.example.com erreichbar und nimmt auf localhost:25 Mails ohne Authentifizierung entgegen. MySQL und Apache müssen noch nicht installiert sein.

Als erstes sollten Ruby, Rubygems und Rails installiert und eingerichtet werden, wie ich es in einem früheren Artikel beschrieben habe. Die Pfade in den weiteren Schritten beziehen sich auf diese Konfiguration.

MySQL

Als erstes werden die für MySQL benötigten Debian-Pakete installiert:

# aptitude install mysql-server build-essential ruby1.8-dev libmysqlclient15-dev

Als nächstes das gem für die Ruby-MySQL-Anbindung:

# gem install mysql

Redmine installieren

Das Verzeichnis für die Redmine-Dateien kann frei gewählt werden (ich verwende /srv/www/redmine). Die einzige Voraussetzung ist, dass der Webserver Leserechte für diesen Pfad besitzt.

Download und Installation

Die aktuelle Version von Redmine kann bei Rubyforge heruntergeladen werden. Die derzeit aktuelle Version ist 0.8.4.

# mkdir -p /srv/www/
# cd /srv/www/
# wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
# tar xvzf redmine-0.8.4.tar.gz
# mv redmine-0.8.4 redmine
# cd redmine

Nun müssen die Zugriffsrechte gesetzt werden, so dass der Webserver (www-data) schreibend auf files/, log/, tmp/ und public/plugin_assets/ zugreifen kann:

# mkdir tmp public/plugin_assets
# chgrp -R www-data files log tmp public/plugin_assets
# chmod -R g+w files log tmp public/plugin_assets

Leere Datenbank einrichten

Als erstes wird eine leere Datenbank sowie ein User mit jeweils dem Namen ‘redmine’ angelegt. Dem neuen User werden volle Zugriffsrechte auf die Datenbank gegeben:

# mysql -uroot -p
mysql> create database redmine character set utf8;
mysql> create user 'redmine'@'localhost' identified by 'my_password';
mysql> grant all privileges on redmine.* to 'redmine'@'localhost';

Anpassen der Konfiguration

Damit Redmine auf die Datenbank zugreifen kann, müssen die Zugangsdaten entsprechend eingetragen werden:

# cp config/database.yml.example config/database.yml

In der Datei config/database.yml muss der Abschnitt ‘production’ angepasst werden:

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password
  encoding: utf8

Die anderen Abschnitte sind nur dann interessant, wenn man Redmine in einer anderen als der ‘production’-Umgebung betreiben möchte. Ansonsten können sie bleiben wie sie sind.

Die Datenbank befüllen

Nun kann Redmine auf die Datenbank zugreifen und das Schema kann per Rake-Task angelegt werden:

# rake db:migrate RAILS_ENV="production"

Es empfiehlt sich, die Default-Konfiguration ebenfalls zu laden, dies ist aber optional:

# rake redmine:load_default_data RAILS_ENV="production"

Testen der Installation

An dieser Stelle kann die Installation bereits mit dem WEBrick Webserver getestet werden:

# ruby script/server webrick -e production

Redmine sollte unter der Adresse redmine.example.com:3000 erreichbar sein und ein login (User: admin, Passwort: admin) sollte ebenfalls möglich sein. Hinweis: Damit der Login nicht fehlschlägt, müssen (Session-)Cookies akzeptiert werden.

Mit Ctrl-C wird der Webserver wieder beendet.

SMTP Konfiguration

Soll Redmine E-Mails versenden können, muss eine weitere Konfigurationsdatei angepasst werden:

# cp config/email.yml.example config/email.yml

Hier muss ebenfalls der Abschnitt ‘production’ bearbeitet werden:

production:
  delivery_method: :smtp
  smtp_settings:
    address: localhost
    port: 25
    domain: example.com
    authentication: :none

Apache installieren

Für diesen Teil der Installation musste ich recht lange herumprobieren, bis das Gespann aus Rails, mod_fcgid und Apache korrekt funktioniert hat. Bei diesem Zusammenspiel kann leider allzuviel schiefgehen.

Zunächst wird das CGI-Script an Ort und Stelle gebracht:

# cp public/dispatch.fcgi.example public/dispatch.fcgi

Eine weitere Anpassung ist nicht notwendig.

Es folgen die benötigten Debian-Pakete…

# aptitude install apache2 libapache2-mod-fcgid libfcgi-dev

… sowie ein weiteres gem:

# gem install fcgi

[Update 24.10.09: Als ich kürzlich auf Version 0.8.5 umgestellt habe, habe ich bemerkt, dass ich hier einen Schritt unterschlagen habe, den ich hiermit nachreichen möchte. Und zwar müssen in der public/.htaccess folgende Zeilen auskommentiert werden:

#<IfModule mod_cgi.c>
#       AddHandler cgi-script .cgi
#</IfModule>

und

#<IfModule mod_cgi.c>
#       RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
#</IfModule>

Ansonsten schreibt Apache den Request bis zum Erreichen des Limits immer wieder um und produziert einen Internal Server Error.]

Zuletzt wird der Virtual Host redmine.example.com konfiguriert. Dazu wird die Datei /etc/apache2/sites-available/redmine mit folgendem Inhalt angelegt:

<VirtualHost *:80>
  ServerName redmine.example.com
  ServerAlias redmine

  ServerAdmin webmaster@localhost

  DocumentRoot /srv/www/redmine/public/

  <IfModule mod_fcgid.c>
    DefaultInitEnv RAILS_ENV production
    DefaultInitEnv GEM_HOME /var/local/lib/gems
    DefaultInitEnv RUBYLIB /usr/local/ruby/lib/
  </IfModule>

  <Directory /srv/www/redmine/public/>
    Options Indexes ExecCGI FollowSymLinks
    Order allow,deny
    Allow from all
    AllowOverride all
  </Directory>

  ErrorLog /var/log/apache2/redmine_error.log
  LogLevel warn
  CustomLog /var/log/apache2/redmine_access.log combined
</VirtualHost>

Nun muss nur noch die Konfiguration geladen und das Modul rewrite aktiviert werden:

# a2ensite redmine
# a2enmod rewrite
# /etc/init.d/apache2 restart

Wenn nichts schiefgegangen ist, steht Redmine jetzt unter redmine.example.com/ bereit. Für die weitere Konfiguration und die ersten Schritte lohnt sich ein Blick ins Redmine Manual.