2010/06/01

Vous reprendrez bien un peu de lourd ?

DISCLAIMER : Ceci est un post à haute teneur en troll.

Redmine est de loin le meilleur outil web multiprojet pour le développement que j'ai pu utiliser en opensource. De plus il a l'avantage de bien s'interfacer avec mercurial, git et autres (D)VCS, parfait non ? Oui mais voila redmine pose plusieurs soucis :

Si en plus on rajoute les contraintes suivantes :

Et bien déployer du ruby deviens tout de suite peu évident. Je précise que j'ai une faible connaissance du ruby et de son écosystème, ce qui n'aide pas. Or j'ai bien l'impression que c'est un sujet qu'il faut suivre de près si l'on si l'on veut pouvoir réellement l'utiliser efficacement en production.

Je ne vais tout de même pas m'arrêter là, cet outil répond au besoin, il faut donc trouver un moyen de l'installer et répondant aux contraintes.

C'est là que je tombe sur jruby, je me renseigne dessus et apprend que des applis rails de type redmine peuvent tourner sur des serveurs d'application java de type tomcat ou jetty par exemple et que les performances seraient plutôt bonnes. C'est peut être une bonne piste pour les performances, mais il reste la problématique de la reproductibilité de l'installation sur des machines sans accès à Internet.

Un peu de recherche et je tombe sur warbler ce petit outil me permettrai de pouvoir fabriquer un war (donc un package déployable sur un serveur d'application java) embarquant tout le nécessaire du monde ruby, plutot pas mal.

Je me lance donc, je prend une machine ChiantOS (oui la pire des contraintes c'est que ça doit tourner sur du chiantos :(), j'installe l'openjdk et j'installe jruby.

j'ai plus qu'à installer tout le nécessaire pour redmine :

$gem install rails -v=2.3.5
$gem install jruby-openssl warbler activerecord-jdbcpostgresql-adapter

Je fais une installation classique de redmine (je choisi la 0.9.4 là dernière au moment de ce post) je configue tout normalement, j'applique le patch pour le support de jruby 1.5.0

Attention dans le fichier config/database.yml il faut bien faire attention de précéder le nom du driver par jdbc :

adapter: postgresql devient adapter: jdbcpostgresql

Dans le répertoire redmine, taper :

$warble config

il faut maintenant éditer le fichier config/warble.rb générer :

il suffit maintenant de générer le fichier war :

$warble

il doit avoir créé un fichier redmine.war qui embarque tout le nécessaire, il ne reste plus qu'à le déployer dans votre serveur d'application java de choix.

Dans mon cas j'ai choisi jetty.

Le résultat est surprenant, sur la même machine, redmine semble être boosté aux amphétamines et la consommation mémoire toujours élevée est quand même très largement réduite, par rapport au ruby classique.

2009/11/05

Une forge sous NetBSD

Installation des packages

Installation de pkgin

D'abord on installe le package pkgin en lui même via la méthode binaire "traditionnelle" NetBSD

$ export PKG_PATH=ftp://ftp.fr.NetBSD.org/pub/pkgsrc/packages/NetBSD/amd64/5.0/All
$ pkg_add -v pkgin

Il faut ensuite modifier le fichier /usr/pkg/etc/pkgin/repositories.conf pour y ajouter la ligne

ftp://ftp.fr.NetBSD.org/pub/pkgsrc/packages/NetBSD/amd64/5.0/All

Puis mettre à jour la liste des packages binaire disponibles

$ pkgin update

Installation des autres composants

Les composants dont on aura besoin sont les suivant :

On installe donc tout ça

$ pkgin install scmgit postgresql84-server ruby18-postgres-pr ruby18-RMagick thin

Quelques minutes plus tard tout est arrivé et installé

Installation des gems

Il faudra ensuite installer les Ruby On Rails via les gem

$ gem install rail -v=2.2.2

Récupération de redmine

Exemple pour la version 0.8.6 ici :

$ ftp http://rubyforge.org/frs/download.php/66633/redmine-0.8.6.tar.gz

Maintenant que tout est près passons à la configuration

Configuration

Ajouts des utilisateurs

Nous allons faire tourner chaque processus avec des utilisateurs différents :

redmine:redmine pour le serveur web thin git:git pour le daemon git

$ groupadd _redmine
$ groupadd _git
$ useradd -m -g _redmine _redmine
$ useradd -m -g _git _git

Préparation du serveur postgresql

D'abord on copie le script d'init de postgresql dans /etc/rc.d/ pour qu'il puisse être activé au démarrage :

$ cp /usr/pkg/share/examples/rc.d/pgsql /etc/rc.d/pgsql
$ echo "pgsql=YES" >> /etc/rc.conf

Puis on initialise la base :

$ /etc/rc.d/pgsql initdb -E unicode

Enfin on démarre le serveur

$ /etc/rc.d/pgsql start

On crée ensuite la base qui va bien

$ createuser -I -E -P -S -R -D redmine

Renseigner le mot de passe

$ createdb -T template0 -O redmine -E UTF8

Postgresql est maintenant utilisable

Configuration de redmine

$ tar xvfz redmine-0.8.6.tar.gz 
$ mv redmine-0.8.6 redmine # non obligatoire
$ cd redmine

Configuration de la base de production redmine

$ cp config/database.yml.example config/database.yml

Il faut modifier ensuite ce fichier pour correspondre à :

production:
 adapter: postgresql
 database: redmine
 host: localhost
 username: redmine
 password: mon_pwd

On initialise la base redmine :

$ RAILS_ENV=production rake db:migrate

Et on insère les données par défaut :

$ RAILS_ENV=production rake redmine:load_default_data

Afin que redmine puisse fonctionner, l'utilisateur dans lequel va tourner le serveur thin doit pouvoir accéder à certains répertoires :

$ mkdir tmp public/plugin_assets
$ sudo chown -R _redmine:_redmine files log tmp public/plugin_assets
$ sudo chmod -R 755 files log tmp public/plugin_assets

Configuration du serveur thin

Notez que ici redmine est installé dans /home/_redmine

Il faut simplement créer un script rcng pour démarrer automatiquement thin : /etc/rc.d/thin

#!/bin/sh
#
# PROVIDE: thin
# REQUIRE: DAEMON

. /etc/rc.subr

name="thin"
rcvar=$name
command="/usr/pkg/bin/$name"
stop_cmd="/usr/pkg/bin/thin -c /home/_redmine/redmine -e production stop"
command_args="-c /home/_redmine/redmine -e production -d -u _redmine -g _redmine start"

load_rc_config $name
run_rc_command $1

Puis l'activer

$ chmod 755 /etc/rc.d/thin
$ echo "thin=YES" >> /etc/rc.conf
$ /etc/rc.d/thin start

Un serveur thin tourne maintenant sur le port 3000 du serveur

le daemon git

On considère ici que les dépots git se trouveront dans /home/_git/depots Tout comme pour thin il faut simplement créer un script rcng

#!/bin/sh
#
# PROVIDE: gitdaemon
# REQUIRE: DAEMON  

. /etc/rc.subr

name="git-daemon"
rcvar=$name
pidfile="/var/run/$name.pid"
command="/usr/pkg/libexec/git-core/git-daemon"
command_args="--detach --base-path=/home/_git/depot --user=_git --group=_git --pid-file=$pidfile"

load_rc_config $name
run_rc_command $1

Puis l'activer

$ chmod 755 /etc/rc.d/gitdaemon
$ echo "gitdaemon=YES" >> /etc/rc.conf
$ /etc/rc.d/gitdaemon start

Déposer les dépots git dans /home/_git/depots et ils seront automatiquement disponibles, par exemple :

Pour un depot /home/_git/depots/CBlog.git :

$ git clone git://monbeauserveur/CBlog.git 

Pour plus d'information ici UnixGarden est ton ami : et

Conclusion

La forge est maintenant opérationnelle, pour y accéder : http://monbeauserveur:3000 .

UPDATE :

rhaamo vient de rajouter le support de mercurial

Pages : 1