Tracks : installer ce serveur To-Do List

Tracks est un serveur web qui permet de gérer des listes de tâches. C’est une application fonctionnellement très riche, qu’une entreprise peut utilement mettre à la disposition de son personnel. Héberger soi-même ce type d’applications présente des avantages certains :
- les gens ne chercheront plus à installer – ou à se faire installer – plus ou moins en cachette des programmes d’origines diverses et parfois non vérifiées, éventuellement porteurs de virus ou de backdoors, sans compter de possibles incompatibilités et dysfonctionnements,
- ils ne se tourneront plus vers des solutions hébergées à l’extérieur de l’entreprise, qui cachent souvent derrière une gratuité affichée un pillage systématique des données des utilisateurs (ciblages publicitaires, espionnage économique).

Tracks est une application web écrite en Ruby. Ce qui suit explique comment installer sa dernière version (à la date de rédaction de ce billet) sur un serveur Ubuntu 13.04 équipé de OpenSSL, Apache2, et MySQL.

Selon les applications déjà installées sur ce serveur, il est nécessaire d’installer tous les paquets suivants, ou seulement certains d’entre eux :
buid-essential
libssl-dev
libxml2-dev
libxslt-dev
libmysqld-dev
rubygems
curl
node.js
git
libcurl4-openssl-dev
apache2-prefork-dev
libapr1-dev
zlib1g-dev

Si on avait voulu utiliser Tracks avec la base de données SQLite, il aurait fallu installer le paquet libsqlite3-dev.

Ce qui suit suppose de travailler avec le compte « root ».

Installation de RVM (Ruby Version Manager) : curl –L get.rvm.io | bash –s stable –auto
Puis, comme indiqué à l’écran : adduser root rvm
Se déconnecter, puis se reconnecter avec le compte « root ».
rvm install ruby –-with-openssl-dir=/usr/share/ruby-rvm/usr
Cette opération prend un certain temps, notamment du fait d’une phase de compilation.
A la date de rédaction du présent billet, la version de Ruby installée est : 2.0.0-p247. Il va de soi qu’il faudra éventuellement ajuster cette valeur dans les commandes qui suivent.
Puis : gem install rdoc bundle

Il faut ensuite se placer dans le répertoire où on veut installer Tracks, répertoire qu’on appellera dans ce qui suit par la variable {tracks_rep}.
Une fois placé dans ce répertoire :
git clone https://github.com/TracksApp/tracks.git (respecter les majuscules et les minuscules)
cd tracks
git checkout 2.2_branche (ce qui permet d’obtenir la version la plus récente de cette branche : 2.2.2 à la date de rédaction du présent billet)
cd ..
Il faut ensuite ajuster le contenu du fichier « Gemfile ». Si on n’utilise pas SQLite, commenter alors la ligne :
gem “sqlite3”, “~>1.3”

Tracks peut fonctionner avec le serveur web Mongrel (écrit lui-même en partiellement en Ruby). Mais ce serveur n’est pas conçu pour être utilisé en production : la configuration décrite dans ce suit vise donc à installer Tracks pour une utilisation avec Apache.

bundle install –path vendor/cache
cd config
cp database.yml.tmpl

Ajuster le contenu de ce fichier database.yml, selon les propriétés de la base de données MySQL que vous utiliserez : nom, encodage, mot de passe du compte root.
Créer alors cette base données MySQL.
Puis : cp site.yml.tmpl site.yml
Ajuster le contenu de ce fichier site.yml en suivant les recommandations qu’il contient : choisir un “sel” pour le codage, une clé (« secret_token ») pour les cookies, indiquer l’adresse mail de l’administrateur informatique.
Puis : bundle exec rake db:migrate RAILS_ENV=production assets:precompile

Comme pour des applications écrites en Perl ou en Python, le serveur Apache a besoin d’un module pour appeler des programmes écrits en Ruby : ce module s’appelle « Passenger ».
Je n’ai pas réussi à faire fonctionner la paquet Ubuntu « passenger ». On trouve sur internet plusieurs messages, dans des forums, faisant état d’un possible dysfonctionnement de ce paquet. J’ignore si c’est le cas pour la version Ubuntu 13.04, ou si je me suis heurté à un ou plusieurs autres problèmes.
A la place de ce paquet, on installe donc le module Passenger par le gestionnaire de paquets de Ruby :
gem install passenger
passenger-install-apache2-module

Ceci installe, à la date de rédaction du présente billet, la version 4.0.7 de Passenger.
Cette installation se termine par des instructions très précises :

- dans le répertoire /mods-available de la configuration d’Apache2, créer un fichier (nommé par exemple « passenger.load ») contenant la ligne :
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.7/buildout/apache2/mod_passenger.so

- dans ce même répertoire, créer un fichier « passenger.conf » contenant :
<ifModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.7
PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby
</ifModule>

Activer ce module par la commande : a2enmod passenger

- dans le répertoire /sites-available de la configuration d’Apache2, créer un fichier (nommé par exemple « tracks_site ») contenant :
<VirtualHost *:80>
ServerName mon_server.mon_domaine.fr
DocumentRoot {tracks_rep}/tracks/public
<Directory {tracks_rep}/tracks/public
AllowOverride All
Options –MultiView
</Directory>
</VirtualHost>
Où « mon_serveur.mon_domaine.fr » est le nom de votre serveur Ubuntu « mon_serveur » sur votre réseau « mon_domaine.fr ».

Activer ce site par la commande : a2ensite tracks_site

Il faut enfin :
- se placer dans le répertoire d’installation de Tracks : cd {tracks_rep}
- ajuster les droits d’accès d’Apache2 : chown –R www-data:www-data tracks
- et redémarrer le serveur Ubuntu.
Tracks est alors accessible à l’URL : http://mon_serveur.mon_domaine.fr

Il se peut qu’un site Tracks cesse de fonctionner sans raison apparente :
- impossibilité de s’y connecter,
- apparition d’un message d’erreur signalant un code « 500 ».
De tels incidents peuvent apparaître juste après l’installation, ou après quelque temps, par exemple lors de la création d’un nouveau contexte.

Ces incidents sont souvent la conséquence d’un problème de droits d’accès à un répertoire sur le serveur hébergeant Tracks.
Quand on commence à saisir des données dans Tracks, cette application utilise alors un système de cache, et créé, si nécessaire, un nouveau répertoire :
{tracks_rep}/tmp/cache
Il est alors possible que le serveur Apache2 n’ait pas accès à ce nouveau répertoire, ce qui provoque de tels incidents.
Pour corriger ce problème : chown –R www-data:www-data {tracks_rep}/tmp/cache