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_dir
Le répertoire dans lequel se trouve le coeur du canevas Karrigell : celui dans lequel se trouvent les dossiers core et package
host_conf_dir
Le répertoire dans lequel se trouve le fichier texte hosts
port
Le port sur lequel le serveur tournepersistent_sessions
Dans 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.pycache
Booléen pour indiquer si le cache HTTP est utilisé (avec l'en-têteIf-Modified-Since
). Prend la valeur True par défautipv6
Booléen pour indiquer s'il faut utiliser IPv6 au lieu de IPv4. Prend la valeur False par défautmax_threads
Le nombre maximum de threads qui peuvent être lancés par le serveur intégré multi-threadéprocess_num
Le nombre de processus à lancer quand on démarre le serveur intégré multi-processsilent
Une valeur booléenne qui indique si le serveur doit écrire une information de trace sur sys.stderr pour chaque requêtemodules
Un 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_dir
On donne àroot_dir
le nom complet du répertoire racine, celui depuis lequel on veut servir les fichiers. Par défaut il s'agit du dossierwww
dans le répertoire serveurdata_dir
Le 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_dir
Le 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_dir
Le répertoire dans lequel se trouvent les scripts CGIallow_directory_listing
La 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. SiNone
figure 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_extensions
Une liste des extensions de fichiers à cacher (renvoie l'erreur 403)ignore
Une 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éscvs
vous pouvez en interdire l'accès avec cette ligne :ignore = [".*/cvs/.*"]
logging_file
Le chemin du fichier de traces. S'il n'est pas spécifié, aucune trace n'est conservéelogging_rotate
Silogging_file
est 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_encoding
Chaîne de caractères qui indique l'encodage à utiliser pour envoyer des données à l'utilisateuralias
Un 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 fichierdebug
indique 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. VautTrue
par 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étailgzip
Si 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_modules
Une 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"]myScript
sera disponible dans l'espace de noms de tous les scriptsmax_sessions
Le nombre maximum de sessions qui peuvent être stockées. Vaut 500 par défaut