Karrigell Documentation

Version 2.3.1 02 09 06

English

5. Karrigell avec Apache, lighttpd ou Xitami

Bien que Karrigell puisse fonctionner de façon autonome avec le serveur Web intégré, il peut être intéressant de le faire fonctionner avec un serveur Web externe. Apache est le serveur le plus répandu dans le monde, il est performant, stable, il permet de travailler en mode sécurisé (SSL), il offre des services de log, etc

5.1 Apache

5.1.1 Introduction

Pour utiliser Karrigell dans Apache vous devrez télécharger et installer les élements suivants :

Je préconise que vous utilisiez la dernière version stable de chacun des éléments ci-dessus

Je recopie l'essentiel de cette section à partir de la documentation de CherryPy, par Rémi Delon : http://www.cherrypy.org/wiki/BehindApache

Une fois que tout ce qui précède est installé (et fonctionne!) tout ce qu'il vous reste à faire est d'ajouter quelques lignes au fichier de configuration Apache httpd.conf (il devrait se trouver sous l'élément de menu "Configurer le serveur Apache" sous Windows).

Dans la section Dynamic Shared Object (DSO), décommentez les lignes

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
Ailleurs dans la section Main server configuration, ajoutez les lignes suivantes pour mettre en oeuvre la fonction proxy :
ProxyRequests On
<Proxy *>
    Order allow,deny
    Deny from none
    Allow from all
</Proxy>

Pour demander à Apache d'envoyer les requêtes vers le serveur intégré, mod_rewrite est utilisé. Ce module analyse l'url d'origine et la modifie selon des règles écrites sous forme d'expressions régulières. Ici les lignes à écrire sont :

RewriteEngine On
RewriteCond  %{SCRIPT_FILENAME} !autostart\.cgi$
RewriteRule ^(.*) http://localhost:8081$1 [P]
ErrorDocument 502 /cgi-bin/autostart.cgi
La fonctionnalité essentielle est décrite dans la RewriteRule : elle indique à Apache de réécrire toutes les urls en une url absolue correspondant au serveur intégré qui tourne sur le port 8081, et d'utiliser le mode proxy pour lui passer la requête

Si le serveur intégré ne tourne pas, une erreur 502 est renvoyée ; la dernière ligne indique à Apache d'appeler le script autostart.cgi dans ce cas. La deuxième ligne empêche Apache de se servir de la RewriteRule pour ce script en particulier (sinon il entrerait dans une boucle infinie)

autoscript.cgi est un petit script, qui ressemble à ceci sous Linux/Unix :

#!/usr/local/bin/python
print "Content-type: text/html\r\n"
print """<html><head><META HTTP-EQUIV="Refresh" CONTENT="10; 
      URL=/"></head><body>Restarting site ...<a href="/">cliquez 
      ici<a></body></html>"""
import os
import sys
os.setpgid(os.getpid(), 0)
os.system(sys.executable + \
   ' /home/quentel/karrigell/Karrigell-2.2/Karrigell.py -P 8081 -S ' + \
   '/home/quentel/karrigell/Karrigell-2.2/Karrigell.ini &')

La seule chose à adapter est l'emplacement de python sur la première ligne, et le chemin vers Karrigell.py et Karrigell.ini sur la dernière ligne

Ensuite lancez le serveur intégré sur le port 8081 et démarrez Apache. Ceci devrait suffire pour faire fonctionner l'ensemble. Démarrez (ou redémarrez) Apache pour lui faire lire la nouvelle configuration et commencez à vous en servir. En fonction de la valeur prise par ServerName (mettez 'localhost' pour les tests), entrez l'URL de votre serveur dans la barre d'adresses d'un navigateur et Karrigell/ModPython/Apache devrait servir des pages web comme le Karrigell "normal"

Pour des raisons de sécurité, sur Linux il vaut mieux démarrer Karrigell sur un port supérieur à 1024 et pas comme root

5.1.2 Hôtes virtuels

Les hôtes virtuels peuvent être utilisés avec Apache pour servir des hôtes différents sur la même machine avec le même serveur. Depuis la version 2.2, Karrigell prend en charge cette notion d'hôte virtuel, ainsi vous pouvez servir tous les hôtes virtuels avec la même instance du serveur intégré

Si vous avez configuré [VirtualHost karrigell:8081] dans le fichier de configuration de Karrigell (voir la page sur les options du serveur web) avec le nom karrigell et le port 8081 (sur lequel le serveur intégré tourne), vous ajoutez ceci dans le fichier de configuration d'Apache :

NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
        ServerName karrigell
        # for use with Karrigell
        RewriteEngine On
        RewriteCond  %{SCRIPT_FILENAME} !autostart\.cgi$
        RewriteRule ^(.*) http://karrigell:8081$1 [P]
        ErrorDocument 502 /cgi-bin/autostart.cgi
</VirtualHost>

Bien entendu vous changerez l'adresse et le port dans <Virtual Host> aux valeurs appropriées

5.2 lighttpd

D'après le site de lighttpd :
Sécurité, vitesse, conformité et flexibilité - tout ceci décrit LightTPD qui est en train de redéfinir les critères d'efficacité d'un serveur web, qui est conçu et optimisé pour des environnements de haute performance. D'encombrement mémoire réduit par rapport à d'autres serveurs web, une gestion efficace de la charge CPU et un ensemble complet de fonctionnalités (FastCGI, CGI, Auth, compression, réécriture d'URL et bien d'autres) LightTPD est la solution idéale pour les serveurs qui connaissent des problèmes de charge. Et, cerise sur le gâteau, c'est un logiciel libre publié sous la licence BSD

Configuration pour Karrigell par Laurent Pointal

  • Lancez votre site Karrigell, en le faisant écouter sur un port (8082 par exemple).
  • Chargez mod_proxy dans lighttpd

        cd /etc/lighttpd/conf-enabled
        ln -s ../conf-available/10-proxy.conf 10-proxy.conf
    
  • Utilisez une configuration de cette forme:

    $HTTP["host"] == "mon.hote.virtuel.com" {
                    proxy.server = ( "" =>
                                       ((
                                            "host" => "127.0.0.1",
                                            "port" => 8082
                                       ))
                                    )
    }
    
  • Si vous voulez servir certains fichiers par lighttpd sans passer par Karrigell (typiquement pour du contenu statique, des images, etc) vous pouvez configurer de cette façon :

    $HTTP["host"] == "mon.hote.virtuel.com" {
            $HTTP["url"] !~ ".*/static/.*" {
                    proxy.server = ( "" =>
                                       ((
                                            "host" => "127.0.0.1",
                                            "port" => 8082
                                       ))
                                    )
                    }
            else $HTTP["url"] =~ ".*/static/.*" {
                    server.document-root = "/chemin/vers/mon/site/karrigell"
                    dir-listing.activate = "enable"
                    }
    }
    

    5.3 Xitami

    Xitami est un serveur web léger et rapide, disponible gratuitement. Téléchargez la dernière version et suivez les instructions d'installation

    Lancez le serveur, puis ouvrez une console système, mettez-vous dans le répertoire de Karrigell et tapez python Karrigell_xitami.py. A partir de là, toutes les requêtes envoyées à une URL qui commence par http://localhost/karrigell seront traitées par Karrigell

    Xitami et Karrigell sont interfacés à travers le "Long Running Web Process", qui accélère sensiblement la vitesse d'exécution par rapport au CGI

    Vous pouvez remplacer karrigell par un autre nom en éditant le fichier Karrigell_xitami.py et en changeant la valeur de la variable karrigellUrl