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

  1. Installation de apache

    sudo apt-get install libcurl4-openssl-dev apache2-prefork-dev apache2-mpm-worker

  2. Installation de passenger

    gem install passenger

  3. 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

  1. 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

  2. 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.