Redmine 3.4.4 unter CentOS 7 mit Apache und Phusion Passenger installieren

Redmine ist ein leistungsfähiges, kostenloses und quelloffenes Projektmanagement-Tool. Es basiert auf dem Ruby-on-Rails-Framework, läuft webbasiert und kann mit verschiedenen Datenbanksystemen betrieben werden. Zu den umfangreichen Funktionen gehören Multi-Projekt-Unterstützung, rollenbasierte Zugriffskontrolle und ein integriertes Ticketsystem. Weitere Features umfassen Gantt-Diagramme, Kalender, Dateiverwaltung, projektbezogene Wikis und Foren sowie Kompatibilität mit Versionskontrollsystemen wie Git, SVN und CVS. Redmine ist mehrsprachig und unterstützt bis zu 49 Sprachen.

Diese Anleitung wurde für Redmine Version 3.4.4 verfasst, ist aber möglicherweise auch auf neuere Versionen anwendbar.

Systemvoraussetzungen

  • Ein aktiver CentOS 7 Server
  • Ein Benutzerkonto mit sudo-Rechten
  • Eine auf den Server verweisende Domain

In diesem Beispiel wird die IP-Adresse 192.168.1.1 und die Domain redmine.example.com verwendet. Ersetze diese Werte durch deine tatsächliche IP-Adresse und Domain.

Stelle sicher, dass dein CentOS 7 System vor Beginn auf dem neuesten Stand ist. Siehe dazu die Anleitung How to Update CentOS 7. Nach dem Update kannst du mit der Installation der erforderlichen Pakete fortfahren.

Apache installieren

Da Redmine auf Ruby on Rails basiert, wird Phusion Passenger benötigt, um die Anwendung über Apache bereitzustellen. Installiere zuerst Apache:

sudo yum -y install httpd httpd-devel libcurl-devel

Um Redmine zu kompilieren, sind zusätzliche Entwicklungswerkzeuge erforderlich. Installiere diese mit folgendem Befehl:


sudo yum -y install ImageMagick ImageMagick-devel git libxml2-devel libxslt-devel gcc bzip2 openssl-devel zlib-devel gdbm-devel ncurses-devel autoconf automake bison gcc-c++ libffi-devel libtool patch readline-devel sqlite-devel glibc-headers glibc-devel libyaml-devel libicu-devel libidn-devel


PostgreSQL für Redmine unter CentOS 7 einrichten

Redmine unterstützt verschiedene Datenbanksysteme wie MySQL, MSSQL und PostgreSQL. In dieser Anleitung verwenden wir PostgreSQL als Datenbank für Redmine.

PostgreSQL ist ein modernes objekt-relationales Datenbanksystem. Da das standardmäßige CentOS-Repository nur eine veraltete Version enthält, wird zunächst das offizielle PostgreSQL-Repository hinzugefügt:

sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm

Installiere nun den PostgreSQL-Server und zusätzliche Komponenten:

sudo yum -y install postgresql10-server postgresql10-contrib postgresql10

Initialisiere anschließend das Datenverzeichnis von PostgreSQL:

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

Aktiviere den automatischen Start des Dienstes und starte ihn sofort:

sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

Setze ein Passwort für den voreingestellten Benutzer postgres:

Wechsle in die PostgreSQL-Benutzerumgebung:

Lege einen neuen PostgreSQL-Benutzer für Redmine an (Name frei wählbar):

Starte die PostgreSQL-Shell:

Vergib nun ein Passwort für den zuvor erstellten Benutzer:

ALTER USER redmine WITH ENCRYPTED password 'DBPassword';

Ersetze DBPassword durch ein sicheres Kennwort. Lege anschließend die Redmine-Datenbank an und übertrage dem Benutzer die Rechte:

CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

Verlasse die psql-Konsole:

Wechsle zurück zum ursprünglichen sudo-Nutzer:

Bearbeite nun die Datei pg_hba.conf, um die Authentifizierungsmethode auf md5 umzustellen:

sudo nano /var/lib/pgsql/10/data/pg_hba.conf

Ändere die Datei wie folgt ab:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Starte den PostgreSQL-Dienst neu, damit die Änderungen aktiv werden:

sudo systemctl restart postgresql-10

Installiere zum Schluss noch zusätzliche PostgreSQL-Bibliotheken, die Redmine benötigt:


sudo yum -y install libpqxx-devel protobuf-devel


PostgreSQL für Redmine unter CentOS 7 einrichten

Redmine unterstützt verschiedene Datenbanksysteme wie MySQL, MSSQL und PostgreSQL. In dieser Anleitung verwenden wir PostgreSQL als Datenbank für Redmine.

PostgreSQL ist ein modernes objekt-relationales Datenbanksystem. Da das standardmäßige CentOS-Repository nur eine veraltete Version enthält, wird zunächst das offizielle PostgreSQL-Repository hinzugefügt:

sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm

Installiere nun den PostgreSQL-Server und zusätzliche Komponenten:

sudo yum -y install postgresql10-server postgresql10-contrib postgresql10

Initialisiere anschließend das Datenverzeichnis von PostgreSQL:

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

Aktiviere den automatischen Start des Dienstes und starte ihn sofort:

sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

Setze ein Passwort für den voreingestellten Benutzer postgres:

Wechsle in die PostgreSQL-Benutzerumgebung:

Lege einen neuen PostgreSQL-Benutzer für Redmine an (Name frei wählbar):

Starte die PostgreSQL-Shell:

Vergib nun ein Passwort für den zuvor erstellten Benutzer:

ALTER USER redmine WITH ENCRYPTED password 'DBPassword';

Ersetze DBPassword durch ein sicheres Kennwort. Lege anschließend die Redmine-Datenbank an und übertrage dem Benutzer die Rechte:

CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

Verlasse die psql-Konsole:

Wechsle zurück zum ursprünglichen sudo-Nutzer:

Bearbeite nun die Datei pg_hba.conf, um die Authentifizierungsmethode auf md5 umzustellen:

sudo nano /var/lib/pgsql/10/data/pg_hba.conf

Ändere die Datei wie folgt ab:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Starte den PostgreSQL-Dienst neu, damit die Änderungen aktiv werden:

sudo systemctl restart postgresql-10

Installiere zum Schluss noch zusätzliche PostgreSQL-Bibliotheken, die Redmine benötigt:


sudo yum -y install libpqxx-devel protobuf-devel


Ruby und Phusion Passenger für Redmine installieren

Um eine bessere Trennung und Sicherheit zu gewährleisten, sollte Redmine nicht als Root-Benutzer ausgeführt werden. Lege daher einen separaten Benutzer an und wechsle zu diesem:

sudo adduser redmine
sudo su - redmine

Zur Installation und Verwaltung von Ruby-Versionen wird RVM (Ruby Version Manager) verwendet. Importiere zunächst die notwendigen GPG-Schlüssel:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Installiere RVM und lade die RVM-Umgebung:

curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm

Zeige alle verfügbaren Ruby-Versionen an:

Installiere aus der Liste die gewünschte Ruby-Version und aktiviere sie direkt im Anschluss:

rvm install 2.4
rvm use 2.4

Prüfe die installierte Ruby-Version:

Beispielausgabe:

[redmine@centron ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

Installiere nun Bundler, den Paketmanager für Ruby-Abhängigkeiten:


Phusion Passenger installieren

Als Nächstes wird Phusion Passenger installiert, um Ruby mit dem Apache-Webserver zu verbinden:

Stelle sicher, dass der Benutzerordner von Redmine ausführbar ist, damit Passenger darauf zugreifen kann:

Installiere nun das Apache-Modul für Passenger:

passenger-install-apache2-module

Während der Installation zeigt das Skript eine Übersicht an und fordert zur Auswahl der Programmiersprache auf. Wähle Ruby aus und bestätige mit Enter.

Passenger prüft anschließend die Systemanforderungen, kompiliert das Modul und installiert es automatisch, sofern keine Fehler auftreten.

Nach erfolgreicher Installation erscheint ein Konfigurationsbeispiel, das später in Apache eingefügt werden muss:

LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so

  PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
  PassengerDefaultRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby

Drücke Enter, um diesen Schritt zu überspringen – der aktuelle Benutzer hat keine sudo-Rechte. Die Konfiguration wird später im Tutorial ergänzt.

Am Ende überprüft das Installationsskript die Umgebung. Es kann eine Warnung anzeigen, wenn die Apache-Konfigurationsdatei die Passenger-Direktiven noch nicht enthält:

Validating installation...

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
 * Checking whether Apache is installed... ✓
 * Checking whether the Passenger module is correctly configured in Apache... (!)

   You did not specify 'LoadModule passenger_module' in any of your Apache
   configuration files. Please paste the configuration snippet that this
   installer printed earlier, into one of your Apache configuration files, such
   as /etc/httpd/conf/httpd.conf.

Detected 0 error(s), 1 warning(s).
Press ENTER to continue.

Phusion Passenger wurde nun erfolgreich installiert. Du kannst jetzt mit dem Herunterladen und Einrichten von Redmine fortfahren.

Redmine unter CentOS 7 herunterladen und installieren

Beginne damit, die aktuellste Redmine-Version von der offiziellen Webseite herunterzuladen:

cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz

Entpacke das Archiv und benenne den Ordner zur besseren Übersicht um:

tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/

Kopiere die Beispielkonfigurationsdateien in ihre entsprechenden Zielpfade:

cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml

Bearbeite nun die Datenbankkonfiguration und trage die PostgreSQL-Daten ein:

Kommentiere die MySQL-Konfiguration für die Abschnitte production, development und test aus:

#production:
#  adapter: mysql2
#  database: redmine
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

#development:
#  adapter: mysql2
#  database: redmine_development
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

#test:
#  adapter: mysql2
#  database: redmine_test
#  host: localhost
#  username: root
#  password: ""
#  encoding: utf8

Aktiviere und passe die PostgreSQL-Konfiguration wie folgt an (beachte die Einrückung mit zwei Leerzeichen):

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "DBPassword"

Lege den Pfad zur PostgreSQL-Konfiguration für den Build-Vorgang fest:

bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config

Installiere die notwendigen Ruby-Bibliotheken, jedoch ohne Entwicklungs- und Testmodule:

bundle install --without development test

Am Ende der Installation wird eine Meldung wie diese erscheinen:

Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

Erzeuge einen geheimen Schlüssel für die Sitzungsverschlüsselung:

bundle exec rake generate_secret_token

Führe die Datenbankmigration für die Produktionsumgebung durch:

RAILS_ENV=production bundle exec rake db:migrate

Lade nun die Standarddaten und Sprachdateien in die Datenbank:

RAILS_ENV=production bundle exec rake redmine:load_default_data

Während der Ausführung wirst du aufgefordert, die Standard-Sprache auszuwählen. Standard ist Englisch:

[redmine@centron redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data

Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.

Erstelle anschließend die notwendigen Verzeichnisse und setze die Dateirechte korrekt:

mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets

Damit sind alle Schritte unter dem eingeschränkten Benutzer abgeschlossen. Wechsle zurück zu deinem Hauptnutzer mit sudo-Rechten:


Apache-Konfiguration für Redmine mit SSL unter CentOS 7

Aktiviere zunächst das Passenger-Modul in der Apache-Konfiguration, damit es beim Systemstart automatisch geladen wird:

echo "LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

Erstelle anschließend eine neue Virtual-Host-Konfiguration für Redmine:

sudo nano /etc/httpd/conf.d/redmine.conf

Füge folgenden Inhalt ein und ersetze redmine.example.com mit deiner Domain:

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

    DocumentRoot /home/redmine/redmine/public
    
    PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
    PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
    PassengerUser redmine

    <Directory /home/redmine/redmine/public>
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>
</VirtualHost>

Vergewissere dich, dass die Pfade korrekt sind, indem du folgenden Befehl ausführst:

sudo su redmine -c "passenger-config about ruby-command"

Starte Apache neu, damit die neue Konfiguration aktiv wird:

sudo systemctl restart httpd

Öffne die Firewall für HTTP (Port 80):

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

Redmine ist jetzt über http://redmine.example.com erreichbar. Die Standard-Zugangsdaten sind admin / admin.

HTTPS mit Let’s Encrypt SSL aktivieren

Um die Verbindung zu verschlüsseln, richte ein SSL-Zertifikat mit Let’s Encrypt und Certbot ein.

Installiere die nötigen Pakete:

sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl

Erlaube HTTPS (Port 443) in der Firewall:

sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

Hinweis: Die Domain muss bereits auf den Server zeigen.

Fordere nun das SSL-Zertifikat an:

sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com

Die Zertifikate findest du unter /etc/letsencrypt/live/redmine.example.com/.

Richte einen Cronjob ein, um die automatische Erneuerung zu ermöglichen:

Füge folgende Zeile für die tägliche Erneuerung um 5:30 Uhr hinzu:

30 5 * * * /usr/bin/certbot renew --quiet

Bearbeite nun die Apache-Konfigurationsdatei für Redmine:

sudo nano /etc/httpd/conf.d/redmine.conf

Ergänze die Datei wie folgt, um HTTP auf HTTPS umzuleiten und SSL zu aktivieren:

<VirtualHost *:80>
    Redirect permanent / https://www.example.com/
    ServerName redmine.example.com
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName redmine.example.com
    DocumentRoot "/home/redmine/redmine/public"
    <Directory "/home/redmine/redmine/public">
        Options None
        Require all granted
    </Directory>
    PassengerAppEnv production
    PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
    PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
    PassengerUser redmine
    PassengerHighPerformance on

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/redmine.example.com/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/redmine.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem

    SSLProtocol             all -SSLv2 -SSLv3
    SSLHonorCipherOrder     on
    SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

    <IfModule headers_module>
        Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
    </IfModule>
</VirtualHost>

Speichere die Datei und starte Apache neu, um die Änderungen zu übernehmen:

sudo systemctl restart httpd

Redmine ist jetzt sicher über https://redmine.example.com erreichbar.

Herzlichen Glückwunsch! Die Redmine-Installation unter CentOS 7 ist vollständig eingerichtet und mit SSL geschützt. Du kannst jetzt Projekte erstellen oder importieren und loslegen.

Fazit

Du hast die Installation und Konfiguration von Redmine 3.4.4 unter CentOS 7 erfolgreich abgeschlossen – inklusive Apache, PostgreSQL und Phusion Passenger. Die Plattform ist nun live geschaltet und durch ein SSL-Zertifikat von Let’s Encrypt geschützt, was eine verschlüsselte Kommunikation über HTTPS ermöglicht. Durch die Einhaltung bewährter Sicherheitspraktiken – wie der Nutzung eines nicht privilegierten Benutzers und der automatischen SSL-Erneuerung – ist dein System sowohl sicher als auch betriebsbereit.

Mit der einsatzbereiten Redmine-Umgebung kannst du nun Aufgaben verwalten, Probleme nachverfolgen, im Team zusammenarbeiten und Projektzeitpläne visualisieren – dank integrierter Tools wie Gantt-Diagrammen und dem Ticketsystem. Ob du bestehende Daten importierst oder dein erstes Projekt startest: Redmine bietet dir eine leistungsstarke und anpassbare Plattform für dein Projektmanagement.

Du kannst deine Redmine-Instanz jederzeit erweitern – z. B. durch Plugins, E-Mail-Benachrichtigungen oder die Anpassung von Benutzerrechten, wenn dein Team wächst. Viel Erfolg bei der Projektarbeit!

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: