Tutoriel apache2+mongrel clusters

Je viens de terminer mon install alors pour ceux que ça interesse
voilà comment j’ai fait:
J’ai choisi Debian Etch parceque ça vient avec apache2.2.3 et le
module load_balancer donc pas besoin de recompiler apache à la main.

#Tout d’abord, installer apache2 et ruby (facile pour les gens de
cette liste :slight_smile:
apt-get install apache2 ruby ruby1.8-dev et compagnie :slight_smile:

#ensuite installer gem, bon j’imagine que vous savez comment faire
aussi (télécharger le décompresser et faites ‘ruby setup.rb’).

#ensuite en tant que root faire:
gem install daemons gem_plugin mongrel mongrel_cluster
–include-dependencies

#placez-vous dans la racine de votre application rails et taper:

mongrel_rails cluster::configure -e production -p 8000 -a
monsite.com -N 3 -c /chemin/vers/votre/appli/rails

#voilà, maintenant tapez:
mongrel_rails cluster::start
#et voilà! ouvrez votre monsite.com:8000 et ça devrait marcher.

#pour automatiser le process faites:
/usr/sbin/update-rc.d mongrel_cluster defaults

#ensuite vous pourrez démarrer votre appli en faisant:
/etc/init.d/mongrel_cluster start nom_de_votre_appli

#maintenant il y a la partie apache moins sympa:
#aller dans /etc/apache2/mods-enabled et là, tapez ces commandes:
ln -s /etc/apache2/mods-available/deflate.load deflate.load
ln -s /etc/apache2/mods-available/proxy_balancer.load
proxy_balancer.load

#et faite de même avec proxy_balancer.load , rewrite.load ,
proxy.conf , mem_cache.conf , proxy_http.load , deflate.load,
mem_cache.load et proxy.load
#Il y a surement une commande apache pour loader les modules mais en
tout cas ça marche comme ça :slight_smile:

#Voilà maintenant il n’y a plus cas configurer les Virtual hosts.
#Placez-vous dans /etc/apache2/sites-availble
#Là, créer monsite.conf et dedans écriver:

NameVirtualHost monsite.com:80

<VirtualHost :80>
ServerName monsite.com
ServerAlias www.monsite.com
DocumentRoot /chemin/vers/votre/appli/rails/public/
Include /etc/apache2/conf.d/monsite.common
ErrorLog /chemin/vers/votre/appli/rails/log/monsite_errors_log
CustomLog /chemin/vers/votre/appli/rails/log/monsite_log combined

###fin de monsite.conf###

##placez-vous dans /etc/apache2/sites-enabled et faites:
ln -s /etc/apache2/sites-available/monsite.conf monsite.conf

ensuite dans /etc/apache2/conf.d/monsite.common

<Directory “/chemin/vers/votre/appli/rails/public/”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

RewriteEngine On

Rewrite index to check for static

RewriteRule ^/$ /index.html [QSA]

Rewrite to check for Rails cached page

RewriteRule ^([^.]+)$ $1.html [QSA]

Redirect all non-static requests to cluster

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]

Deflate

AddOutputFilterByType DEFLATE text/html text/plain text/xml
application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

#important!! apache marche mieux que mongrel sur tout ce qui est
static donc on retire images, css et autres javascripts.
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
#vous pouvez en ajoutez d’autres si vous en avez of course

Alias /images /chemin/vers/votre/appli/rails/public/images
Alias /stylesheets /chemin/vers/votre/appli/rails/stylesheets
Alias /stylesheets /chemin/vers/votre/appli/rails/javascripts

##fin de monsite.common###

Maintenant, créer ce fichier

/etc/apache2/conf.d/testapp.proxy_cluster.conf
<Proxy balancer://mongrel_cluster>
BalancerMember http://monsite.com:8000
BalancerMember http://monsite.com:8001
BalancerMember http://monsite.com:8002

Voilà c’est tout, vous devriez pouvoir vous connecter à votre site
monsite.com et apache se charge de redistribuer automatiquement sur
mongrel.

si vous avez des suggestions ou autres n’hésitez pas.

Pat

Bonjour,

les commandes apaches en question sont

a2dismod a2dissite a2enmod a2ensite

super doc en tout cas

Cordialement

Olivier AUDRY

Le mercredi 15 novembre 2006 à 01:22 +0100, Patrick A. a écrit :

On 11/15/06, Olivier AUDRY [email protected] wrote:

Bonjour,

les commandes apaches en question sont

a2dismod a2dissite a2enmod a2ensite
merci beaucoup!

super doc en tout cas
merci :slight_smile:
j’ai oublié de dire que je me suis beaucoup inspiré de
http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/

Mais ce tutoriel reste un peu flou sur ‘où doit aller chaque fichier’
apache et si vous êtes un gros nul en apache comme moi vous n’y
arriverez surement pas d’où mon tutoriel pour faire part de ma
démarche etc… :slight_smile:

Pat

petite rectification, à la fin c’est monsite.proxy_cluster.conf au
lieu de testapp.proxy_cluster.conf

Je reposte tout pour ceux qui voudraient faire un copier/coller :slight_smile:

#Tout d’abord, installer apache2 et ruby (facile pour les gens de
cette liste :slight_smile:
apt-get install apache2 ruby ruby1.8-dev et compagnie :slight_smile:

#ensuite installer gem, bon j’imagine que vous savez comment faire
aussi (télécharger le décompresser et faites ‘ruby setup.rb’).

#ensuite en tant que root faire:
gem install daemons gem_plugin mongrel mongrel_cluster
–include-dependencies

#placez-vous dans la racine de votre application rails et taper:

mongrel_rails cluster::configure -e production -p 8000 -a
monsite.com -N 3 -c /chemin/vers/votre/appli/rails

#voilà, maintenant tapez:
mongrel_rails cluster::start
#et voilà! ouvrez votre monsite.com:8000 et ça devrait marcher.

#pour automatiser le process faites:
/usr/sbin/update-rc.d mongrel_cluster defaults

#ensuite vous pourrez démarrer votre appli en faisant:
/etc/init.d/mongrel_cluster start nom_de_votre_appli

#maintenant il y a la partie apache moins sympa:
#aller dans /etc/apache2/mods-enabled et là, tapez ces commandes:
ln -s /etc/apache2/mods-available/deflate.load deflate.load
ln -s /etc/apache2/mods-available/proxy_balancer.load
proxy_balancer.load

#et faite de même avec proxy_balancer.load , rewrite.load ,
proxy.conf , mem_cache.conf , proxy_http.load , deflate.load,
mem_cache.load et proxy.load
#Il y a surement une commande apache pour loader les modules mais en
tout cas ça marche comme ça :slight_smile:

#Voilà maintenant il n’y a plus cas configurer les Virtual hosts.
#Placez-vous dans /etc/apache2/sites-availble
#Là, créer monsite.conf et dedans écriver:

NameVirtualHost monsite.com:80

<VirtualHost :80>
ServerName monsite.com
ServerAlias www.monsite.com
DocumentRoot /chemin/vers/votre/appli/rails/public/
Include /etc/apache2/conf.d/monsite.common
ErrorLog /chemin/vers/votre/appli/rails/log/monsite_errors_log
CustomLog /chemin/vers/votre/appli/rails/log/monsite_log combined

###fin de monsite.conf###

##placez-vous dans /etc/apache2/sites-enabled et faites:
ln -s /etc/apache2/sites-available/monsite.conf monsite.conf

ensuite dans /etc/apache2/conf.d/monsite.common

<Directory “/chemin/vers/votre/appli/rails/public/”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

RewriteEngine On

Rewrite index to check for static

RewriteRule ^/$ /index.html [QSA]

Rewrite to check for Rails cached page

RewriteRule ^([^.]+)$ $1.html [QSA]

Redirect all non-static requests to cluster

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]

Deflate

AddOutputFilterByType DEFLATE text/html text/plain text/xml
application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

#important!! apache marche mieux que mongrel sur tout ce qui est
static donc on retire images, css et autres javascripts.
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
#vous pouvez en ajoutez d’autres si vous en avez of course

Alias /images /chemin/vers/votre/appli/rails/public/images
Alias /stylesheets /chemin/vers/votre/appli/rails/stylesheets
Alias /stylesheets /chemin/vers/votre/appli/rails/javascripts

##fin de monsite.common###

Maintenant, créer ce fichier

/etc/apache2/conf.d/monsite.proxy_cluster.conf
<Proxy balancer://mongrel_cluster>
BalancerMember http://monsite.com:8000
BalancerMember http://monsite.com:8001
BalancerMember http://monsite.com:8002

Bon tutoriel, il serait peut être intéressant de mettre ce genre
d’info. dans un Wiki… Enfin en attendant, tu pourrais publier sur le
site de RailsFrance (rubrique documentation).

Quoting Patrick A. [email protected]:

aussi (télécharger le décompresser et faites ‘ruby setup.rb’).

#ensuite en tant que root faire:
gem install daemons gem_plugin mongrel mongrel_cluster
–include-dependencies
#pour automatiser le process faites:
/usr/sbin/update-rc.d mongrel_cluster defaults

#ensuite vous pourrez démarrer votre appli en faisant:
/etc/init.d/mongrel_cluster start nom_de_votre_appli

#maintenant il y a la partie apache moins sympa:
#aller dans /etc/apache2/mods-enabled et là , tapez ces commandes:
ln -s /etc/apache2/mods-available/deflate.load deflate.load
ln -s /etc/apache2/mods-available/proxy_balancer.load
proxy_balancer.load

#et faite de même avec proxy_balancer.load , rewrite.load ,
proxy.conf , mem_cache.conf , proxy_http.load , deflate.load,
mem_cache.load et proxy.load
#Il y a surement une commande apache pour loader les modules mais
en
ServerAlias www.monsite.com
ln -s /etc/apache2/sites-available/monsite.conf monsite.conf
RewriteEngine On

Rewrite index to check for static

RewriteRule ^/$ /index.html [QSA]

Rewrite to check for Rails cached page

RewriteRule ^([^.]+)$ $1.html [QSA]

Redirect all non-static requests to cluster

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI}
[P,QSA,L]
ProxyPass /images !

Maintenant, créer ce fichier

/etc/apache2/conf.d/monsite.proxy_cluster.conf

J’ai choisi Debian Etch parceque ça vient avec apache2.2.3

je vois partout marquer qu’il faut apache2.2 pour ce fameux
apache/mongrel.

c’est vraiment nécessaire ? ca peut pas marcher avec le 2.0 ?

merci (-:

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

c’est ce que je fais avec ma gentoo qui ne peut pas installer apache
2.2 à moins de passer avec les builds masqué (non conseillé)

je posais cette question justement parce que je suis aussi sous Gentoo
(-:

http://wiki.bwabwa.be/wakka.php?wiki=RailsCapistranoSubversionGentooTiger
(qui fonctionne maintenant :wink: )

je ne manquerai pas d’y faire un tour pour essayer tout ça.

merci !

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

2.2 est interessant pour le load_balancer,

Sinon tu peux utiliser pound pour jouer le role du load_balancer

c’est ce que je fais avec ma gentoo qui ne peut pas installer apache
2.2 à moins de passer avec les builds masqué (non
conseillé)
J’ai detaillé le principe sur mon wiki (avec d’autres choses, mais
apache 2.0 + pound + mongrel_cluster est abordé! )

http://wiki.bwabwa.be/wakka.php?wiki=RailsCapistranoSubversionGentooTiger
(qui fonctionne maintenant :wink: )

2006/11/15, Julien ALEXANDRE [email protected]:

2.2 est interessant pour le load_balancer,

et donc le fait de pouvoir avoir plusieurs mongrel qui tournent en
même temps pour la même application :slight_smile:

Sinon tu peux utiliser pound pour jouer le role du load_balancer

c’est ce que je fais avec ma gentoo qui ne peut pas installer apache
2.2 à moins de passer avec les builds masqué (non conseillé)

J’ai detaillé le principe sur mon wiki (avec d’autres choses, mais
apache 2.0 + pound + mongrel_cluster est abordé! )

Ou alors tu fait bien bien barbare (parce qu’aucune gestion du load
possible, ça fera juste un random).

Un fichier map.txt avec :

ports 4000|4001|4002

Ensuite dans la configuration du vhost :

ProxyRequests Off
ProxyPassReverse / http://localhost:4000/
ProxyPassReverse / http://localhost:4001/
ProxyPassReverse / http://localhost:4002/
ProxyPreserveHost On
RewriteEngine On
RewriteMap servers rnd:/path/vers/le/map.txt
RewriteRule ^/(images|stylesheets|javascripts)/?(.) $0 [L]
RewriteRule ^/(.
)$ http://localhost:${servers:ports}/$1 [P,L]

et ça marche avec apache >=2.0 :smiley:

(source : http://times.usefulinc.com/2006/09/13-mongrel-apache20)

et donc le fait de pouvoir avoir plusieurs mongrel qui tournent en
même temps pour la même application :slight_smile:
Heu… oui, on est bien d’accord :wink:

Ou alors tu fait bien bien barbare (parce qu’aucune gestion du load
possible, ça fera juste un random).

A mon avis POUND est aussi, voir plus simple à mettre en place, et
sûrement plus intéressant niveau perfs.