<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vectoris Blog &#187; RoR</title>
	<atom:link href="http://blog.vectoris.fr/tag/ror/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.vectoris.fr</link>
	<description></description>
	<lastBuildDate>Fri, 10 Jun 2011 23:53:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Installation Redmine sous Debian Lenny 5.0</title>
		<link>http://blog.vectoris.fr/2009/07/23/installation-redmine-sous-debian-lenny-50/</link>
		<comments>http://blog.vectoris.fr/2009/07/23/installation-redmine-sous-debian-lenny-50/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 12:10:12 +0000</pubDate>
		<dc:creator>trambo</dc:creator>
				<category><![CDATA[Gestion de projet]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.vectoris.fr/?p=17</guid>
		<description><![CDATA[J&#8217;introduis Redmine en le comparant avec Trac, que j&#8217;ai utilisé depuis presque un an sans véritable raison particulière alors qu&#8217;il y avait largement plus adapté au type d&#8217;activité de Vectoris.
Ses points forts par rapport à Trac :

Redmine est multi-projet.  C&#8217;est donc déjà un choix plus subtil que de copier-coller Trac à chaque nouveau projet.
Redmine [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;introduis Redmine en le comparant avec Trac, que j&#8217;ai utilisé depuis presque un an sans véritable raison particulière alors qu&#8217;il y avait largement plus adapté au type d&#8217;activité de Vectoris.</p>
<p>Ses points forts par rapport à Trac :</p>
<ul>
<li>Redmine est multi-projet.  C&#8217;est donc déjà un choix plus subtil que de copier-coller Trac à chaque nouveau projet.</li>
<li>Redmine gère ses utilisateurs et ses droits. Beaucoup mieux qu&#8217;un .htaccess</li>
<li>Redmine gère nativement les plus importants systèmes de gestion de versions. GIT, CVS, Subversion et Mercurial (qui me porte beaucoup d&#8217;intérêt). Vous me direz, sur Trac, il suffit d&#8217;intaller un plugin.</li>
<li>Redmine est un véritable outil de gestion de projet avec son planning, son Gantt. Tout est bien pensé.</li>
<li>Redmine est plus souple que Trac</li>
<li>Redmine gère aussi les documents, les fichiers, et a même un forum. Tout ça pour chaque projet.</li>
</ul>
<p>Pour gérer un projet, sans planning, ayant une poignée d&#8217;intervenants, le choix de Trac peut suffire. Un choix qui par contre nous met très vite face à ses limites, quand on est une SSII. J&#8217;ai donc décidé d&#8217;abandonner Trac définitivement pour Redmine.</p>
<p>Pour plus d&#8217;infos sur Redmine, le <a title="Redmine" href="http://www.redmine.org/" target="_blank">site officiel</a>.</p>
<p>Passons maintenant à l&#8217;installation. Pour la suite, je suppose que vous avez déjà un LAMP qui tournes sous Debian-Like. Sachez toutefois que la procédure qui va suivre a été faite et réussie sur la Lenny 5.0. Supposons aussi que nous allons installer Redmine en créant un utilisateur du même nom, de mot de passe &#8220;rdmn&#8221;, dont le répertoire home est /home/redmine et que vous voulez servir redmine sur le nom de domaine redmine.maboite.com (les noms de domaines redmine.maboite.com et maboite.com redirige déjà sur l&#8217;IP de la machine où vous allez effectuer l&#8217;installation).</p>
<p>Commençons par créer cet utilisateur :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">useradd -d /home/redmine -g <span style="color: #cc66cc;">33</span> -m -s /bin/bash redmine</pre></div></div>

<p>Notez qu&#8217;ici, on forces ce nouvel utilisateur à appartenir au GID 33, Apache. Il va vous demander le mot de passe, tapez &#8220;rdmn&#8221;. Une fois fait, faites un &#8220;ls -l&#8221; pour vérifiez que c&#8217;est bon, si c&#8217;est le cas, on passes à la suite.</p>
<p>Créez ensuite la base de donnée &#8220;redmine&#8221; sur MySQL, l&#8217;utilisateur du même nom et de mot de passe &#8220;rdmn&#8221; en lui donnant les doit sur la nouvelle base.</p>
<ol>
<li><strong>Installez RoR (Ruby on Rails)</strong></li>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">aptitude install ruby rdoc irb libyaml-ruby ruby1.8-dev libzlib-ruby ri libopenssl-ruby1.8</pre></div></div>

<p>Ca prend un petit moment. Une fois terminée, nous allons avoir besoin d&#8217;une version spécifique de RubyGems, qui est le gestionnaire de paquets de Ruby. Nous n&#8217;allons pas utiliser Aptitude, la version que vous aurez par ce moyen n&#8217;est pas la bonne.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar xvzf rubygems-1.3.1.tgz
<span style="color: #b1b100; font-weight: bold;">cd</span> rubygems-1.3.1
ruby setup.rb</pre></div></div>

<p>Créez ensuite un lien symbolique, toujours utile:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">ln -s /usr/bin/gem1.8 /usr/bin/gem</pre></div></div>

<p>Une fois que tout est bon pour rubyGems, continuons en l&#8217;utilisant:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">gem install rails -v 2.1.2</pre></div></div>

<p>Il nous faut cette version là. Ensuite, nous allons faire en sorte que Ruby puisses utiliser MySQL :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">aptitude install libmysqlclient15-dev
gem install mysql</pre></div></div>

<p>Voilà, c&#8217;est presque prêt. Justes quelques derniers petits trucs:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">aptitude install imagemagick libmagick9-dev librmagick-ruby1.8
gem install rmagick</pre></div></div>

<p>rmagick va servir à Redmine pour les générations d&#8217;images, de graphes, etc &#8230;</p>
<li> <strong>Installez Redmine</strong></li>
<p>Vous étiez en root.Changez d&#8217;utilisateur, maintenant pour ne pas tout embrouiller dans vos droits. Et ensuite, allez dans votre répertoire home.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">su redmine
<span style="color: #b1b100; font-weight: bold;">cd</span> /home/redmine</pre></div></div>

<p>C&#8217;est là que vous allez télécharger Redmine :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">wget http://rubyforge.org/frs/download.php/<span style="color: #cc66cc;">52944</span>/redmine-0.8.2.tar.gz
tar xvzf redmine-0.8.2.tar.gz
mv redmine-0.8.2 redmine</pre></div></div>

<p>On va maintenant s&#8217;occuper de la base de donnée que vous avez créé plus haut.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b1b100; font-weight: bold;">cd</span> redmine/config
cp database.yml.example database.yml
vi database.yml</pre></div></div>

<p>Renseignez dedans les champs qui concernes PRODUCTION. C&#8217;est assez facile à comprendre. Une fois bon, initialisons la base et remplissons là par des données par défaut :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">rake db:migrate RAILS_ENV=&quot;production&quot;
rake redmine:load_default_data RAILS_ENV=&quot;production&quot;</pre></div></div>

<p>Faites un petit CHOWN :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">chown -R redmine:www-data /home/redmine</pre></div></div>

<p>Et c&#8217;est parti pour le premier lancement :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">ruby script/server -e production</pre></div></div>

<p>Sachez que Redmine est livré avec Webrick qui est un petit serveur. Une fois lancé, votre site est accessible http://maboite.com:3000.<br />
C&#8217;est cool, vous pouvez déjà vous amuser, mais ce n&#8217;est pas fini parce-que Webrick ne peut pas être utilisé en production et que de toute façon, le port 3000 vous gène.</p>
<li><strong>Installer Mongrel</strong></li>
<p>Nous allons installer un vrai serveur pour Rails, Mongrel:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">gem install gem_plugin mongrel mongrel_cluster</pre></div></div>

<p>Et ensuite créer le fichier de configuration :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">mongrel_rails cluster::configure -e production -p <span style="color: #cc66cc;">8000</span> -N <span style="color: #cc66cc;">3</span> -c /home/redmine/redmine -C /home/redmine/redmine/config/mongrel_cluster.yml -a 127.0.0.1 --user redmine --group www-data</pre></div></div>

<p>Indiquons, ensuite à Mongrel le chemin de ce dernier fichier :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b1b100; font-weight: bold;">mkdir</span> /etc/mongrel_cluster
ln -s /home/redmine/redmine/config/mongrel_cluster.yml /etc/mongrel_cluster/monsite.yml</pre></div></div>

<p>Et on installe le script qui va gérer Mongrel :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">cp /usr/lib/ruby/gems/<span style="color: #cc66cc;">1.8</span>/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/</pre></div></div>

<p>Et on va le modifier :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">vi /usr/lib/ruby/gems/<span style="color: #cc66cc;">1.8</span>/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster</pre></div></div>

<p>De façon à avoir ce genre de chose :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">#
# Copyright <span style="color: #66cc66;">&#40;</span>c<span style="color: #66cc66;">&#41;</span> 2007 Bradley Taylor, bradley<span style="color: #33cc33;">@</span>railsmachine.com
#
# mongrel_cluster Startup script <span style="color: #00b100; font-weight: bold;">for</span> Mongrel clusters.
#
# chkconfig: - 85 15
# description: mongrel_cluster manages multiple Mongrel processes <span style="color: #00b100; font-weight: bold;">for</span> use \
# behind a load balancer.
#
CONF_DIR=/etc/mongrel_cluster
PID_DIR=/home/redmine/redmine/tmp/pids
USER=redmine
RETVAL=0
# Gracefully <span style="color: #00b100; font-weight: bold;">exit</span> <span style="color: #00b100; font-weight: bold;">if</span> the controller is missing.
which mongrel_cluster_ctl &gt;/dev/null || <span style="color: #00b100; font-weight: bold;">exit</span> 0
# Go no further <span style="color: #00b100; font-weight: bold;">if</span> config directory is missing.
<span style="color: #66cc66;">&#91;</span> -d &quot;$CONF_DIR&quot; <span style="color: #66cc66;">&#93;</span> || <span style="color: #00b100; font-weight: bold;">exit</span> 0
case &quot;$1&quot; <span style="color: #00b100; font-weight: bold;">in</span>
start<span style="color: #66cc66;">&#41;</span>
# Create pid directory
<span style="color: #b1b100; font-weight: bold;">mkdir</span> -p $PID_DIR
chown $USER:www-data $PID_DIR
mongrel_cluster_ctl start -c $CONF_DIR --clean
RETVAL=$?
;;
stop<span style="color: #66cc66;">&#41;</span>
mongrel_cluster_ctl stop -c $CONF_DIR --clean
RETVAL=$?
;;
restart<span style="color: #66cc66;">&#41;</span>
mongrel_cluster_ctl restart -c $CONF_DIR --clean
RETVAL=$?
;;
status<span style="color: #66cc66;">&#41;</span>
mongrel_cluster_ctl status -c $CONF_DIR
RETVAL=$?
;;
*<span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100; font-weight: bold;">echo</span> &quot;Usage: mongrel_cluster <span style="color: #66cc66;">&#123;</span>start|stop|restart|status<span style="color: #66cc66;">&#125;</span>&quot;
<span style="color: #00b100; font-weight: bold;">exit</span> 1
;;
esac
<span style="color: #00b100; font-weight: bold;">exit</span> $RETVAL</pre></div></div>

<p>vous remarquerez que nous avons surtout ajouté &#8211;clean, ceci indique à Mongrel qu&#8217;il faut supprimer correctement le fichier pid, sinon lors d&#8217;un redémarrage du serveur il y aura une erreur du type &#8220;pid file locked&#8221;.<br />
Il faut maintenant le rendre éxecutable et on le met dans le système:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">chmod +x /etc/init.d/mongrel_cluster
update-rc.d -f mongrel_cluster defaults</pre></div></div>

<p>Lancez maintenant votre nouveau serveur (vous pourrez aussi le contrôler avec stop, restart) :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">/etc/init.d/mongrel_cluster start</pre></div></div>

<li><strong>Mettre en place le Proxy Apache</strong></li>
<p>Nous sommes à 2 doigts de finir. Activons certains modules d&#8217;apache si ce n&#8217;est pas encore fait et allons voir pour ce qui est du proxy</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">a2enmod rewrite
a2enmod proxy_http
a2enmod proxy_balancer
vi /etc/apache2/mods-available/proxy.conf</pre></div></div>

<p>Modifiez le de façon a avoir ceci :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
&nbsp;
AddDefaultCharset off
Order allow,deny
Allow from all
#Allow from .example.com
# Define the character <span style="color: #b1b100; font-weight: bold;">set</span> <span style="color: #00b100; font-weight: bold;">for</span> proxied FTP directory listings
ProxyFtpDirCharset UTF-8
&nbsp;
# Enable/disable the handling of HTTP/1.1 &quot;Via:&quot; headers.
# <span style="color: #66cc66;">&#40;</span>&quot;Full&quot; adds the server version; &quot;Block&quot; removes all outgoing Via: headers<span style="color: #66cc66;">&#41;</span>
# <span style="color: #b1b100; font-weight: bold;">Set</span> to one of: Off | On | Full | Block
ProxyVia On</pre></div></div>

<p>Un doigt maintenant, il ne reste plus que le virtualHost :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">vi /etc/apache2/sites-available/redmine</pre></div></div>

<p>On va y mettre :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">ServerAdmin admin<span style="color: #33cc33;">@</span>maboite.com
ServerName redmine.maboite.com
DocumentRoot /home/redmine/redmine/public/
&nbsp;
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
&nbsp;
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002
&nbsp;
RewriteCond <span style="color: #33cc33;">%</span><span style="color: #448888;"><span style="color: #66cc66;">&#123;</span>DOCUMENT_ROOT<span style="color: #66cc66;">&#125;</span>/</span><span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REQUEST_FILENAME<span style="color: #66cc66;">&#125;</span> -f
RewriteRule <span style="color: #66cc66;">&#40;</span>.*<span style="color: #66cc66;">&#41;</span> $<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#91;</span>L<span style="color: #66cc66;">&#93;</span>
&nbsp;
ProxyPass / Balancer://mongrel_cluster/
ProxyPassReverse / balancer://mongrel_cluster/
&nbsp;
AddOutputFilter DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/<span style="color: #cc66cc;">4</span> gzip-only-text/html
BrowserMatch ^Mozilla/<span style="color: #cc66cc;">4.0</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">678</span><span style="color: #66cc66;">&#93;</span> no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
&nbsp;
ErrorLog /var/log/apache2/redmine.maboite.com.error.log
LogLevel warn
CustomLog /var/log/apache2/redmine.maboite.com.access.log combined
ServerSignature Off</pre></div></div>

<p>Là, nous indiquons à Apache de balancer les requettes de redmine.maboite.com:80 sur localhost:8000, soit sur mongrel_cluster. Par contre, Mongrel étant moins rapide que Apache, la directive DEFLATE dit que pour certains fichiers, il faut utiliser Apache plutôt que Mongrel.<br />
Deux dernieres commandes pour finir en activant notre nouveau site et en redémarrant Apache :</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">a2ensite redmine
/etc/init.d/apache2 restart</pre></div></div>

<p>Votre Redmine est disponible : http://redmine.maboite.com.</p>
<p>Vous pouvez maintenant jouer avec votre nouveau bijou.<br />
Pour ma part, je n&#8217;en suis qu&#8217;à une semaine de réelle utilisation, je suis entièrement satisfait.<br />
Le seul hic, c&#8217;est le principe des WorkFlow qui est un peu dur à assimiler. Ca mérite d&#8217;ailleurs un autre billet.</ol>
<p><em>Notez que cet article, écrit par Jean-Luc Ranaivoarivao, a été copié sur le <a title="Installation Redmine sous Debian Lenny 5.0" href="http://trambo.blog.vectoris.fr/2009/07/23/installation-redmine-sous-debian-lenny-50/" target="_self">blog</a> de ce dernier. Veuillez poster vos commentaires directement a son auteur.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vectoris.fr/2009/07/23/installation-redmine-sous-debian-lenny-50/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

