Frontal Web : Apache et Passenger
Pourquoi un frontal web ?
Sentinelle pourrait fonctionner sans frontal web. En effet rails est livré avec un serveur WEBrick.
Cependant WEBrick est mono-thread et sera incapable de traiter plusieurs requêtes simultanément. Dommage me direz vous qu'une seule personne puisse utiliser Sentinelle à la fois !
WEBrick est surtout utilisé dans la phase de développement. Dans un mode de production, on préférera utiliser un frontal web digne de ce nom comme apache
Apache ne sachant pas discuter avec une application ruby nativement, on va donc utiliser passenger pour assurer le dialogue avec Sentinelle
ProcédureInstallation de apache et de passenger
Installation de apache
sudo apt-get install libcurl4-openssl-dev apache2-prefork-dev apache2-mpm-worker
Installation de passenger
gem install passenger
Compilation du module passenger pour apache
passenger-install-apache2-module -a
Cette commande va :
- Vérifier que vous disposez bien des briques pour installer passenger, ce qui devrait être le cas si vous avez bien suivi les étapes précédentes,
- Compile le module passenger pour apache.
Remarque
A la fin de la compilation du module, le programme va vous indiquer les lignes à mettre dans votre fichier de configuration apache, afin de déployer votre application rails, n'en tenez pas compte. Nous allons voir cette configuration maintenant.
Paramétrage de apache
Il est nécessaire maintenant de configurer apache pour lui dire de charger le module passenger
Procédure
Configuration de apache
Les commandes suivantes vont créer un fichier /etc/apache2/conf.d/passenger.conf , avec les bons paramètres. Ce fichier sera chargé au démarrage d'apache
PASSENGER=`passenger-config --root`
MODULE=`passenger-config --includedir | sed 's/ext$//'`"buildout/apache2/mod_passenger.so"
RUBY=`passenger-config --ruby-command | grep "PassengerRuby" | grep wrappers | cut -d: -f2`
sudo bash <<EOF
echo "LoadModule passenger_module $MODULE" > /etc/apache2/conf.d/passenger.conf
echo "PassengerRoot $PASSENGER" >> /etc/apache2/conf.d/passenger.conf
echo "$RUBY" >> /etc/apache2/conf.d/passenger.conf
EOF
Configuration de notre site
Exécutez la commande suivante
sudo vi /etc/apache2/sites-available/sentinelle
et ajouter les lignes suivantes
PassengerMaxPoolSize 30
PassengerMaxInstancesPerApp 5
PassengerPoolIdleTime 3600
RailsAutoDetect off
<VirtualHost *:443>
ServerName sentinelle
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
DocumentRoot /home/sentinelle/alizes/public
<Directory /home/sentinelle/alizes/public>
AllowOverride all
Options -MultiViews
PassengerUser sentinelle
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript application/json <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresDefault "access plus 10 years"
</FilesMatch>
</Directory>
<LocationMatch "^/assets/.*$">
Header unset Last-Modified
Header unset ETag
FileETag None ExpiresActive On
ExpiresDefault "access plus 1 year"
Options +MultiViews +FollowSymLinks
</LocationMatch>
RailsBaseURI /
</VirtualHost>
Conseil
Vous remarquerez que nous avons définit ici les certificats génériques d'apache.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Vous pouvez y mettre les vôtres, si vous en disposez.
Remarque
Nous avons donc configuré notre site dans les sites disponibles (sites-available). Attendons un peu avant de l'activer. Il nous reste encore la configuration de la base de données à réaliser.