Wer ein leistungsstarkes Ticket- oder Projektmanagementsystem sucht, findet mit Redmine eventuell die perfekte Lösung. Auch ich verwende Redmine für Nocksoft. Da sich die manuelle Installation als nicht ganz einfach erweist, soll diese Anleitung es auch Einsteigern ermöglichen Redmine unter Ubuntu zu installieren. Die offizielle Anleitung ist hier zu finden und ebenfalls lesenswert.
Bereits mein alter Artikel Redmine unter Ubuntu 16.04 installieren ist auf großen Zuspruch gestoßen. Von daher ist es mit der neuen Ubuntu LTS-Version eine gute Gelegenheit diese Anleitung einmal zu aktualisieren.
Inhaltsverzeichnis
Installation des Betriebssystems
Bei der Installation des Betriebssystems ist auf nicht viel zu achten. Ich verwende für diese Anleitung einen frisch installierten Ubuntu Server. Lediglich den SSH-Server habe ich bei der Installation mitinstalliert, um den Server später per PuTTY o.ä. administrieren zu können.
Nach der Grundinstallation nehme ich noch einige Einstellungen vor. In meiner Installation ist die Zeitzone nicht korrekt gesetzt. Das hole ich nach:
sudo unlink /etc/localtime sudo ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Anschließend installiere ich noch sämtliche zur Verfügung stehenden Updates:
sudo apt update && sudo apt upgrade -y
Apache und MySQL installieren
Redmine benötigt einen Webserver und eine Datenbank. Ich verwende standardmäßig Apache und MySQL. Für die Installation verwende ich folgenden Befehl:
sudo apt install apache2 mysql-server
Datenbank anlegen
Um eine neue Datenbank für Redmine anzulegen, muss sich zunächst an der MySQL-Shell angemeldet werden:
sudo mysql
Mit den folgenden Befehlen erstelle ich die Datenbank redmine und einen Benutzer redmine, der Berechtigungen hat, um sich an der neuen Datenbank anzumelden (password ist natürlich mit dem gewünschten Passwort für den neuen MySQL-Benutzer redmine zu ersetzen):
CREATE DATABASE redmine CHARACTER SET utf8mb4; CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

Redmine herunterladen und entpacken
Im nächsten Schritt kann Redmine heruntergeladen und installiert werden. Ich werde Redmine unter /var/www/redmine/ installieren. Natürlich kann hier auch ein anderer Pfad verwendet werden.
Mit den folgenden Befehlen wird Redmine heruntergeladen und anschließend entpackt:
cd /var/www/ sudo wget https://www.redmine.org/releases/redmine-4.1.1.zip sudo apt install unzip sudo unzip redmine-4.1.1.zip sudo mv redmine-4.1.1 redmine
Berechtigungen für /var/www/redmine/ ändern
Damit auf das Verzeichnis /var/www/redmine/ zugegriffen werden kann, übernehme ich den Besitz mit folgendem Befehl (UBUNTUBENUTZER ist mit dem Ubuntu-Benutzer zu ersetzen. In meinem Beispiel heißt der Ubuntu-Benutzer administrator):
sudo chown -R UBUNTUBENUTZER /var/www/redmine/
Datenbankverbindung konfigurieren
Die Datenbankverbindung wird in der Datei /redmine/config/database.yml konfiguriert. Dafür muss die Datei database.yml.example zuvor entsprechend umbenannt werden.
cd /var/www/redmine/config/ cp database.yml.example database.yml nano database.yml
Dort sind schließlich die Verbindungsparameter anzugeben. Es ist entsprechend der Benutzer zu verwenden, der vorhin bei der Datenbankerstellung angelegt wurde. In der Regel ist nur der Bereich production anzupassen:

Mit den Tasten Strg + O, ENTER und Strg + X lässt sich die Datei speichern und schließen.
Ruby installieren
Redmine ist in Ruby geschrieben und braucht daher auch Ruby, damit es funktioniert. Ruby lässt sich auf verschiedenen Wegen installieren. In dieser Anleitung habe ich bereits verschiedene Installationsmöglichkeiten für Ruby vorgestellt. Ich installiere hier Ruby 2.6 über RVM (BENUTZERNAME ist natürlich entsprechend zu ersetzen):
sudo apt-add-repository -y ppa:rael-gc/rvm sudo apt update sudo apt install rvm sudo usermod -a -G rvm BENUTZERNAME sudo reboot rvm install 2.6 rvm list rubies
Der letzte Befehl gibt schließlich die aktivierte Ruby-Version aus. Sie sollte als "current && default" gesetzt sein:

Der Befehl ruby --version sollte dann auch die installierte Ruby-Version anzeigen.
Abhängigkeiten für Redmine installieren
Es sind noch weitere Abhängigkeiten zu installieren. Dies geschieht mit folgenden Befehlen:
sudo apt install build-essential libmysqlclient-dev cd /var/www/redmine/ bundle install --without development test
Das optionale Paket ImageMagick lässt sich ebenfalls einfach installieren:
sudo apt install imagemagick
Verschlüsselte Cookies
Damit Sessioninformationen in verschlüsselten Cookies gespeichert werden können, muss ein zufälliger Schlüssel erzeugt werden, den Rails später verwenden kann:
bundle exec rake generate_secret_token
Datenbankstruktur erstellen
Um die Redminedatenbank initial befüllen zu lassen, sind folgende Befehle zu verwenden:
RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production bundle exec rake redmine:load_default_data
Beim zweiten Befehl ist das entsprechende Länderkürzel anzugeben, etwa de.
Passenger installieren
Um Redmine korrekt ausführen zu können, muss das Passenger-Modul installiert werden:
sudo apt install libcurl4-openssl-dev apache2-dev libapr1-dev libaprutil1-dev gem install passenger --no-document passenger-install-apache2-module
Während des letzten Befehls erscheint eine Konfiguration, die wir später noch für die Apache-Konfiguration brauchen. Diese sollte daher einmal gesichert werden. In meinem Beispiel etwa:

LoadModule passenger_module /usr/share/rvm/gems/ruby-2.6.6/gems/passenger-6.0.7/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/share/rvm/gems/ruby-2.6.6/gems/passenger-6.0.7 PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.6.6/wrappers/ruby </IfModule>
Als nächstes erstelle ich zwei neue Konfigurationsdateien:
cd /etc/apache2/mods-available/ sudo touch passenger.load passenger.conf
Von der vorher gesicherten Konfiguration wird jetzt die erste Zeile LoadModule… in der neu angelegten Datei passenger.load eingetragen:
sudo nano passenger.load

Anschließend wird der komplette Block IfModule… in der Datei passenger.conf eingetragen:
sudo nano passenger.conf

Das Passenger-Modul ist jetzt noch zu aktivieren:
sudo a2enmod passenger
Apache konfigurieren
Der Apache erfordert noch einige weitere Konfigurationen, damit später alles reibungslos läuft. Ich erstelle einen VirtualHost für Redmine, wo ich alle relevanten Konfigurationen vornehme:
cd /etc/apache2/sites-available/ sudo nano redmine.conf
Dort nehme ich folgende Konfiguration vor:
<VirtualHost *:80> ServerName 192.168.0.67 ServerAlias redmine DocumentRoot /var/www/redmine/public <Directory /var/www/redmine/public> AllowOverride all Options -MultiViews Require all granted </Directory> </VirtualHost>

Die neue Konfiguration muss jetzt noch eingebunden werden:
sudo a2ensite redmine.conf
Damit alle neuen Konfigurationen (Passenger und VirtualHost) auch geladen werden, muss der Apache Webserver noch neu gestartet werden:
sudo service apache2 restart
Installation testen
Die Installation von Redmine ist jetzt komplett. Wenn alles richtig gemacht wurde, lässt sich Redmine jetzt im Browser aufrufen:

Redmine unter Ubuntu zu installieren wäre also erledigt. Künftige Updates von Redmine fallen unkomplizierter aus. Hier ist die offizielle Updateanleitung von Redmine ein guter Ratgeber.
HTTPS aktivieren
In einer produktiven Umgebung sollte auf jeden Fall noch HTTPS aktiviert werde. Wie das geht habe ich bereits in HTTPS mit SAN-Zertifikat für Apache unter Ubuntu konfigurieren ausführlich erklärt. Der VirtualHost für Redmine sähe in diesem Beispiel wie folgt aus:
<VirtualHost *:80> ServerName 192.168.0.67 ServerAlias redmine RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L] </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/apache2/ssl/redmine.cer SSLCertificateKeyFile /etc/apache2/ssl/redmine.key SSLProtocol -ALL +TLSv1.2 +TLSv1.3 Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;" ServerName 192.168.0.67 ServerAlias redmine DocumentRoot /var/www/redmine/public <Directory /var/www/redmine/public> AllowOverride all Options -MultiViews Require all granted </Directory> </VirtualHost>
Weiterführende Links
https://nocksoft.de/tutorials/ruby-unter-ubuntu-installieren/
https://rvm.io/deployment/cron
Quellen
https://linuxhint.com/change_timezone_ubuntu_2004/
https://github.com/rvm/ubuntu_rvm
https://www.phusionpassenger.com/docs/advanced_guides/install_and_upgrade/apache/install/oss/rubygems_rvm.html
https://github.com/rubygems/heroku-buildpack-bundler2/pull/1