1.2. Intégration à Apache

Il y a plusieurs façons de faire fonctionner Karrigell avec Apache :

modedescriptionproscons
Mode CGI Les requêtes sont traitées par un script CGI
  • compatible avec tous les hébergeurs web
  • pas de bloquage pour les requêtes longues (chaque requête est exécutée dans un processus différent)
  • le surcoût du CGI réduit la performance
Mode WSGI La communication entre Apache et Karrigell utilise le standard WSGI et repose sur le module Apache mod_wsgi
  • bonnes performances
  • WSGI est le standard de fait pour l'intégration des canevas web
  • nécessite le module mod_wsgi (pas disponible sur beaucoup de sites d'hébergement partagé)
Mode mod_python mod_python embarque un interpréteur Python dans le serveur Apache
  • bonne performance (évite le surcoût du CGI)
  • nécessite l'installation du module mod_python (pas disponible chez tous les hébergeurs)
Mode proxy Le serveur intégré tourne en arrière-plan, le serveur Apache lui envoie toutes les requêtes et renvoie la réponse au client
  • bonne performance
  • nécessite la permission de faire tourner un processus long sur le serveur

1.2.1 Vue d'ensemble

Pour faire fonctionner Karrigell derrière Apache, certaines options doivent être définies dans le fichier de configuration httpd.conf : le port du serveur, le répertoire racine (Document Root) pour l'hôte, et des directives qui s'appliquent au contenu du répertoire racine. Pour simplifier l'installation, la seule directive requise est AllowOverride All, qui dit au serveur d'appliquer les directives définies dans les fichiers .htacess : un modèle de ces fichiers est fourni dans la distribution Karrigell pour chaque mode

Cela signifie que la section <Directory> relative à votre répertoire racine dans httpd.conf devrait avoir cette forme :

<Directory [[document_root]]>
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory >

Ici Karrigell ne gère qu'un seul hôte (les hôtes virtuels sont gérés par Apache), ce qui simplifie les options de configuration

1.2.2 Mode CGI

Ce mode utilise les modules Apache mod_rewrite et mod_cgi ; toutes les urls qui doivent être gérées par Karrigell (tout sauf les extensions de fichiers statiques html, htm, css, js, jpg, jpeg, gif, png) sont "réécrites" par mod_rewrite pour être gérées par un unique script CGI, k_handler.cgi, situé par défaut dans le dossier karrigell/apache/cgi-bin. Ce script récupère les options de configuration de Karrigell dans le script de configuration conf.py

Ces modules doivent être chargés au lancement d'Apache, il faut donc veiller à ce que ces lignes soient décommentées dans votre fichier httpd.conf :

LoadModule cgi_module modules/mod_cgi.so
LoadModule rewrite_module modules/mod_rewrite.so

L'étape suivante est d'installer ou de télécharger le contenu décompressé du fichier Karrigell-Apache-3.1.1.tar.gz dans le Répertoire Racine de votre espace Apache

Ensuite, renommez le fichier .htaccess_cgi dans ce répertoire racine en .htaccess

Il faut aussi éditer la première ligne du script CGI k_handler.cgi avec la commande adéquate pour lancer l'interpréteur Python. Sur Unix/Linux c'est généralement #!/usr/bin/python et sous Windows #!python, mais cela peut dépendre de la configuration du serveur

Dans le meilleur des cas, cela suffit pour faire fonctionner Karrigell ! Il faudra simplement vérifier les modes d'écriture et d'exécution dans certains dossiers : "write" pour apache/data, "execute" pour apache/cgi-bin. Le mode exact peut varier légèrement selon les serveurs

Dans d'autres cas (par exemple pour un hébergeur partagé) vous ne pourrez pas exécuter les scripts CGI en dehors d'un dossier particulier, souvent appelé cgi-bin. Dans ce cas :

  • mettez tous les fichiers du répertoire apache/cgi-bin dans ce dossier CGI
  • modofiez le script conf.py and remplacez ces valeurs :
    • root_dir = (le chemin complet du répertoire racine)
    • karrigell_dir = os.path.join(root_dir,"karrigell")
    • server_dir = (le chemin complet du répertoire où vous avez mis les scripts CGI)
    • data_dir = le chemin complet d'un répertoire avec le mode WRITE, si possible en-dehors du répertoire racine pour des raisons de sécurité
    • cache_dir = os.path.join(data_dir, "cache")
  • dans le fichier .htaccess du répertoire racine, remplacez l'url du script k_handler.cgi par la bonne valeur. Souvent Apache est configuré avec une directive ScriptAlias qui dit que les scripts qui se trouvent dans le dossier CGI sont appelés avec l'url cgi-bin ; si c'est le cas vous devez donner la valeur /cgi-bin/k_handler.cgi dans .htaccess

Si vous ne connaissez pas les chemins complets, vous pouvez exécuter le script CGI script cgi_dir.cgi (en n'oubliant pas de donner la bonne valeur pour l'interpréteur Python sur la première ligne...). Il vous donnera le chemin complet du dossier CGI ; vous devriez pouvoir déduire les autres chemins à partir de celui-ci

1.2.3 Intégration avec mod_wsgi

mod_wsgi est un module qui rend Apache capable de supporter toute application Python qui supporte l'interface WSGI

Le script wsgi.py dans le dossier apache/mod_wsgi prend en charge toutes les urls qui doivent être gérées par Karrigell

mod_wsgi doit être installé pour le serveur Apache. Pour cela la première chose à faire est de télécharger mod_wsgi depuis le site web, et de suivre les instructions pour l'installer dans le fichier de configuration d'Apache : dans la section "Dynamic Shared Object (DSO) Support" de httpd.conf, ajouter la ligne :

LoadModule wsgi_module modules/mod_wsgi.so

Installer ou télécharger le contenu de Karrigell-Apache-3.1.1.tar.gz dans le répertoire racine de votre espace Apache

Si vous avez un fichier .htaccess dans ce répertoire racine, supprimez-le ou donnez-lui un autre nom

Puis dans httpd.conf, ajoutez cette ligne :

WSGIScriptAlias / /path-to-Karrigell-root/karrigell/apache/mod_wsgi/wsgi.py

Ceci dirigera toutes les requêtes vers le script wsgi.py, qui gère toutes les requêtes en utilisant Karrigell et retourne le résultat au serveur Apache

1.2.4 Intégration avec mod_python

Mod_python est un module Apache qui intègre un interpréteur Python dans le serveur. Il évite le surcoût CGI du lancement de l'interpréteur à chaque requête, et permet donc de bien meilleures performances

Le script mod_python_handler.py dans le dossier apache/mod_python gère toutes les url qui doivent être prises en charge par Karrigell

Naturellement mod_python doit être installé par le serveur Apache. Pour cela, la première chose à faire est de télécharger et d'installer mod_python depuis le site, et de suivre les instructions pour l'intégrer dans le fichier de configuration Apache. Dans la section "Dynamic Shared Object (DSO) Support" de httpd.conf, ajoutez la ligne :

LoadModule python_module modules/mod_python.so

Installez ou téléchargez le contenu décompressé de Karrigell-Apache-3.1.1.tar.gz dans le répertoire racine de votre espace Apache

Puis renommez le fichier .htaccess_mod_python dans ce répertoire racine en .htaccess

Cela suffit pour faire fonctionner Karrigell. Pour des raisons de sécurité, il est préférable d'éditer le script de configuration conf.py et de remplacer la valeur data_dir par le chemin complet d'un répertoire avec les droits WRITE, en-dehors du Répertoire Racine