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 tourne
persistent_sessions
Dans la plupart des situations, il vaut mieux donner à cette option la valeur True, 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 Apache

Ceci 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.py

cache
Booléen pour indiquer si le cache HTTP est utilisé (avec l'en-tête If-Modified-Since). Prend la valeur True par défaut
ipv6
Booléen pour indiquer s'il faut utiliser IPv6 au lieu de IPv4. Prend la valeur False par défaut
max_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-process
silent
Une valeur booléenne qui indique si le serveur doit écrire une information de trace sur sys.stderr pour chaque requête
modules
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 fonction main() 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 dossier www dans le répertoire serveur
data_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 valeur None, le cache de scripts est désactivé
cgi_dir
Le répertoire dans lequel se trouvent les scripts CGI
allow_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. Si None 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és cvs 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ée
logging_rotate
Si logging_file est défini, indique à quelle périodicité le fichier de traces doit être changé. Si la valeur est None, 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 dans loggin_file, auquel on ajoute le mois / le jour / l'heure
output_encoding
Chaîne de caractères qui indique l'encodage à utiliser pour envoyer des données à l'utilisateur
alias
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 fichier
debug
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. Vaut True par défaut. Ave la valeur False, seul un message du type "Le serveur n'a pas pu exécuter votre requête" sera imprimé, sans aucun autre détail
gzip
Si la valeur est True, 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 serveur
global_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 comme
global_modules = ["/usr/scripts/myScript.py"]
        
le nom du module myScript sera disponible dans l'espace de noms de tous les scripts
max_sessions
Le nombre maximum de sessions qui peuvent être stockées. Vaut 500 par défaut