Le Guide d'installation d'Apache
URL de référence : http://www.apachefrance.com/Articles/1/
Préambule
Après avoir acquis ses premières lettres de noblesse
avec des sites au contenu statique, le Web a depuis quelques temps amorcé
un virage afin de rendre la consultation de l'information plus "adaptable"
aux desiderata de tout un chacun.
Les évolutions ont dans un premier temps été apportées
du côté client, tout d'abord en donnant à l'internaute
le moyen d'agir via des formulaires, puis par des scripts écrits dans
un langage adapté. Netscape venait de créer Javascript. Microsoft
proposera plus tard VBScript avec une syntaxe quasi-identique à Visual
Basic.
Les limitations sont vite apparues (accès aux fichiers, interactions
avec des bases de données) et d'autres pistes ont été étudiées.
L'idée qui émergea fut ainsi de déplacer le travail d'interactivité
vers le serveur Web : la notion de scripts exécutés côté
serveur (server-side scripting) était née et ouvrait grand les
portes du Web dynamique.
Le concept général est d'intégrer au sein d'une page statique
des éléments de code écrits dans un langage spécifique,
et qui vont être interprétés par un module installé
sur le serveur Web. Le résultat de cette interprétation est généralement
du HTML, qui est inséré par le serveur Web en lieu et place des
zones de code au moment où la page est envoyée vers le navigateur
de l'internaute.
Actuellement, plusieurs grands plates-formes destinées à fournir
du contenu dynamique existent sur le marché. Elles sont globalement constituées
de trois composants : le serveur HTTP, le module d'interprétation de
scripts et la base de données. Voici une liste non-exhaustive des différents
composants existants :
Pour les serveurs HTTP, les plus utilisés sont Apache (auquel
ce site est en grande partie dédié) et Internet Information Server
de Microsoft,
Pour les modules d'interprétation de scripts, PHP, Active Server
Pages de Microsoft et ColdFusion de Allaire,
Pour les bases de données, MySQL et PostgreSQL, SQL Server de
Microsoft et Oracle.
La plate-forme pour les sites dynamiques la plus en vogue du moment (car elle
utilise uniquement des logiciels libres) est constituée de Apache / PHP
/ MySQL, tournant sur Linux.
Le présent guide a donc pour objectif de présenter une
manière d'installer et configurer cette plate-forme comme support pour
des sites Web dynamiques, que ce soit pour un Intranet ou un site Internet.
Nous étudierons tout d'abord l'installation des librairies MM, Freetype,
GD et PDF, dédiées respectivement à la gestion de la mémoire partagée, la génération
de caractères True Type, d'images et de fichiers PDF. Puis nous passerons
à l'installation et à la configuration de MySQL. L'étape
suivante consistera en la mise en oeuvre d'Apache, et nous finirons par l'intégration
du module PHP à Apache.
Avant toute chose, il faut vous procurer l'ensemble des sources nécessaires.
Vous les trouverez dans la section Téléchargement,
dans la rubrique Apache / PHP /MySQL. Vous pouvez charger l'ensemble
des fichiers du tableau. Après les avoir chargées, placez-les
dans un répertoire temporaire dans votre arborescence (par exemple /tmp/apa_inst).
Passez également sous le profil root afin d'avoir les droits nécessaires.
Nous allons maintenant commencer le déploiement par l'installation des
librairies MM, Freetype, GD et PDF.
Installation des librairies
Nous vous proposons d'installer quatre librairies sur votre
système Linux afin d'enrichir PHP de fonctionnalités supplémentaires
: la gestion de la mémoire partagée (shared memory), la génération
d'images (aux formats JPG et PNG, ce dernier remplaçant GIF pour des
questions de droits d'auteur), la génération de textes utilisant
des polices True Type et enfin la génération de fichiers PDF.
MM
MM est une librairie qui permet une utilisation simplifiée
de la mémoire partagée (ou shared memory) utilisée lors
de la communication inter-processus (ou IPC, Inter Processus Communication)
sur les plates-formes de type Unix. La raison pour laquelle il est intéressant
d'installer cette librairie sur votre système est lors de l'utilisation
des sessions avec PHP 4. En effet, Tobias Ratschiller, dans son article sur
la gestion des sessions (l'article ici) recommende la librairie MM : "si
vous souhaitez des performances élevées, le module mm est une
alternative très intéressante, car il permet le stockage des données
de session en mémoire partagée (NDR : plutôt que dans un
fichier) et n'est donc pas limité par les perfornances du sous-système
disque".
Pour installer MM, décompactez les sources :
# tar xvfz mm-1.1.3.tar.gz
Rendez-vous dans le répertoire qui vient d'être créé :
# cd mm-1.1.3
Préparez la configuration, compilez la librairie et installez-là
:
# ./configure --prefix=/usr/local
# make
# make install
FreeType
La librairie Freetype
apporte à Linux le support des polices True Type de Windows. Le premier
champ d'application possible est leur utilisation sous X-Window. L'autre possibilité,
relayée par la librairie GD, est la génération d'images
comportant un texte utilisant des polices True Type.
Pour installer cette librairie, décompactez tout d'abord les sources
:
# tar xvfz freetype-2.0.5.tar.gz
Rendez-vous dans le répertoire qui vient d'être créé
:
# cd freetype-2.0.5
Préparez la configuration :
# make setup
Par défaut, les composants de la librairie vont être placés
dans des sous-répertoires du dossier /usr/local. Vous pouvez changer
cela, par exemple installer dans /usr, en tapant à la place :
# make setup CFG="--prefix=/usr"
Ceci fait, lancez la compilation et l'installation :
# make
# make install
La librairie FreeType est une librairie dynamique, c'est-à-dire qu'elle
est indépendante des applications qui l'utilisent (son code n'est pas
intégré aux applications) et n'a besoin d'exister qu'une seule
fois en mémoire. Une librairie dynamique est comparable aux DLLs de Windows.
Pour la mettre à disposition du système, il faut reconstruire
la liste des librairies dynamiques par la commande suivante :
# ldconfig
Validez ensuite l'écriture des données en mémoire tampon
sur le disque par la commande sync. Sans cela, le cache des librairies
dynamiques n'est pas mis convenablement à jour. Pour vérifier
la disponibilité effective de Free Type, tapez la commande suivante :
# ldconfig -v | grep freetype
Le résultat devrait être libfreetype.so.6 -> libfreetype.so.6.1.0.
GD
Pour ajouter le support de la génération dynamique
d'images à PHP, nous allons utiliser la librairie GD.
La dernière version stable est la 1.8.4 mais celle-ci ne fonctionne pas
correctement avec FreeType du fait qu'elle ne supporte par les polices True
Type de type 2. Il est donc nécesaire d'utiliser la version 2.0.1 qui,
bien qu'au stade de bêta, ne devrait pas poser de problèmes particuliers.
Ajoutons qu'afin de compiler cette librairie sans souci, il est nécessaire
que les librairies libpng,
libjpeg-6b et zlib
soient préalablement installées. Pour ajouter le support du format
TIFF dans PHP, je vous recommande si ce n'est déjà fait d'installer
libtiff. Si vous rencontrez
un quelconque problème, n'hésitez pas à poster un message
dans le forum.
Passons maintenant à l'installation de la librairie. Décompactez
les sources et rendez-vous dans le répertoire créé :
# tar xvfz gd-2.0.1.tar.gz
# cd gd-2.0.1
GD dans sa version 2.0.1 va chercher par défaut à utiliser la
librairie FreeType donc aucune configuration n'est nécessaire de ce côté.
Il est par contre nécessaire d'ajuster le chemin de recherche des fichiers
d'en-tête (.h). Pour cela, éditer le fichier Makefile, recherchez
la ligne commençant par INCLUDEDIRS et modifiez -I/usr/include/freetype2
en -I/usr/local/include/freetype2. Il faut ensuite modifier l'emplacement
d'installation de la librairie. Pour cela, rechercher la ligne INSTALL_LIB
et modifiez le répertoire /usr/lib vers /usr/local/lib.
Faites de même pour la ligne INSTALL_INCLUDE et changez la valeur
vers /usr/local/include.
Vous pouvez maintenant lancer la compilation et l'installation :
# make install
Comme pour FreeType, vous devez mettre à jour la base des librairies
dynamiques :
# ldconfig
# sync
Vérifiez la prise en compte de GD :
# ldconfig -v | grep gd
Vous devriez voir apparaître libgd.so.2.0.0 -> libgd.so.2.0.0
dans le résultat de la commande.
PDFLib
La librairie PDFLib
permet à PHP de générer des fichiers PDF à la volée.
Il est dès lors possible de proposer aux visiteurs du site de sauvegarder
un article ou le résultat d'une requête sous la forme d'un document
PDF et donc de profiter des avantages qu'offre ce format.
Décompactez les sources et placez-vous dans le répertoire de travail
:
# tar xvfz pdflib-4.0.1.tar.gz
# cd pdflib-4.0.1
Lancez la configuration en fonction de votre plate-forme, puis la compilation
:
# ./configure
# make
Enfin, passez à l'installation :
# make install
Comme FreeType, la librairie et ses composants seront placés dans des
sous-répertoires de /usr/local.
Il faut enfin mettre à jour la base des librairies dynamiques comme pour
les deux librairies précédentes :
# ldconfig
# sync
MySQL
Le Système de Gestion de Bases de Données Relationnelles
(SGBDR) MySQL doit sa popularité
à plusieurs facteurs. Tout d'abord son ouverture sur le monde du logiciel
libre, mais également sa simplicité et sa rapidité qui
lui ont valu d'être le moteur de bases de données de choix dans
les sites Web dynamiques.
En effet, MySQL offre des performances incroyables lors de la consultation de
données, ce qui est un critère primordial. A contrario, il n'est
que peu adapté pour des applications transactionnelles classiques (Online
Transaction Processing, OLTP), le verrouillage lors d'un ajout ou d'une modification
se faisant au niveau de la table toute entière. Ajoutons également
qu'il ne gère pas les clés étrangères. Ces lacunes
n'ont toutefois que peu d'impact dans le cadre d'un site d'information où
quelques webmestres ajoutent ponctuellement des news ou des articles.
Désormais libre d'utilisation, MySQL évolue régulièrement
et une nouvelle version dénommée MySQL-Max a vu le jour.
Celle-ci apporte un meilleur support des transactions et élargit de ce
fait le champ d'action de ce moteur aux qualités certaines. Le principal
concurrent de MySQL dans le monde du logiciel libre est PostgreSQL.
Ce SGBDR a une vocation de base plus généraliste que MySQL et
se veut donc plus complet. Ainsi, et entre autres, les clés étrangères
sont supportées et la gestion des verrous est plus souple. Par contre,
il n'est pas censé offrir la même rapidité en consultation
que son concurrent. A ce sujet, je vous renvoie vers deux articles (en Anglais)
où les deux moteurs sont comparés : MySQL
and PostgreSQL Compared et Database
Software Comparison.
Passons maintenant à l'installation de MySQL.
Tout d'abord, dans un souci de sécurité (surtout si votre serveur
est sur Internet), il est préférable de faire tourner le moteur
MySQL sous le profil d'un utilisateur avec des droits limités plutôt
que root. Ainsi, dans l'hypothèse où un pirate pourrait
exploiter une brèche de sécurité de MySQL, son champ d'action
serait limité aux droits conférés à l'utilisateur
fictif.
Tapez les commandes suivantes afin de créer un groupe mysql et
un utilisateur mysql :
# groupadd mysql
# useradd -g mysql mysql
Le choix du nom du groupe et de l'utilisateur restent à votre discrétion.
Ainsi, si vous préférez mygrp et myusr, la commande
à taper sera :
# groupadd mygrp
# useradd -g mygrp myusr
Remarque : sur une Slackware 8.0, même si le package MySQL n'a pas été installé, l'utilisateur mysql et le groupe mysql existent déjà. Cela ne pose pas de problème, mais dans le fichier /etc/passwd, dans la ligne correspondant à mysql, il faut remplacer /var/lib/mysql par /usr/local/mysql.
Ceci fait, décompactez les sources de MySQL et placez-vous dans le répertoire
de travail :
# tar xvfz mysql-3.23.43.tar.gz
# cd mysql-3.23.43
Les possibilités de préconfiguration de MySQL sont vastes. Nous
allons donc vous en présenter certaines qui devraient vous permettre
de déterminer lesquelles utiliser en fonction de vos besoins.
--prefix=répertoire : répertoire sera le répertoire
principal de MySQL, les composants seront placés dans des sous-répertoires
(bin, share, etc.).
--localstatedir=répertoire : les bases de données et les
journaux (logs) seront placés dans le répertoire répertoire
(sur un disque de données séparé par exemple).
--without-debug : MySQL ne sera pas compilé pour produire des
informations de débogage. Cette option est à sélectionner
pour un serveur de production.
--enable-assembler : lors de la compilation, des fonctions de manipulation
de chaînes de caractères en assembleur seront utilisées.
--with-client-ldflags=-all-static : les outils client de MySQL (mysql,
mysqladmin) seront compilés de façon à ne pas utiliser
les librairies dynamiques. Les binaires générés seront
plus gros, mais les applications seront plus rapides.
--with-mysqld-ldflags=-all-static : le moteur MySQL (mysqld) sera compilé
de façon à ne pas utiliser les librairies dynamiques. Le binaire
généré sera plus gros, mais l'application sera plus rapide.
--disable-shared : seules les versions statiques des librairies de MySQL
seront générées.
Nous proposons de faire la préconfiguration avec la commande suivante
:
# ./configure \
--prefix=/usr/local/mysql-3.23.43 \
--localstatedir=/data/mysql \
--without-debug \
--enable-assembler \
--with-mysqld-ldflags=-all-static
N.B. : les backslashes en fin de ligne permettent, en tapant sur la touche
"Entrée", de continuer la saisie de la commande à la ligne suivante
et non pas de la valider.
Lancez ensuite la compilation puis l'installation par les commandes suivantes
:
# make
# make install
Pour plus de simplicité ultérieurement, nous vous suggérons
de créer un lien symbolique nommé mysql vers le répertoire
d'installation de MySQL :
# ln -s /usr/local/mysql-3.23.43 /usr/local/mysql
Ainsi, toute référence à la version de MySQL est occultée,
ce qui est plus souple et plus évolutif.
Les outils MySQL utilisant les librairies dynamiques, il est nécessaire
de configurer le gestionnaire de librairies dynamiques afin qu'il connaisse
l'emplacement de ces librairies.
Pour ce faire, tapez la commande suivante :
# echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf
Procédez ensuite à la mise à jour du cache des librairies
:
# ldconfig
# sync
La vérification du bon paramétrage se fera par la commande suivante
:
# ldconfig -v | grep mysql
Le résultat devant être :
/usr/local/mysql/lib/mysql:
libmysqlclient.so.10 -> libmysqlclient.so.10.0.0
L'étape suivante consiste à créer les tables système
(utile uniquement si MySQL n'a jamais été installé) :
# scripts/mysql_install_db
Lancez les commandes suivantes pour donner les droits sur répertoires
de MySQL aux utilisateurs fictifs créés précédemment
:
# chown -R root /usr/local/mysql/
# chown -R mysql /data/mysql
# chgrp -R mysql /usr/local/mysql/
# chgrp -R mysql /data/mysql
Le "/" à la fin des commandes portant sur le répertoire
/usr/local/mysql est important car il permet que le traitement s'opère
sur le répertoire pointé par le lien mysql et non le lien
lui-même.
Copiez ensuite le fichier de configuration à sa place :
# cp support-files/my-medium.cnf /etc/my.cnf
Si vous disposez de 512 Mo à 1 Go de mémoire, utilisez le fichier
my-large.cnf. Si vous disposez de plus d'1 Go de mémoire, utilisez le
fichier my-huge.cnf.
Editez le fichier /etc/my.cnf et ajoutez la ligne suivante dans la section [mysqld]
: user = mysql
Ceci permet de spécifier au démon MySQL de tourner avec les droits
de l'utilisateur mysql sans avoir à le spécifier sur la
ligne de commande.
Une astuce pour gagner en performance : utilisez la commande Unix strip
qui retire d'un binaire les symboles utilisés lors de l'édition
de lien. Le plus utile est de l'exécuter sur mysqld, le démon
MySQL :
# strip /usr/local/mysql/libexec/mysqld
Vous pouvez enfin démarrer le démon MySQL par la commande suivante
:
# /usr/local/mysql/bin/safe_mysqld &
Si tout fonctionne bien, MySQL devrait démarrer et vous afficher un message
indiquant le répertoire utilisé pour stocker les données
(/data/mysql dans notre cas). Pour vérfier si le démon mysqld
tourne, utiliser la commande suivante :
# ps | grep mysql
Le résultat devrait ressembler à ceci : 13653 pts/0 00:00:00 safe_mysqld
Vous pouvez également lancer quelques commandes de test :
# /usr/local/mysql/bin/mysqladmin version
# /usr/local/mysql/bin/mysqladmin variables
# /usr/local/mysql/bin/mysqlshow
# /usr/local/mysql/bin/mysqlshow mysql
# /usr/local/mysql/bin/mysql -e "select host,db,user from db"
mysql
Lors de son exécution, le script mysql_install_db vous suggère
vivement de saisir un mot de passe pour l'utilisateur root de MySQL.
Cet utilisateur dispose de tous les privilèges sur les tables systèmes
donc ce conseil est bon à suivre.
Vous pouvez le faire par les commandes suivantes :
# /usr/local/mysql/bin/mysqladmin -u root password 'lenouveaumotdepasse'
Pour que le démon MySQL démarre et s'arrête automatiquement,
vous pouvez utiliser le fichier mysq.server.
Attention, la méthode suivante s'applique à une distribution Slackware.
Copiez-le dans le répertoire contenant les scripts de démarrage
:
# cp support-files/mysql.server /etc/rc.d
Appliquez des droits en exécution :
# chmod 755 /etc/rc.d/mysql.server
Editez le fichier rc.local et ajoutez les lignes suivantes :
# Demarrage MySQL.
if [ -x /etc/rc.d/mysql.server ]; then
. /etc/rc.d/mysql.server start
fi
Apache
Le serveur HTTP Apache
jouit d'une notoriété indiscutable dans le monde d'Internet. D'après
la société Netcraft,
qui étudie chaque mois les "parts de marché" des différents
type de serveurs Web, Apache domine largement ses concurrents avec une utilisation
sur plus de 60% des serveurs HTTP publics dans le monde. Ce succès est
non seulement dû à sa gratuité, mais également à
sa robustesse et à son extensibilité. Apache est également
une plate-forme de choix pour un intranet, et est très répandu
dans les universités et les écoles.
Actuellement en version 1.3.22, Apache connaît des développements
réguliers. Les plus grandes évolutions devraient venir de la version
2.0 (actuellement en bêta) qui apporte entre autres un support très
poussé des processus légers (threads) pour une meilleure efficacité
d'ensemble.
Pour installer Apache, décompactez tout d'abord les sources et placez-vous
dans le répertoire nouvellement créé :
# tar xvfz apache_1.3.22.tar.gz
# cd apache_1.3.22
Tout comme MySQL, Apache accepte un nombre conséquent de paramètres
lors de sa préconfiguration. Voici un exemple de commande, vous trouverez
le détail de ses paramètres ci-après :
# ./configure \
--prefix=/usr/local/apache-1.3.22 \
--htdocsdir=/data/www/html \
--cgidir=/data/www/cgi-bin \
--enable-module=rewrite \
--enable-shared=max
N.B. : les backslashes en fin de ligne permettent, en tapant sur la touche "Entrée",
de continuer la saisie de la commande à la ligne suivante et non pas
de la valider.
Quelques explications sur les options :
Tout d'abord, --prefix=/usr/local/apache-1.3.22 indique que l'ensemble
des composants d'Apache (binaires, modules, fichiers de configuration, etc.)
seront placés dans le répertoire /usr/local/apache-1.3.22 ou ses
sous-répertoires (bin, conf, libexec, etc.). Si vous souhaitez installer
Apache dans un autre endroit de votre arborescence, il suffit de jouer sur ce
paramètre.
Les paramètres --htdocsdir et --cgidir permettent de spécifier
des répertoires où les pages HTML et les programmes CGI seront
stockés. Pour info, si vous souhaitez placer les fichiers de configuration dans un endroit précis, vous pouvez spécifier le paramètre --sysconfdir=répertoire, comme par exemple --sysconfdir=/etc/apache-conf pour placer les fichiers de configuration dans le répertoire /etc/apache-conf.
Ensuite, --enable-module=rewrite spécifie d'ajouter le module
permettant la réécriture automatique d'URL (il n'est pas disponible
par défaut). Les modules de bases sont normalement suffisants et ne nécessitent
pas de librairies complémentaires. Vous pouvez choisir l'option --enable-module=all,
ainsi l'ensemble des modules complémentaires (authentification, redirection,
etc.) vont être compilés et seront actifs, c'est-à-dire
prêt à être chargés au besoin par Apache pour utiliser
leurs fonctions. Pour avoir l'ensemble des fonctionnalités, on préfèrera
en général l'option --enable-module=most qui ajoute et
active tous les modules sauf les suivants : auth_db (car tous les systèmes
n'ont pas la librairie db), mmap_static (toutes les systèmes n'ont pas accès
à la fonction mmap() - de plus ce module est considéré comme expérimental),
so (pas de gestion dynamique des modules - voir un peu plus bas), example (utile
uniquement aux développeurs de modules), auth_digest (car ce module peut
entraîner des conflits avec le module digest - de plus il est considéré
expérimental), log_agent et log_referer (qui sont obsolètes, leurs
fonctionnalités ont été intégrées dans le
module log_config).
Le paramètre --disable-module permet de spécifier certains
modules optionnels fournis avec les sources d'Apache à ne pas compiler
(et donc indisponibles). Par exemple, si vous spécifiez --enable-module=all,
il vaut mieux malgré tout désactiver certains modules. Ainsi,
ajouter les options
--disable-module=mmap_static \
--disable-module=auth_digest \
--disable-module=example \
spécifie de ne pas utiliser les modules mod_mmap_static, mod_auth_digest
et mod_example.
La dernière option est certainement la plus intéressante car elle
indique au configurateur que l'on souhaite utiliser les modules dynamiques.
En effet, tout comme le noyau de Linux est capable d'utiliser des modules qui
ne sont chargés que si besoin est, Apache est capable d'utiliser un mécanisme
similaire.
Les avantages sont doubles. Tout d'abord, Apache ne charge en mémoire
que les modules dont il a besoin à un instant précis, et cela
libère donc la mémoire centrale du serveur pour d'autres tâches.
Ensuite, on dispose d'une plus grande souplesse. Installer un nouveau module
ne nécessite que la compilation du dit module et ne nécessite
donc plus les sources d'Apache. De plus, une mise à jour de version de
PHP est bien plus aisée puisqu'il suffit de recompiler la nouvelle version
sous forme de module et ne nécessite donc pas d'interruption du serveur
HTTP. La légère contrepartie par rapport à une intégration
des composants au sein d'Apache est une légère augmentation de
la charge du serveur dû à la nécessite de gérer les
chargements / déchargements des modules en mémoire.
Si vous souhaitez disposer d'un bon compromis entre performance et maintenance
aisée, vous pouvez intégrer les modules fournis avec Apache (donc
dépendants de la version d'Apache) dans l'exécutable. Pour cela,
il suffit de ne pas spécifier l'option --enable-shared=max. Par
contre, les modules tiers (et donc indépendants de la version d'Apache)
tels que PHP, mod_gzip, etc. peuvent être gérés comme modules
dynamiques via apxs.
Vous pouvez maintenant lancer la compilation et l'installation :
# make
# make install
Tout comme nous l'avons fait pour MySQL, nous vons conseillons de créer
un lien symbolique apache vers le répertoire d'installation (apache-1.3.22)
:
# ln -s /usr/local/apache-1.3.22 /usr/local/apache
Vous pouvez maintenant démarrer Apache :
# /usr/local/apache/bin/apachectl start
Pour vérifier que l'installation est correcte, ouvrez votre navigateur
et tapez simplement l'adresse IP (ou le nom si vous avez un DNS) de la machine
sur laquelle vous venez d'installer Apache. La page suivante devrait apparaître
:
Pour qu'Apache démarre automatiquement, ajoutez les lignes suivantes
au fichier /etc/rc.local (valable sur Linux Slackware) :
# Demarrage Apache
if [ -x /usr/local/apache/bin/apachectl ]; then
. /usr/local/apache/bin/apachectl start
fi
L'étape suivante va consister à modifier le fichier de configuration
d'Apache afin de l'adapter à nos besoins. Celui-ci se trouve dans le
sous-répertoire conf et se nomme httpd.conf. Plutôt
que d'en détailler chaque ligne, nous allons vous en présenter
les options (ou directives) importantes, ainsi que quelques propositions de
modification.
Le fichier httpd.conf comporte trois grandes sections que nous allons maintenant
décrire.
Première section : Global Environment
Cette section comprend des paramètres qui décrivent
le fonctionnement global d'Apache comme par exemple le nombre de requêtes
concurrentes qu'il peut accepter. Voici les plus importants :
ServerType standalone
Cette option décrit le mode d'exécution d'Apache.
Les valeurs possibles sont inetd ou standalone (autonome), ce dernier étant
choisi par défaut.
Rappelons que le démon inetd (appelé également le "super-serveur
Internet") est en quelque sorte un superviseur. Il attend des connexions
sur un certain nombre de ports (21 pour FTP, 23 pour Telnet, etc.) et lors d'une
demande de connexion sur un port particulier, il démarre une application
(ou démon) spécifique apte à fournir les services qu'attend
la machine appelante. Cette application terminée, inetd continue l'écoute
sur le port. L'intérêt d'inetd est donc de limiter la charge du
système en ne démarrant un démon qu'à la demande.
En mode autonome, le démon Apache est en permanence présent en
mémoire, qu'il y ait ou non des requêtes. Ce mode est préféré
car plus performant : lors d'une requête, Apache répond instantanément.
A l'opposé, en mode inetd, un temps de latence inhérent à
l'activation du démon est constaté et pénalise lourdement
la performance d'un serveur très sollicité. Nous vous conseillons
de conserver le paramètre standalone.
ServerRoot "/usr/local/apache-1.3.22"
Cette option spécifie le répertoire principal
d'Apache. Les composants sont placés dans des sous-répertoires
: bin pour les programmes, conf pour les fichiers de configuration, logs pour
les journaux d'accès ou d'erreur, libexec pour les modules dynamiques,
man pour les pages de manuel, etc. Cette option prend comme valeur celle spécifiée
pour le paramètre "--prefix" lors de la préconfiguration.
LoadModule nommodule_module libexec/nommodule.so
ClearModuleList
AddModule nommodule.c
Ces paramètres permettent l'utilisation des modules
dynamiques (ou Dynamic Shared Objects, DSO). L'ordre dans lequel ils sont spécifiés
est très important et il ne faut donc pas le modifier.
Si vous souhaitez ajouter un nouveau module à Apache et que vous le compilez
pour qu'il soit dynamique, il faudra ajouter les paramètres "LoadModule"
et "AddModule" correspondants. Prenons par exemple un module mod_toto
: vous devrez ajouter la ligne "LoadModule mod_toto_module libexec/mod_toto.so"
avant "ClearModuleList" et ajouter une ligne "AddModule mod_toto.c"
juste après la dernière ligne "AddModule ...".
Actuellement, la plupart des modules tiers sont fournis sous la forme d'un fichier
source (mod_toto.c par exemple). Pour l'installer simplement, utilisez la commande
apxs disponible dans le répertoire bin de Apache :
# /usr/local/apache/bin/apxs -c -i -a mod_toto.c
Le module va ête compilé (-c), installé dans le bon répertoire
(-i) et activé (-a). Cette dernière option correspond à
l'ajout des lignes "LoadModule" et "AddModule" adéquates
dans le fichier httpd.conf.
Deuxième section : 'Main' server configuration
Cette section décrit l'ensemble des paramètres
utilisés par le serveur par défaut, c'est-à-dire celui
qui répond aux requêtes qui ne sont pas adressées à
un hôte virtuel. Si vous souhaitez héberger plusieurs sites distincts
sur un seul serveur, vous aurez besoin des hôtes virtuels. Nous les détaillerons
lors de la présentation de la troisième section, qui leur est
consacrée. Si vous n'hébergez qu'un seul site, seule cette rubrique
est importante. Nous ajouterons également que l'ensemble des options
de configuration du serveur principal peuvent être reprises dans la configuration
d'un hôte virtuel.
Port 80
Cette option spécifie le port sur lequel le serveur
Apache attend des requêtes. 80 est la valeur par défaut et correspond
à la valeur attribuée au service www par les instances
de normalisation (RFC 1700).
A noter que comme pour tout port inférieur à 1024, un programme
devant utiliser le port 80 doit être lancé avec les droits de root.
Si vous n'avez pas les droits d'administration sur la machine, utilisez une
valeur supérieure, par exemple 8080.
User nobody
Group nobody
Les directives User et Group permettent de spécifier
un utilisateur et un groupe fictif qui détermineront les droits d'accès
du serveur Apache, le but étant de limiter les risques en cas d'intrusion
par un pirate. Nous sommes donc ici dans le même cas de figure que celui
présenté précédemment avec MySQL.
Cependant, et comme nous l'avons évoqué ci-dessus, il n'est pas
possible d'utiliser le port 80 si Apache ne tourne pas avec les droits root.
La subtilité réside dans le mécanisme de fonctionnement
client/serveur d'Apache. Un processus père, tournant avec les droits
root, attend des connexions sur le port 80. Lorsqu'une demande de connexion
arrive, le processus père crée un processus fils (tournant avec
les droits nobody) qui va être chargé de satisfaire les demandes
du client venant de se connecter. C'est donc un processus ayant des droits restreints
qui lit les fichiers (HTML, PHP, etc.) et les envoie au navigateur de l'internaute.
Une règle doit donc être observée : les fichiers constituant
votre site doivent être accessibles en lecture à l'utilisateur
et/ou au groupe nobody. Assurez-vous que les nouveaux fichiers que vous copiez
sont soit en lecture pour tout le monde (chmod a+r fichier.html), soit appartiennent
à l'utilisateur nobody (chown nobody fichier.html) ou au groupe nobody
(chgrp nobody fichier.html).
Pour des raisons obscures, la version 1.3.22 définit comme groupe par défaut "#-1". Si vous avez le moindre souci, remplacez-le par nobody.
ServerAdmin webmaster@asgard.local
La directive ServerAdmin permet simplement de définir
une adresse email qui sera affichée sur les pages générées
par Apache (pages d'erreur, présentation de répertoire, etc.)
#ServerName thor.asgard.local
Cette directive permet de forcer un nom d'hôte qui sera
renvoyé au navigateur client, par exemple www plutôt que
le nom d'hôte réel.
Attention toutefois, vous ne pouvez pas spécifier n'importe quel nom,
celui que vous avez choisi devra être défini dans le DNS local.
Si ce n'est pas le cas, il faudra y accéder par son adresse IP.
Si vous laissez la ligne commentée (avec la # devant), le serveur répondra
avec le nom que vous avez tapé dans votre navigateur.
Dans un premier temps, laissez cette ligne commentée.
DocumentRoot "/data/www/html"
Cette option permet de spécifier dans quel répertoire
sont stockées les pages présentes à la racine du site (par
exemple http://nomserveur/test.html).
Ne changez pas cette option pour l'instant.
<Directory "/data/www/html">...</Directory>
Ces directives délimitent une liste d'options qui va
s'appliquer à un répertoire spécifique.
La directive "Options" va déterminer les comportements généraux
du répertoire.
La directive "AllowOverride" permet de spécifier si certaines
options définies par la directive Options vont pouvoir être surchargées
par l'utilisation d'un fichier d'accès (voir AccessFileName ci-dessous).
Les directives "Allow from" et "Order" déterminent
qui a accès aux fichiers contenus dans ce répertoire, et dans
quel ordre les autorisations sont gérées : d'abord les exclusions
ou d'abord les autorisations.
<IfModule mod_userdir.c>...</IfModule>
Ces directives délimitent une liste d'options à
n'appliquer que si le nom de module spécifié (mod_userdir dans
ce cas) a été activé au niveau de la première section
par les directives LoadModule et AddModule.
UserDir public_html
Dans le cas où le module mod_userdir est chargé,
cette option permet de spécifier un nom de répertoire qui, s'il
existe dans le répertoire de base (home directory) d'un utilisateur local
du serveur Apache, va lui permettre d'y stocker des pages. Pour y accèder,
il suffira de saisir comme URL http://nomserveur/~nomutilisateur/.
Attention, le serveur Apache ayant les droits de l'utilisateur nobody,
le répertoire de base ainsi que le répertoire pour les pages des
utilisateurs devront lui être accessibles. Pour ce faire, donnez leur
les droits en lecture et en parcours :
# chmod 755 ~nomutilisateur
# chmod 755 ~/public_html
Puis donnez les droits en lecture aux fichiers contenus dans le répertoire
public_html :
# chmod -R 755 ~/public_html/*
Si vous ne souhaitez pas utiliser cette fonctionnalité, commentez les
lignes LoadModule et AddModule correspondantes dans la première
section du fichier httpd.conf.
DirectoryIndex index.html
Si le module mod_dir est chargé (voir IfModule
ci-dessus), cette directive permet de spécifier des noms de fichiers
qu'Apache va considérer comme noms de page par défaut. Ceci permet
de taper une URL sans spécifier un nom de fichier supplémentaire
(http://nomachine/test/ plutôt que http://nomachine/test/index.html).
Les noms doivent être séparés par des espaces, et l'ordre
dans lequel ils sont saisis conditionne la priorité dans le cas où
deux fichiers "par défaut" sont présents au même
endroit.
Attention ! Lorsqu'aucun nom de fichier n'est fourni, Apache balaye l'ensemble
des fichiers du répertoire pour déterminer l'existence ou non
de pages "par défaut". Donc dans un souci de performance, ne
saisissez pas une liste trop longue.
Vous pouvez ajouter index.php devant index.html.
AccessFileName .htaccess
Cette directive permet de spécifier le nom d'un fichier
qui, s'il est présent dans un répertoire, va permettre de spécifier
des règles de sécurité pour l'accès aux autres pages
de ce répertoire. C'est la présence d'un tel fichier qui fait
qu'une fenêtre vous demandant votre login et votre mot de passe vous est
présentée. Un tel fichier est utile, par exemple, pour protéger
un répertoire contenant les pages d'administration de votre site.
Le fichier d'accès permet également de "surcharger"
certaines options définies dans le fichier httpd.conf, c'est-à-dire
demander un comportement différent et spécifique pour un répertoire.
Cela est intéressant si votre site est hébergé et que vous
n'avez pas donc pas la possibilité de jouer sur la configuration de Apache.
A noter que ce fichier permet également de spécifier certains
options pour PHP.
Le choix ou non d'utiliser les fonctionnalités apportées par ce
fichier n'est pas évident. La problèmatique reste celle du bon
équilibre souplesse/performance. Si l'option AccessFileName existe, chaque
fois qu'Apache ouvrira un répertoire à la recherche d'un fichier,
il cherchera un fichier du nom de ce qui a été spécifié
lors de la configuration. Cela ajoute donc une opération et a donc un
impact certain sur les performances. Par contre, on dispose de fonctionnalités
appréciables. Au contraire, si cette ligne est commentée (symbole
# au début de la ligne), Apache n'effectuera pas la recherche d'un fichier.
Les performances ne seront pas impactées mais on perd en souplesse.
HostnameLookups Off
Cette directive conditionne le fait qu'Apache va essayer (valeur
On) ou non (valeur Off) de résoudre l'adresse IP du client qui se connecte
à lui pour l'écrire dans les journaux d'accès. Si cette
option rend les journaux plus explicites, l'impact sur les performances est
généralement trop important. Il vaut donc mieux laisser à
"Off"
ErrorLog /usr/local/apache-1.3.22/logs/error_log
CustomLog /usr/local/apache-1.3.22/logs/access_log common
ErrorLog (journal d'erreur) et CustomLog (journal personnalisé,
i.e. journal d'accès) permettent de spécifier le chemin et le
nom du fichier contenant respectivement les erreurs d'accès (pages non
trouvées, etc.) et les accès réussis. CustomLog accepte
en plus un paramètre qui correspond à un format de journal, c'est-à-dire
une plus ou moins grande richesse des informations journalisées. Les
formats pour le journal d'accès sont déterminés par la
directive LogFormat.
Pour obtenir un maximum d'informations sur les visiteurs, il est bien plus intéressant
d'utiliser le mode combined en lieu et place de common. Mais dans
ce cas, le volume des journaux devient vite très importants. Pour mieux les
gérer, il suffit d'avoir recours à un programme permettant "d'éclater"
les journaux, le plus facile étant une séparation basée
sur la date. L'outil cronolog
est parfaitement indiqué, car il permet de spécifier des noms
de fichiers et/ou de répertoires en se basant sur la syntaxe de strftime.
Par exemple, %Y représente l'année courante sur quatre chiffres,
%m le mois courant sur deux chiffres, etc. Pour connaître l'ensemble des
possibilités, faites :
# man strftime
Tout d'abord, commentez la ligne CustomLog /usr/local/apache-1.3.22/logs/access_log
common (ajout d'une dièse # au début de la ligne) afin de
ne plus utiliser le mode standard. Commentez également la ligne contenant
ErrorLog.
Ensuite, téléchargez
cronolog et décompactez l'archive:
# tar xvfz cronolog-1.6.1.tar.gz
Rendez-vous dans le répertoire créé :
# cd cronolog-1.6.1
Préparez la configuration :
# ./configure --prefix=/usr/local/cronolog-1.6.1
Compilez et installez cronolog :
# make install
Nous avons choisi de garder les noms de fichier access_log et error_log, mais
ceux-ci vont être séparés mensuellement. Un répertoire
par année, et un sous -répertoire par mois.
Pour cela, ajoutez la ligne suivante juste en-dessous de la dernière
ligne du type CustomLog :
CustomLog "|/usr/local/cronolog-1.6.1/sbin/cronolog /usr/local/apache-1.3.22/logs/%Y/%m/access_log"
combined
Ajoutez également une ligne pour le journal des erreurs :
ErrorLog "|/usr/local/cronolog-1.6.1/sbin/cronolog /usr/local/apache-1.3.22/logs/%Y/%m/error_log".
N.B. : Le caractère avant le chemin vers cronolog est un pipe ("|").
Alias /icons/ "/usr/local/apache-1.3.22/icons/"
La directive Alias permet de créer un lien entre un
répertoire dans l'arborescence Web et un répertoire dans l'arborescence
du système de fichiers du serveur. Ainsi, avec la directive ci-dessus,
une requête sur l'URL http://nomserveur/icons/test.gif retournera
le fichier /usr/local/apache-1.3.22/icons/test/gif.
Attention, si l'alias est défini avec un slash à la fin (le symbole
"/"), il est nécessaire de taper un slash (ou de spécifier
un fichier) dans l'URL pour accèder aux données pointées
par l'alias. Par exemple, la directive Alias /doc/ "/usr/local/apache/htdocs/manual/"
permettra d'obtenir le contenu du répertoire manual si vous saisissez
http://monserveur/doc/ ou http://monserveur/doc/index.html. Si
vous tapez http://monserveur/doc, Apache recherchera un sous-répertoire
doc dans l'arborescence standard des documents (voir DocumentRoot).
La directive Alias apporte une certaine souplesse en évitant de devoir
dupliquer certaines données que l'on voudrait rendre accessible. Cependant,
le fait de mettre à disposition des fichiers hors de l'aborescence standard
pouvant présenter des risques, il est d'usage d'associer à une
directive Alias une directive Directory afin d'instaurer certaines règles
de sécurité.
AddType application/x-httpd-php3 .php3
La directive AddType permet soit d'ajouter des type MIME,
soit d'étendre la liste des extensions de fichiers correspondant à
un type MIME.
L'utilisation la plus courante de cette directive nous concerne directement
puisqu'elle permet la prise en compte active par Apache des fichiers PHP.
Nous y reviendrons ultérieurement.
ErrorDocument 404 /missing.html
Les directives ErrorDocument permettent de personnaliser les
pages présentées en cas d'erreur. Les paramètres de la
directive sont tout d'abord le code HTTP pour lequel on veut personnaliser,
puis soit du texte précédé d'une double quote (par exemple
"Page introuvable), soit une URL. Dans ce dernier cas, l'URL ne doit pas
forcément désigner un fichier HTML statique : cela peut être
un script Perl (/cgi-bin/erreur404.pl par exemple), une page PHP, etc.
N.B. : les codes d'erreur les plus courants sont 404 (page introuvable), 500
(erreur interne du serveur) et 403 (accès interdit).
Troisième section : Virtual Hosts
La rubrique Virtual Hosts (hôtes virtuels) permet à
Apache de gérer plusieurs sites/domaines différents avec le même
serveur. Il existe deux types d'hôtes virtuels : ceux basés sur
l'adresse IP et ceux basés sur le nom. Attention toutefois, ces derniers
s'appuient sur des spécificités du protocole HTTP dans sa version
1.1, même si.cela ne devrait plus être un problème à
l'heure actuelle car tous les navigateurs récents gèrent ce protocole.
Nous n'allons pas étudier les hôtes virtuels car ils couvrent des
besoins spécifiques qui sortent du cadre de cet article.
Lorsque vous avez terminé les changements dans le fichier de configuration,
arrêtez puis redémarrez Apache :
# /usr/local/apache/bin/apachectl restart
PHP
Ce qui allait devenir PHP a été créé
en 1995 par le Danois Rasmus Lerdorf. Son seul et unique but à l'époque
était de savoir qui venait lire son CV sur Internet. Etant à son
compte, il envoyait des lettres de motivations à diverses entreprises,
et mentionnait l'URL de son site. Il avait donc écrit un script CGI en
langage Perl qui ajoutait des balises dans le code HTML qui récupéraient
les informations sur les visiteurs. Pour impressionner ses visiteurs, il choisit
de rendre ses statistiques d'accès publiques. Il baptisa cet outil PHP-Tools
(PHP pour Personal Home Page) car ce n'était pour lui qu'un outil destiné
à sa page personnelle (home page). C'est également à ce
moment que, suite à plusieurs demandes concernant la disponibilité
de son script, il choisit de le diffuser comme freeware (ou graticiel ;-)...le
concept de logiciel libre n'existait pas à l'époque.
Suite à sa recherche d'emploi, Rasmus obtint un contrat à l'Université
de Toronto où il devait travailler sur un système de connexion
à Internet pour les étudiants. Il devait développer une
interface de gestion Web accèdant à la base de données
des étudiants hébergée sur un gros système IBM et
permettant d'autoriser la connexion en fonction du paiement effectué
par chaque étudiant. Cette base devait pouvoir être mise à
jour en temps réel. Vu qu'il n'existait alors aucun outil d'interfaçage
entre HTML et base de données, Rasmus eut l'idée d'ajouter des
balises spécifiques dans les pages HTML, celles-ci étant interprêtées
par le compilateur C. Il donna à cet ensemble de balises le nom de FI
pour "Forms Interpreter" (interpréteur de formulaire) car elles
permettaient de récupérer des informations saisies dans des formulaires
puis de les convertir afin de les exporter vers d'autres systèmes.
En combinant les fonctionnalités de PHP-Tools et de FI, Rasmus réalisa
en 1996 la deuxième version de PHP, PHP-FI. Bien qu'il lui soit venu
l'idée de commercialiser son produit, il s'abstint devant les messages
reçus de nombreux programmeurs à travers le monde qui lui envoyait
des corrections de bugs et des améliorations.
PHP est dès lors devenu un projet Open Source et Rasmus continue à
être l'un des principaux développeurs, même si le moteur
d'interprétation de PHP a été complètement réécrit
entre temps.
Pour installer PHP, placez-vous dans le répertoire où vous avez
chargé les sources, et décompactez les sources de PHP :
# tar xvfz php-4.0.6.tar.gz
# cd php-4.0.6
Préparez ensuite la compilation :
./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-inline-optimization \
--enable-debug=no \
--enable-safe-mode \
--enable-calendar \
--enable-ftp \
--enable-sysvsem \
--enable-sysvshm \
--enable-trans-sid \
--disable-static \
--with-regex=system \
--with-mm=/usr/local \
--with-mysql=/usr/local/mysql \
--with-freetype-dir=/usr/local \
--with-gd=/usr/local \
--enable-gd-native-tt \
--enable-freetype-4bit-antialias-hack \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-tiff-dir=/usr \
--with-zlib=/usr \
--with-pdflib=/usr/local
Quelques explications sur les options ci-dessus :
--with-apxs=/usr/local/apache/bin/apxs indique que PHP va être
compilé comme un module dynamique, le paramètre passé correspond
au chemin vers le binaire apxs.
--enable-debug=no indique que PHP ne fournira pas d'informations étendues
en cas d'erreur. Ce paramètre est à utiliser pour un serveur de
production.
--enable-safe-mode permet à PHP de contrôler certains paramètres
d'exécution de scripts et assurer une meilleure sécurité.
--with-regex=system indique à PHP d'utiliser la librairie d'évaluation
des expressions régulières du système plutôt que
celle inclue avec PHP.
--with-mysql=/usr/local/mysql spécifie le support de la base de
données MySQL.
--with-gd=/usr/local va permettre à PHP de générer
des images à la volée en se basant sur la librairie GD compilée
précédemment (voir ici
pour le détail des fonctions).
--with-pdflib=/usr/local permet à PHP de générer
des fichiers PDF à la volée en se basant sur la librairie PDFLib
(voir ici
pour le détail des fonctions).
Les options calendar, ftp, sysvsem et sysvshm ont pour but d'apporter des fonctionnalités
supplémentaires à PHP. Elles ne sont en aucun cas obligatoires.
Pour plus de détails, vous pouvez consulter la liste des différentes
options de compilation, disponible sur le site officiel PHP.
Remarque : le paramètre --enable-track-vars n'est pas spécifié
car il est implicite depuis la version 4.0.2 de PHP.
Lancez la compilation et demandez l'installation de PHP :
# make
# make install
Vous devez ensuite copier le fichier php.ini-dist dans le répertoire
/usr/local/lib sous le nom php.ini.
# cp php.ini-dist /usr/local/lib/php.ini
Enfin, pour activer le support de PHP par Apache, éditez le fichier httpd.conf
de Apache, recherchez les lignes suivantes et enlever le symbole de commentaire
(#) au début de chaque ligne :
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
Si ces lignes ne sont pas décommentées, Apache va considérer
les fichiers portant l'extension .php comme des fichiers texte simples et va
donc afficher le code plutôt que l'interprêter.
Enfin, arrêtez puis redémarrez Apache :
# /usr/local/apache/bin/apachectl restart
Tests / Conclusion
Tout d'abord, créez le fichier test.php contenant le code suivant :
<?php
phpinfo();
?>
Appelez ce fichier dans votre navigateur, si tout va bien, vous devriez voir
apparaître une page similaire à celle ci-dessous :

Maintenant, quelques tests des fonctions graphiques fournies par la librairie
GD (n'oubliez pas de copier le fichier arial.ttf - la police Arial de Windows
- dans le répertoire /data/fonts).
Tout d'abord, la création d'une image au format PNG. Créez un
fichier image1.php contenant le code suivant :
<?php
Header ("Content-type: image/png");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
ImageTTFText ($im, 20, 0, 10, 20, $white, "/data/fonts/arial.ttf",
"Testing... Omega: Ω");
ImagePng ($im);
ImageDestroy ($im);
?>
Appelez le fichier image1.php dans votre navigateur, vous devriez voir apparaître
l'image suivante :

Passons maintenant au format JPEG. Créer un fichier image2.php avec le
code suivant :
<?php
Header ("Content-type: image/jpeg");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
ImageTTFText ($im, 20, 0, 10, 20, $white, "/data/fonts/arial.ttf",
"Testing... Omega: Ω");
ImageJpeg ($im);
ImageDestroy ($im);
?>
Lors de l'appel du fichier, l'image suivante devrait apparaître :

Conclusion
Ce guide, bien qu'il ne soit pas exhaustif, a pour vocation
de présenter comment installer une plate-forme de développement de sites
dynamiques sur une plate-forme Linux.
Si vous rencontrez une quelconque difficulté,ou si vous avez des questions
ou des remarques, n'hésitez pas à poster un message dans le
Forum.
|