Installation et mise à jour de Redmine

RHEL 6 + Ruby + rvm + Passenger + Apache + Mysql

Qu’est ce que Redmine ?

Redmine est une application Web de gestion de projets. Écrite avec Ruby on Rails, l’application est multi-plateforme et multi-base de données.

Redmine est open source et sous licence GPL.

Fonctionnalités

Les principales fonctionnalités de Redmine sont :

  • Multi-projets
  • Gantt et calendrier
  • Roles d’accès flexibles
  • Suivi flexible des tâches, anomalies, fonctionnalités
  • Gestion des news, documents et fichiers
  • Flux et notifications par email
  • Wiki par projet
  • Forums par projet
  • Relevé des temps passés
  • Champs custom pour les tâches, projets et utilisateurs
  • Intégration SCM (SVN, CVS, Git, Mercurial, Bazaar et Darcs)
  • Création des anomalies via email
  • Authentification LDAP
  • Auto-enregistrement des utilisateurs
  • Multi-langage
  • Multi-base de données
  • Nombreux plugins (Scrum board, Notifications Slack, …)

Quelle configuration utilisons-nous dans ce tutorial ?

Ce tutoriel est basé sur l’utilisation d’une Red Hat Entreprise Linux 6.2, à laquelle nous adjoindrons :

Le tutoriel est cela dit facilement adaptable pour d’autres distributions Linux / environnements.

L’application sera installée dans le chemin suivant : /appli

Installation des pré-requis

Apache

Pas besoin de présenter Apache, l’installation de présente pas de spécificités :

$ yum install httpd
$ service httpd start

Ruby / rvm

Pour éviter les problèmes de dépendances liées au différentes versions de Ruby, on décide d’installer un utilitaire qui s’appelle rvm, permettant de faire coexister plusieurs installations de Ruby sur une même machine, et permettant de réaliser la séparation de l’installation des gems.

$ \curl -sSL https://get.rvm.io | bash -s stable --rubyPassenger
$ rvm install 2.3.3
$ rvm use 2.3.3

Passenger

Passenger est un serveur d’application qui permet de faire tourner des applications Ruby avec Apache, via le module mod_passenger. On peut assez facilement l’installer grâce à ruby gem :

$ gem install passenger
$ passenger-install-apache2-module

Les instructions à l’écran vous guiderons dans les différentes étapes de l’installation ; vous pouvez vous référer à ce guide pour de plus amples informations.

Passenger peut également être installé directement via yum, comme expliqué dans cette ressource très complète.

A la fin de l’installation du module pour Apache, les instructions de configuration à ajouter à la configuration d’Apache (dans le fichier httpd.conf ou dans un fichier de configuration d’un virtual host) sont affichés.

Pour information — car nous y reviendrons en fin de tutoriel après l’installation ou la mise à jour - voici la configuration complète d’un virtual host Apache hébergeant une instance de Redmine :

<VirtualHost redmine.domaine.fr>
ServerName redmine.domaine.fr
DocumentRoot /appli/redmineXX/public
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.3.3/wrappers/ruby
PassengerDefaultUser apache
</IfModule>
  RailsEnv production
RailsBaseURI /redmine
  <Directory /appli/redmineXX/public>
Options Indexes ExecCGI FollowSymLinks
AllowOverride All
Options -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Mysql

Pas besoin de présenter Mysql, l’installation de présente pas de spécificités :

$ yum install mysql
$ service mysql start

Installation de Redmine

Une fois ces pré-requis installés, on peut passer à l’installation de Redmine à proprement parler. Vous pouvez vous référer au guide officiel d’installation pour de plus amples informations.

  1. Créer un nouveau dossier /appli/redmineXX où XX correspond à la version téléchargée.
$ mkdir /appli/redmineXX

2. Télécharger et dézipper le package d’installation

$ cd /appli/redmineXX
$ wget http://www.redmine.org/releases/redmine-XX.zip
$ unzip redmine-XX.zip; mv redmine-XX/* .
$ rm -rf redmine-XX.zip redmine-XX

3. Créer la base de données et son utilisateur

$ mysql -u root -p -e "CREATE DATABASE redmineXX CHARACTER SET utf8;"
$ mysql -u root -p -e "CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';"
$ mysql -u root -p -e "GRANT ALL PRIVILEGES ON redmineXX.* TO 'redmine'@'localhost';"

4. Copier le fichier config/databases.yml.example vers config/databases.yml et l’éditer en fonction des paramètres d’accès à la base précédemment crée.

production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: my_password

5. Installer bundler et installer les dépendances

$ gem install bundler
$ bundle install --without development test

6. Générer le token d’encodage

$ bundle exec rake generate_secret_token

7. Créer la structure de la base de données

$ RAILS_ENV=production bundle exec rake db:migrate

8. Insérer la configuration de base

$ RAILS_ENV=production bundle exec rake redmine:load_default_data

9. Configuration Apache

Il vous faut désormais, comme indiqué au début de ce tutorial, éditer la configuration de votre serveur web (httpd.conf ou fichier de configuration d’un virtual host) pour charger mod_passenger, indiquer la version de Ruby à utiliser, et donner les variables d’environnement de Rails.

Exemple de configuration d’un virtual host :

<VirtualHost redmine.domaine.fr>
ServerName redmine.domaine.fr
DocumentRoot /appli/redmineXX/public
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.3.3/wrappers/ruby
PassengerDefaultUser apache
</IfModule>
RailsEnv production
RailsBaseURI /redmine
<Directory /appli/redmineXX/public>
Options Indexes ExecCGI FollowSymLinks
AllowOverride All
Options -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

10. Droits du système de fichiers

Le compte utilisateur (système) qui fait tourner l’application doit avoir les permissions d’écriture sur les répertoire suivants à l’intérieur du dossier /appli/redmineXX :

files
log

tmp
tmp/pdf
public/plugin_assets

Par exemple, comme nous utilisons l’utilisateur apache, nous pouvons faire les réglages suivants :

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

11. Relancez Apache.

$ /etc/init.d/httpd restart

Il ne vous reste plus qu’à vous rendre à l’adresse de votre serveur pour vous connecter à l’application avec les login / mdp par défaut : admin/ admin

Mise à jour de Redmine

La démarche décrite ci-dessous permet de facilement revenir à la version précédente, voir de faire coexister deux versions pour faire des tests.

Dans les exemples suivantes, X-1 représente la version courante installée, et XX la nouvelle version à installer.

  1. Backuper le dossier RedmineX-1 et la base de données correspondante
$ mysqldump -u root -p redmineX-1 > /home/sauvegardes/redmine/redmineX-1/redminedb.sql

2. Dupliquer la BDD et la nommer en la suffixant du numéro de la nouvelle version ; et enfin donner les privilèges sur cette nouvelle base à l’utilisateur redmine

$ mysql -u root -p -e "CREATE DATABASE redmineXX;"
$ mysql -u root -p redmineXX < /home/sauvegardes/redmine/redmineX-1/redminedb.sql
$ mysql -u root -p -e "GRANT ALL PRIVILEGES ON redmineXX.* to 'redmine'@'localhost'";

3. Créer un nouveau dossier /appli/redmineXX

$ mkdir /appli/redmineXX

4. Télécharger et dé-zipper le nouveau package

$ cd /appli/redmineXX
$ wget http://www.redmine.org/releases/redmine-XX.zip
$ unzip redmine-XX.zip; mv redmine-XX/* .
$ rm -rf redmine-XX.zip redmine-XX

5. Copier config/databases.yml et config/configuration.yml depuis votre ancienne installation dans le répertoire de la nouvelle

$ cp ../redmineX-1/config/databases.yml config/databases.yml
$ cp ../redmineX-1/config/configuration.yml config/configuration.yml

6. Modifier le nom de la base de données de redmineX-1 à redmineXX dans databases.yml

$ vim config/databases.yml

7. Copier files dans appli/redmineXX/files

$ cp -r ../redmineX-1/files/* files/

8. Installer les gems requises et faire l’update. Résoudre les éventuels problèmes de dépendances de gems.

$ bundle install --without development test
$ bundle exec rake generate_secret_token
$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production
$ bundle exec rake tmp:cache:clear tmp:sessions:clear RAILS_ENV=production

9. Si une nouvelle version de Ruby a du être installée pour construire le bundle sans erreur, il faut installer et compiler passenger ; à la fin de l’installation, copier les lignes à remplacer dans /etc/httpd/conf/httpd.conf.

$ gem install passenger
$ passenger-install-apache2-module

10. Dans tous les cas, vérifier la configuration dans /etc/httpd/conf/httpd.conf

Exemple de configuration :

<VirtualHost redmine.domaine.fr>
ServerName redmine.domaine.fr
DocumentRoot /appli/redmineXX/public
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.3.3/gems/passenger-5.1.1
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.3.3/wrappers/ruby
PassengerDefaultUser apache
</IfModule>
RailsEnv production
RailsBaseURI /redmine
<Directory /appli/redmineXX/public>
Options Indexes ExecCGI FollowSymLinks
AllowOverride All
Options -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

11. Relancez Apache.

$ /etc/init.d/httpd restart

Quand vos tests sont terminés, vous pouvez supprimer le dossier et la base de données de la version précédente.