5. Configuration
La configuration est définie à trois niveaux :- ligne de commande : quand on utilise le serveur intégré, le répertoire dans
lequel se trouve le script de configuration du serveur peut être précisé
python Karrigell.py [ServerConfigDirectory]
Par défaut, le répertoire utilisé est le même que celui dans lequel se trouve Karrigell.py
- script de configuration du serveur : définit les répertoires
utilisés par le canevas, et les options qui relèvent du niveau serveur
(mode de stockage des sessions, nombre maximum de threads, etc). Pour le
serveur intégré, ces données sont stockées dans le script
server_config.py dans le répertoire de configuration du serveur
défini ci-dessus
- scripts de configuration d'hôte : définis dans le script conf.py dans chaque répertoire de données d'hôte ; pour l'hôte local (localhost), il est situé dans le dossier data/www
Chaque hôte peut être configuré par un fichier de configuration spécifique. La correspondance entre un nom d'hôte et son fichier de configuration est défini dans le fichier texte hosts, situé dans le répertoire de configuration serveur
Ce script de configuration d'hôte peut être édité par un éditeur de texte, ou en ligne depuis le menu d'administration accessible sur la page d'accueil
5.1 Configuration du serveur
Ce script définit les valeurs suivantes :
karrigell_dirLe répertoire dans lequel se trouve le coeur du canevas Karrigell : celui dans lequel se trouvent les dossiers core et package
host_conf_dirLe répertoire dans lequel se trouve le fichier texte hosts
portLe port sur lequel le serveur tournepersistent_sessionsDans la plupart des situations, il vaut mieux donner à cette option la valeurTrue, ce qui signifie que les données de session sont stockées sur disque : les stocker en mémoire n'est pas fiable dans un environnement multi-threads, que ce soit avec le serveur multi-thread intégré ou derrière ApacheCeci limite les données de sessions aux types qui peuvent être sérialisés par le module pickle
Au cas où vous auriez besoin de stocker dans l'objet de session des objets Python impossibles à "pickler", vous pouvez donner à persistent_sessions la valeur
False. Comme indiqué ci-dessus, soyez conscient que ceci ne fonctionnera de manière fiable qu'avec un serveur mono-thread et mono-process tels que les serveurs intégrés Karrigell_monoprocess.py ou Karrigell_async.pycacheBooléen pour indiquer si le cache HTTP est utilisé (avec l'en-têteIf-Modified-Since). Prend la valeur True par défautipv6Booléen pour indiquer s'il faut utiliser IPv6 au lieu de IPv4. Prend la valeur False par défautmax_threadsLe nombre maximum de threads qui peuvent être lancés par le serveur intégré multi-threadéprocess_numLe nombre de processus à lancer quand on démarre le serveur intégré multi-processsilentUne valeur booléenne qui indique si le serveur doit écrire une information de trace sur sys.stderr pour chaque requêtemodulesUn dictionnaire qui fait correspondre des étapes du traitement des requêtes avec une liste de modules. Quand l'étape spécifiée est atteinte, la fonctionmain()de chaque module est appliquée à l'objet gestionnaire de requête (instance de HTTP.HTTP)
5.2 Configuration d'hôte
Les valeurs qui peuvent être définies sont :
root_dirOn donne àroot_dirle nom complet du répertoire racine, celui depuis lequel on veut servir les fichiers. Par défaut il s'agit du dossierwwwdans le répertoire serveurdata_dirLe répertoire dans lequel se trouvent les données propres à l'hôte : base de données des utilisateurs, fichier de traduction, données de session...cache_dirLe répertoire dans lequel se trouve le cache des scripts. Le cache évite de parser les scripts à chaque fois qu'ils sont exécutés ; il est mis à jour quand le code source d'un script est modifié
Si on donne comme valeurNone, le cache de scripts est désactivécgi_dirLe répertoire dans lequel se trouvent les scripts CGIallow_directory_listingLa liste des rôles utilisateurs (voir authentification) qui peuvent voir des listes de répertoires et de fichiers si une url correspond à un répertoire sans fichier d'index. SiNonefigure dans cette liste, tous les utilisateurs peuvent voir le contenu du répertoire. Si la valeur est['admin','edit'], seuls les utilisateurs connectés sur un profil 'admin' ou 'visit' pourront le voir ; les autres utilisateurs recevront un message d'erreur
La valeur par défaut est[None]hide_extensionsUne liste des extensions de fichiers à cacher (renvoie l'erreur 403)ignoreUne liste des modèles d'expressions régulières qui seront appliquées aux chemins d'urls ; si une correspondance est trouvée, le serveur renvoie une erreur 403
Ceci peut être utilisé pour interdire l'accès à un ensemble de répertoires. Par exemple si vous avez un système de gestion de versions qui crée des répertoires appeléscvsvous pouvez en interdire l'accès avec cette ligne :ignore = [".*/cvs/.*"]logging_fileLe chemin du fichier de traces. S'il n'est pas spécifié, aucune trace n'est conservéelogging_rotateSilogging_fileest défini, indique à quelle périodicité le fichier de traces doit être changé. Si la valeur estNone, on utilise toujours le même fichier de trace. Avec la valeur"monthly", "daily"ou"hourly", le fichier de traces change avec le mois, le jour ou l'heure ; le nom du fichier est celui défini dansloggin_file, auquel on ajoute le mois / le jour / l'heureoutput_encodingChaîne de caractères qui indique l'encodage à utiliser pour envoyer des données à l'utilisateuraliasUn dictionnaire qui fait correspondre un alias au chemin d'un dossier dans le système de fichiers. Par exemple :l'url htpp://localhost/scripts/index.html servira le fichierdebugindique si vous voulez que des informations détaillées, y compris la trace d'erreur Python, soient affichées en cas d'erreur ou d'exception dans l'exécution d'un script. VautTruepar défaut. Ave la valeurFalse, seul un message du type "Le serveur n'a pas pu exécuter votre requête" sera imprimé, sans aucun autre détailgzipSi la valeur estTrue, et que l'agent utilisateur supporte la compression gzip (c'est le cas de la plupart des navigateurs), le serveur comprime les données envoyées à l'utilisateur pour les fichiers texte. Ceci réduit la charge réseau, mais ralentit légèrement le serveurglobal_modulesUne liste de chemins vers des modules qui doivent être importés dans chaque script exécuté par Karrigell. Si vous avez une ligne commele nom du moduleglobal_modules = ["/usr/scripts/myScript.py"]myScriptsera disponible dans l'espace de noms de tous les scriptsmax_sessionsLe nombre maximum de sessions qui peuvent être stockées. Vaut 500 par défaut