OpenProject unter nginx und Mysql installieren

OpenProject unter nginx und mit MySQL installierenOpenProject ist ein in Ruby und AngularJS geschriebenes Projektmanagementsystem der OpenProject Foundation und wird von einer freien Entwickler-community fortlaufend weiterentwickelt.

Neben Meilensteinplanung und Projekt Management bietet es unter anderem Issue Management, Bug-Tracking sowie Zeitplan-Reporte und liegt aktuell in der Version 4.1 vor.

Wir zeigen Ihnen in dem folgenden Tutorial, wie Ihr OpenProject auf einem Ubuntu Server System unter dem Webserver nginx und mit der Datenbank MySQL zum Laufen kriegt. Unsere Wahl fiel bewußt auf nginx und MySQL, weil diese Serverdienste bereits im ionas-Server Small Business von anderen Serverdiensten genutzt wird. Der gesunde Menschenverstand verbietet es neben nginx noch zusätzlich Apache oder eine zweite Datenbank auf dem Server zu betreiben.

1. Installation von OpenProject

Die nachfolgende Installationsanleitung wurde auf einem Ubuntu Server 14.04.1 LTS Image durchgeführt. Zum Einsatz kommen MySQL als Datenbank sowie Nginx als Webserver.

Um die unterschiedlichen Schritte genauer abgrenzen zu können wird jeweils der ausführende Benutzer mit angegeben. So kann einfacher zwischen einem voll privilegierten Benutzer [root] oder einem eingeschränkten Benutzer unterschieden werden.

Weiterhin nutzen wir zwei verschiedene Schreibweisen von “OpenProject”:

  • “OpenProject” bezeichnet das allg. Projekt
  • “openproject” bezeichnet den Linux Systembenutzer, welchen wir im Rahmen der Installation anlegen werden

Zunächst sind Vorbereitungen zu treffen, um Ruby – und somit auch OpenProject – kompilieren zu können.

1.1 Aktualisierung des Systems und installation benötigter Libraries

[root@machine] apt-get update
[root@machine] apt-get install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev
libsqlite3-dev sqlite3 libmysqlclient-dev libpq-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev
python-software-properties memcached libgdbm-dev libncurses5-dev automake libtool bison libffi-dev

1.2 Anlegen eines Benutzers für OpenProject

Der Systembenutzer kann frei gewählt werden. Der Übersicht wegen empfiehlt sich allerdings “openproject”.

[root@machine] groupadd openproject
[root@machine] useradd --create-home --gid openproject openproject
[root@machine] passwd openproject

Nun muss für den Benutzer openproject ein Passwort eingegeben werden. Dies kann ggfs. mit der option “–disable-password” deaktiviert werden. Vorteil: Man muss sich kein weiteres Passwort merken und kann mit “sudo -i -u openproject” auf diesen Benutzer wechseln.

Als nächstes müssen MySQL-Server und MySQL-Client installiert werden. Wer bereits einen MySQL-Server betreibt, kann diesen Schritt überspringen.

1.3 Installation von MySQL

[root@machine] apt-get install mysql-server mysql-client

Während der Installation wird nach einem root-Passwort gefragt. Dieses bitte anlegen und notieren! Es wird in den nächsten Schritten benötigt!

1.4 Anlegen der OpenProject-Datenbank

Als nächstes legen wir eine MySQL Datenbank an.

[root@machine] mysql -u root -p

Nun wird das mysql-promt “mysql>” angezeigt. Wichtig ist, hierbei zu beachten, dass ALLE mysql-Befehle mit einem Semikolon beendet werden. Selbstverständlich muss der Datebankbenutzer nicht openproject heißen. diese kann genau wie der Systembenutzer frei gewählt werden.

mysql> CREATE DATABASE openproject CHARACTER SET utf8;
mysql> CREATE USER 'openproject'@'locahost' IDENTIFIED BY 'xxxxxxx';
mysql> GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@'localhost';
mysql> \q

Nun hat der mysql-Benutzer “openproject” mit dem Passwort “xxxxxxx” Zugriff auf alle OpenProject-Datenbanken.

1.5 Installation von Node.js

Um Node.js via nodeenv zu installieren wird python und python-pip benötigt. Sollten diese Komponenten bereits installiert sein, muss lediglich nodeenv installiert werden.

[root@machine] apt-get install python python-pip
[root@machine] pip install nodeenv

Anschließend muss zum Benutzer für OpenProject gewechselt werden, um dort die Installation weiterzuführen.

[root@machine] sudo -i -u openproject

Zunächst wechseln wir in das Home-Verzeichnis des Benutzers

[openproject@machine] cd ~

Nun muss zunächst der GPG key heruntergeladen werden, damit beim anschließenden Download von RVM (Ruby Version Manager) keine Fehlermeldung auftritt.

1.6 Herunterladen von RVM

[openproject@machine] gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
[openproject@machine] \curl -sSL https://get.rvm.io | bash -s stable

In den folgenden Schritten wird nun RVM installiert sowie die Default-Version (hier 2.1.4) ausgewählt, mit welcher OpenProject installiert wird. Außerdem wird bundler installiert, welches sich sodann um die Verwaltung der Ruby Gems kümmert.

1.7 Installation/Einrichtung RVM

[openproject@machine] source $HOME/.rvm/scripts/rvm
[openproject@machine] rvm autolibs disable
[openproject@machine] rvm install 2.1.4
[openproject@machine] rvm use --default 2.1.4
[openproject@machine] gem install bundler

Als nächstes kommt nodeenv zum Einsatz um eine Node.js-Umgebung für OpenProject zu schaffen.

1.8 Erzeugen einer virtuellen Node.js Laufzeitumgebung

Dieser Schritt ist nur zur Installation und bei Updates bzw. Installation von Modulen notwendig. Die Node.js Laufzeitumgebung hat für den laufenden Betrieb keine Bedeutung.

[openproject@machine] cd ~
[openproject@machine] nodeenv nodeenv
[openproject@machine] source ./nodeenv/bin/activate

Mit der Installation von bower – einem “Paketmanager für’s Web” sind nun alle Komponenten komplett, um OpenProject zu installieren.

1.9. Installation von bower

[openproject@machine] npm -g install bower

1.10 Download und Installation von OpenProject

[openproject@machine] cd ~
[openproject@machine] git clone https://github.com/opf/openproject.git
[openproject@machine] cd openproject
[openproject@machine] git checkout stable
[openproject@machine] bundle install
[openproject@machine] npm install
[openproject@machine] bower install

Wenn diese Befehle alle ohne Fehlermeldung durchlaufen, dann ist OpenProject fertig installiert. Als nächstes folgt die Konfiguration.

2. Konfiguration der Projectmanagementsuite

Als Erstes muss die Datei config/database.yml angepasst werden. Hier müssen nun die Zugangsdaten für die mysql-Datenbank eingetragen werden:

2.1 Yaml-Configurationsdateien ändern.

[openproject@machine] nano config/database.yml
production:
adapter: mysql2
database: openproject
host: localhost
username: openproject
password: xxxxxxx
encoding: utf8

Nun wird die Datei config/configuration.yml.example kopiert und als configuration.yml abgelegt. Auch in dieser Datei müssen Veränderungen vorgenommen werden.

[openproject@machine] cp config/configuration.yml.example configuration.yml
[openproject@machine] nano config/configuration.yml

Ein Beispiel kann so aussehen:

production:
email_delivery_method: :smtp
smtp_address: smtp.gmail.com
smtp_port: 587
smtp_domain: smtp.gmail.com
smtp_user_name: ***@gmail.com
smtp_password: ****
smtp_enable_starttls_auto: true
smtp_authentication: plain

Außerdem muss am Ende der Datei noch folgender Zusatz hinzugefügt werden:

rails_cache_store: :memcache

2.2 Wichtiger Hinweis: Webverzeichnis in nginx definieren

Wenn OpenProject von Nginx in einem Unterverzeichnis erreichbar sein soll (z.B: example.com/openproject), dann muss dies unbedingt VOR dem Kompilieren in der Datei configuration.yml eingetragen werden. In diesem Beispiel wird OpenProject im Unterverzeichnis “/openproject” ausgeliefert:

rails_relative_url_root: "/openproject"

Jetzt kommt der wichtigste Schritt: Um die Datenbanken von OpenProject zu generieren und alle Verknüpfungen richtig zu erstellen wird OpenProject nun kompiliert.

2.3 OpenProject kompilieren

[openproject@machine] cd ~/openproject
[openproject@machine] bundle exec rake db:create:all
[openproject@machine] bundle exec rake generate_secret_token
[openproject@machine] RAILS_ENV="production" bundle exec rake db:migrate
[openproject@machine] RAILS_ENV="production" bundle exec rake db:seed
[openproject@machine] RAILS_ENV="production" bundle exec rake assets:precompile

Um nun OpenProject ausliefern zu können müssen wir noch den Phusion Passenger installieren. Phusion dient in diesem Fall als App-Server, der die HTTP-Daten an Nginx übergibt. Um Passenger mit Nginx zu starten, müssen einige Pakete nachinstalliert und Konfigurationen geändert werden.

3. Installation Phusion Passenger

Zunächst verlassen wir den Benutzer openproject.

[openproject@machine] exit

Anschließend als root den Key für Passenger herunterladen, um mit der Installation fortfahren zu können.

[root@machine] apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

Dann werden die Zusatzpakete installieren.

[root@machine] apt-get install apt-transport-https ca-certificates

Dann eine Datei anlegen, um die Repositories von Passenger aufzunehmen.

[root@machine] nano /etc/apt/sources.list.d/passenger.list

Die Datei sollte für Ubuntu 14.04 folgenden Inhalt haben:

>deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

Anschließend die Paketquellen aktualisieren

[root@machine] apt-get update

4. Webserver nginx installieren und einrichten

Nun werden nginx, nginx-extras und passenger installiert. Sollte nginx bereits installiert sein, kann das Paket nginx natürlich weggelassen werden.

4.1 Nginx installieren

[root@machine] apt-get install nginx nginx-extras passenger
[root@machine] nano /etc/nginx/nginx.conf

In der nginx.conf müssen nun die beiden Zeilen “passenger_root” und “passenger_ruby” entkommentiert werden. Sollte nginx bereits installiert gewesen sein, kann es sein, dass diese beiden Zeilen nicht in der Datei enthalten sind.

In diesem Fall müssen beide Zeilen von Hand am Ende des HTTP-Blocks eingefügt werden. Die beiden Zeilen geben die Pfade zu Phusion Passengers “locations.ini” und Ruby an und können wie folgt aussehen:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/ruby;

Die Richtigkeit der Angabe in passenger_root können hier überprüft werden, indem man folgenden Befehl ausführt:

[root@machine] /usr/bin/passenger-config --root

Die Ausgabe dieses Befehls muss mit dem Eintrag in der nginx.conf übereinstimmen.

Passenger wird nun mit nginx gestartet.

4.2 nginx einrichten

Um OpenProject jetzt über nginx erreichen zu können muss nginx entsprechend konfiguriert werden.

[root@machine] nano /etc/nginx/sites-available/default

Eine Beispielkonfiguration kann wie folgt aussehen:

server {
listen 80;
server_name example.com;
root /var/www;
index index.html index.htm index.php;
location ~ ^/openproject(/.*|$) {
alias /home/openproject/openproject/public$1;
access_log /var/log/nginx/openproject/openproject.access.log;
error_log /var/log/nginx/openproject/openproject.error.log;
passenger_base_uri /openproject;
passenger_app_root /home/openproject/openproject;
passenger_document_root /home/openproject/openproject/public;
passenger_enabled on;
passenger_user openproject;
}
passenger_ruby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby;
passenger_enabled on;
passenger_user openproject;
}

Jetzt noch nginx neu starten und OpenProject ist verfügbar.

[root@machine] service nginx restart

erer Meinung nach ist OpenProject ein gigantisch gutes Stück OpenSource Software und definitiv eine Bereicherung für jedes Projektteam. Den Vergleich mit MS Project oder anderen Planungstools braucht es auf jeden Fall nicht zu scheuen. Aus diesen Gründen war von Anfang an Klar, dass wir diese Projektplanungssuite in unseren ionas-Server Small Business integrieren.

ls Sie Fragen oder Probleme bei der Installation habt, erreichen Sie uns unter +49 (0)6131 3270777. ionas – Ihr Online Assistent

geschrieben von

Christoph Dyllick-Brenzinger

Christoph ist Gründer und Chefentwickler von datamate. Er ist ein absoluter Linux-Fan und hat schon früh seine Leidenschaft für Technik und Programmierung entdeckt. Seine langjährige Erfahrung als Unternehmensberater spürt man regelmäßig, wenn er nach optimalen Lösungen für die Kunden sucht. Wenn er nicht gerade den Tennisplatz unsicher macht oder bei Overwatch sein Liga-Ranking verbessert, verbringt Christoph seine Freizeit mit seiner Frau und seinen drei Kindern.