A l'heure où Apache + PHP font des ravages, il existe néanmoins une autre alternative : Caudium, disponible sur http://www.caudium.net. C'est un serveur Web (entre autres) basé sur Pike, qui est né d'une dissension[1] sur le projet Roxen[2].
Si vous n'avez pas de package pour Pike et Caudium (il en existe pour la Debian unstable), il faut commencer par compiler Pike.
Versions utilisées pour l'article : Pike[3] 7.0.355, Caudium[4] 1.0.34.
Plus les bibliothèques suivantes (et leurs headers respectifs dans le cas d'une distribution à paquets) : libjpeg62, libpng, giflib, libtiff, freetype2, libgmp2, zlib1g, libexpat, éventuellement Sablotron[5] (il se peut que la liste ne soit pas complète), et les bibliothèques pour les accès aux bases de données (ex : libmysqlclient pour MySQL).
Voir la section Module pour la liste des serveurs supportés.
Etant donné que nous nous servirons de Pike uniquement pour Caudium, je vous conseille de désactiver la compilation du module gtk en éditant le Makefile de la racine (pas celui dans src) et d'ajouter --without-GTK à la variable CONFIGUREARGS. Vous pouvez aussi y ajouter une option --prefix, ainsi que : --with-poll --with-oob --with-max-fds=10000 pour de meilleures performances, principalement sur les noyaux 2.4. Une fois ces modifications effectuées, un simple make && make install suffira. Vous prendrez bien un petit thé ? :)
Caudium
La compilation de Caudium est plus aisée. Un simple configure, avec éventuellement les options --with-pike=prefix-pike/bin/pike et/ou --prefix=, make, make install suffisent. Si vous obtenez des messages sur des supports absents, vous devrez recompiler Pike en installant les bibliothèques manquantes.
Démarrage
Une fois Pike et Caudium correctement installés, il ne reste plus qu'à les démarrer. Pour le premier démarrage, rendez-vous dans le répertoire prefix-caudium/caudium/server, et lancez le script install. Il vous sera posé quelques questions comme le port et le compte d'administration. Pour les démarrages ultérieurs, utilisez le script start du même répertoire.
Prise en main
Caudium offre de nombreux services : ftp, http, https, http2 (utilisation d'un cache pour les pages non-dynamiques), gopher, tetris[6] et une fonction de proxy pour les trois premiers protocoles. Voyons à présent la configuration d'un serveur HTTP classique.
Création d'un serveur Web
Rendez-vous sur l'interface de configuration de Caudium (CAI) (figure 1). Cliquez sur Virtual Server, puis New Virtual Server. Utilisez la configuration Generic Server. Elle inclut tous les modules de base : le support des .htacces, des CGI... Rentrez un nom pour votre serveur, par exemple Main HTTP Server. La première étape consiste à monter votre racine du système de fichiers. Pour cela, cliquez sur NONE/ mounted on /, puis sur Search Path et indiquez où se trouve votre racine (du Web) sur votre fs local (ex: /var/www). Maintenant, il faut configurer le port d'écoute de votre serveur. Remontez dans la hiérarchie de vos modules, cliquez sur Servers Variables, Listen Port, Configure a new port. Rentrez les valeurs 80 (ou autres si vous disposez d'un Apache existant), http (le protocole à utiliser ; vous pouvez utiliser http2), ANY (l'interface à écouter), et cliquez sur Use these values et enfin Save. Votre serveur Web est dès à présent utilisable. Voyons maintenant la partie la plus intéressante de Caudium : ses modules.
Les modules
Caudium est modulaire. Vous pouvez ajouter, retirer des modules à votre guise. Je décrirai dans cette section les modules de base inclus dans la configuration Generic Server, et quelques autres très pratiques. Pour ajouter un module, cliquez sur l'onglet Add a module tout en bas à gauche quand vous êtes à la racine de votre serveur (ex : Servers - Main HTTP Server).
CGI executable support
Pour activer le support des scripts, il est nécessaire d'indiquer le point de montage. Cliquez sur CGI executable support, Search path, indiquez ici la location des scripts (ex : /usr/lib/cgi-bin), de même pour le point de montage CGI-bin path, en général /cgi-bin. Si ce n'est déjà fait, cliquez sur l'onglet More Options tout en bas, cela donne un plus grand contrôle sur les modules.
.htaccess support
Les fichiers .htaccess permettent de restreindre l'accès à une partie d'un filesystem à certains utilisateurs ou groupes d'utilisateurs. Ces fichiers sont générés par le programme htpasswd joint avec Caudium. Il semble néanmoins que la syntaxe Caudium diffère de celle d'Apache. Voici un exemple utilisable :
AuthType Basic
AuthName ``Authentification requise"
AuthUserFile /var/www/mail/.htpasswd
<Limit PUT POST HEAD GET>
require user asyd
</Limit>
Graphics text
Ce module fournit les tags <gtext> </gtext> qui sont utilisés pour générer une image à partir du texte contenu entre les tags. La fonte du texte peut être True type si le support Freetype est présent. De même, les formats des images générées dépendent des bibliothèques présentes à la compilation.
Directory parsing module
Ce module si aucun fichier parmi ceux listés dans Index files n'est présent génère une page HTML contenant la liste des répertoires et des fichiers présents. Le fichier README (s'il existe) est inclus dans l'en-tête de la page.
User filesystem
Permet aux utilisateurs du système où Caudium tourne de rendre accessibles leurs pages du répertoire ~user/public_html/ via l'URL basehreh/~user/.
Caudium Photo Album
Permet de générer un album-photo à partir d'un répertoire. Ce dernier contiendra les images et éventuellement un fichier image.desc contenant la description.
Exemple : <album name="Mon bureau'' dir="/~asyd/images/bureau/">
SQL Module
Voici certainement un des modules les plus intéressants. Il permet d'exécuter une requête SQL et d'en utiliser le résultat, tout cela à l'intérieur de vos pages HTML. Les serveurs suivants sont supportés : postgres, mysql, oracle, sybase, odbc (unixodbc ou iodbc). Voir la section Exemple pour son utilisation.
Config_tablist
Fournit les tags <config_tablist>, <tab>, </config_tablist> utilisés pour générer des onglets, comme ceux de l'interface d'administration (figure 2).
Tablify
Génère une table HTML à partir des données fournies à l'intérieur des tags <tablify>, </tablify>. Exemple (figure 3):
<tablify nice cellseparator=,>
Logiciel, Version
Debian, Sid
Kernel, 2.4.7
Pike, 7.0.355
Caudium, 1.0.34</tablify>
Outlined box
Encadre par une ligne (couleur et taille configurable) le contenu des tags <obox>, </obox>. Voir section Exemple (figure 4).
Virtual host matcher
Utilisez ce module dans votre serveur principal. Vous pourrez ainsi disposer de plusieurs sites sur une seule IP (Virtual Hosting).
Core RXML Tags - Main RXML Parser
Ces deux modules fournissent les tags RXML (Roxen XML) de base.
Voilà quelques-uns des nombreux modules Caudium. Maintenant, voyons leur utilisation.
Les tags RXML
Tous les fichiers dont l'extension est présente dans Main RXML Parser - Extensions to parse seront lus par ce module, donnant ainsi accès à tous les tags RXML de base, et ceux fournis par les modules présents.
Les tags de test
On peut noter l'existence des tags de condition : if, then, else, elseif qui peuvent se révéler pratiques.
formoutput
Ce tag, un des plus importants à mes yeux, permet d'utiliser des variables dans votre code HTML. Celles-ci peuvent être définies de plusieurs manières : soit par le tag cset (voir exemple), soit suite à un appel par un formulaire, ou encore par l'appel d'une URL longue. Cependant, "l'astuce" réside dans le fait qu'il existe divers types d'encodage suivant l'utilisation de la variable. Par exemple : <formoutput quote=html>#var1#</formoutput> encodera le contenu de la variable var1 en respectant le standard HTML. Il existe un grand nombre de type : HTML, URL, None, MySQL, js... On peut faire en sorte d'utiliser plusieurs types d'encode à l'intérieur d'un même tag formoutput ; dans ce cas, on utilisera la syntaxe : #variable : quote=type#.
header
Envoie un header HTTP pour dire au navigateur du client de ne pas utiliser le cache sur cette page :
<header name="pragma'' value="no-cache">
insert
Insère le contenu d'un fichier qui sera lui aussi interprété. L'option nocache est disponible dans le cas d'une page dynamique.
random
En l'associant au tag cset, on assigne à une variable une valeur parmi une liste donnée.
smallcaps
Transforme en petites majuscules le contenu des tags.
Avoir de l'aide
Une première aide est généralement disponible via la CAI en cliquant sur le nom du module. Elle peut être également accessible via <tag help> ou par un simple fichier HTML qui contient le tag <help>. Cette dernière solution vous apportera toute l'aide sur les tags existants.
Exemple
J'ai débuté Caudium et le RXML en réalisant mon site personnel. En voici une partie des sources.
Fichier header.html
<cset preparse variable=background><random
>/~asyd/images/capricorn.jpg
/~asyd/images/fluorescence6.jpg
/~asyd/images/hiero.jpg</random></cset>
<head>
<formoutput>
<body background="#background : quote=none#">
</formoutput>
Ici j'assigne à la variable background une des 3 valeurs données et j'en fait mon image de fond ; cette variable n'a pas besoin d'un encodage (quote=none).
La fameuse barre de tabulation :
<config_tablist>
<tab href=/~asyd/index.html bgcolor=black>Accueil</tab>
....
<tab href=/~asyd/cv.html bgcolor=black>Curriculum Vitae</tab>
</config_tablist>
Utilisation d'une image du répertoire prefix-caudium/caudium/server/caudium-images/ :
<img src="internal-caudium-power-small-blue"> pour le fichier power-small-blue.gif.
Fichier index.html
<insert nocache file="header.html">
Inclure le fichier header.html à chaque appel de ce fichier sans utilisation d'un cache (nécessaire pour avoir l'image de fond aléatoire).
<sqloutput host="mysql://asyd@localhost/asyd'' query="SELECT title, news FROM news``>
<obox width=400 align=center outlinewidth=1 outlinecolor="##886600``>
<title><smallcaps size=4 small=2>#title#</smallcaps></title>
#news#
</obox>
<br>
</sqloutput>
Le code entre les tags sqloutput sera exécuté pour chaque résultat de la requête SQL sur la table asyd. Ainsi, je forme une boîte (obox). Le titre en petites majuscules (smallcaps) est le champ #title#, le contenu #news#. Notez le doublage du # pour une utilisation en tant que caractère.
<insert file="footer.html">
On peut utiliser le cache car ce fichier ne contient pas de code dynamique.
Un mot pour finir
Voilà, je pense vous avoir donné toutes les clés pour bien débuter sous Caudium. Comme vous pouvez le constater, il est relativement aisé de faire des sites dynamiques, beaux de surcroît, sans s'arracher les cheveux ! J'espère vous avoir convaincu que Caudium n'est pas seulement un gadget, mais est une vraie alternative à Apache/PHP, même au niveau performance.
Quelques sites qui tournent sous Caudium (et non des moindres) : gcu-squad[7], le webmail de ISDNet[8]…
J'en profite pour signaler l'existence d'un module webmail (seul l'IMAP est supporté actuellement) : Camas[9] (figure 5).
Références
http://www.caudium.net
[1] http://www.roxen.net http://www.caudium.net/faqs/fork.html
[2] http://www.roxen.com/
[3] http://pike.roxen.com/
[4] ftp://ftp1.sourceforge.net/pub/sourceforge/caudium/caudium-1.0.34.tar.gz
[5] http://www.gingerall.com/perl/rd?url=sablot/Sablot-0.65.tar.gz
[6] http://www.aleph1.net:81/
[7] http://www.gcu-squad.org/
[8] http://webmail.isdnet.net/
[9] http://camas.caudium.net/
Bruno Bonfils - <asyd@debian-fr.org>, <asyd@zshfr.org>