Déploiement de ruby on rails avec apache 2.0 et mongrel
By jul on Wednesday, October 4 2006, 09:59 - Permalink
Le principal problème de Ruby on Rails, actuellement, est son déploiement dans un environnement de production. Il existe pourtant un certain nombre de possibilités plus ou moins simples.
La solution que j’ai retenu est d’utiliser la capacité de clustering de mongrel avec la version 2.0 de apache . Les développeurs de mongrel conseillent l’utilisation d'apache 2.2 et de son mod_load_balancer. Néammoins, apache 2.0 reste la version la plus simple à utiliser, car maintenue par les principales distributions (Debian en tête).
En imaginant que nous avons déjà un environnement rails en place, nous allons commencer par installer mongrel:
$ sudo gem install mongrel
Une fois mongrel installé, configurons le pour une application donnée :
$ sudo mongrel_rails cluster::configure -e production \
-p 8000 -N 3 -c /repertoire/de/notre/application \
-a 127.0.0.1 --user www-data --group www-data
Petite explication, nous configurons mongrel en cluster de trois processus (-N 3) commençant au port 8000 (-p 8000), ce qui nous lancera trois processus (8000,8001 et 8002).
A noter également que notre répertoire devra posséder les permissions www-data.
Nous pouvons à présent lancer le cluster:
$ sudo mongrel_rails cluster::start
Il faut maintenant configurer apache pour qu’il gère de manière transparente ce cluster. Pour cela, nous allons utiliser le module mod_proxy de la version 2.0. Voici le code pour un hôte virtuel (/etc/apache2/site-availables/monsite.fr dans Debian):
<VirtualHost *>
ServerName www.monsite.fr
ServerAdmin admin@monsite.fr
DocumentRoot /repertoire/de/notre/application/public
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests Off
ProxyPassReverse / http://localhost:8000/
ProxyPassReverse / http://localhost:8001/
ProxyPassReverse / http://localhost:8002/
ProxyPreserveHost On
RewriteEngine On
RewriteMap servers rnd:/etc/apache2/map.txt
RewriteRule ^/(images|stylesheets|javascripts)/?(.*) $0 [L]
RewriteRule ^/(.*)$ http://localhost:${servers:ports}/$1 [P,L]
<Directory /repertoire/de/notre/application/public/>
Options +FollowSymLinks
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/monsite_error.log
LogLevel warn
CustomLog /var/log/apache2/monsite_access.log combined
ServerSignature On
</VirtualHost>
N’oubliez pas d’activer le module apache et le nouveau site.
$ sudo a2enmod proxy
$ sudo a2ensite monsite.fr
Il ne reste plus qu’à relancer apache! Les connexions vers www.monsite.fr seront ainsi redirigées automatiquement vers le cluster le plus approprié.
Cette technique nous permet d’avoir une application rails supportant une charge plus importante en multipliant les clusters.
Voir également (en anglais): la doc de mongrel et ce blog.