1.2. Intégration à Apache
Il y a plusieurs façons de faire fonctionner Karrigell avec Apache :
mode | description | pros | cons |
---|---|---|---|
Mode CGI | Les requêtes sont traitées par un script CGI |
|
|
Mode WSGI | La communication entre Apache et Karrigell utilise le standard WSGI et repose sur le module Apache mod_wsgi |
|
|
Mode mod_python | mod_python embarque un interpréteur Python dans le serveur Apache |
|
|
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 |
|
|
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'urlcgi-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 WSGILe 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 performancesLe 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