Apache PHP MySQL
Installation de LAMP : GNU/Linux, Apache, PHP, MySQL
Par Jean-Marc Lichtle Mise à jour par Anne puis par Jiel
1 Objectif de ce document
L'objectif de ce document est de guider les premiers pas d'un utilisateur débutant dans l'utilisation de la trilogie Apache, PHP, MySQL. On suppose que les bases de GNU/Linux sont connues, en particulier que l'utilisateur est familiarisé avec l'arborescence des fichiers, la manipulation d'un logiciel de décompression des paquetages, la notion d'utilisateur, d'administrateur, etc.
2 Note
Dans cette documentation, on a pris la distribution Mandriva comme exemple. Le processus d'installation est similaire dans les autres distributions classiques (Fedora, Debian, Ubuntu etc.). Sachez si vous n'êtes pas sous une Mandriva qu'urpmi est l'utilitaire Mandriva pour installer des fichiers (cela correspond à yum, apt-get, installpkg). Enfin sous Mandriva le serveur web cherche les pages à afficher dans /var/www/html/; dans d'autres distributions, la racine commune à Apache est généralement /var/www/.
3 Introduction
La configuration de l'ensemble Apache, PHP, MySQL n'était pas spécialement aisée avec les distributions plus anciennes. Un article (très intéressant) de la revue Linux Pratique décrit dans le numéro 12 comment s'y prendre pour réaliser cette opération, 9 pages d'instructions, de mises à jour de fichiers .conf etc.. Passionnant (et pénible).
Depuis plusieurs années, il est possible de tout faire fonctionner sans retoucher le moindre fichier de configuration, simplement en installant les paquetages (.rpm sous Mandriva).
Rappelons brièvement que:
- Apache est un serveur Web (le logiciel qui « envoie » des pages .html à un navigateur). Il s'agit du serveur le plus utilisé actuellement sur le Web puisqu'il représente environ 2/3 des serveurs installés.
- PHP est un langage de programmation interprété. Correctement interfacé avec Apache, il permet au serveur de fournir des pages dynamiques gérées en fonction des besoins du client. En clair, la page n'est plus un document statique mais peut évoluer, afficher des informations différentes selon les souhaits de l'utilisateur.
- MySQL est un gestionnaire de bases de données assez puissant et rapide. Il peut très bien fonctionner en utilisant son propre client en mode texte sans l'utilisation d'une quelconque interface graphique. L'utilisateur doit alors maîtriser le langage SQL de MySQL (proche de la norme ANSI) et se servir de la ligne de commande pour adresser des requêtes au serveur. Spartiate, on se croirait revenus à la grande époque de DBase sous DOS! (nostalgie).
4 Installation d'Apache
Note prélable : la plupart des distributions proposent aujourd'hui les versions 1.3.x et 2.x de Apache. Si Apache 2.x présente plus d'option pour la configuration avancée du serveur et d'autres caractéristiques liées à sa performance, le groupe de développement PHP n'a toujours pas validé la plate-forme sous cette version. On peut raisonnablement dire que pour un serveur personnel ou ne nécessitant pas de fonctionnalités particulières, Apache 1.3.x fait parfaitement l'affaire. C'est ce que nous utiliserons. Tout marche cependant avec Apache 2 à la perfection.
4.1 Installation des paquetages d'Apache
L'installation d'Apache ne pose pas de problèmes. L'objectif est de disposer en fin d'installation des packages suivants :
apache2-common
: fichiers d'installation pour Apache et apache-mod_perlapache2-modules
: ensemble des modules pour Apacheapache-conf
: fichiers de configuration de Apacheapache2
: le démon Apacheapache-manuel
(pas obligatoire mais peut se révéler utile).
# urpmi apache2 Pour satisfaire les dépendances, les paquetages suivants vont être installés (1 Mo): apache-conf-2.0.48-2mdk.i586 apache2-2.0.48-6mdk.i586 apache2-common-2.0.48-6mdk.i586 apache2-modules-2.0.48-6mdk.i586 Est-ce correct ? (O/n) Préparation... ################################################## 1:apache-conf ################################################## 2:apache2-modules ################################################## 3:apache2-common ################################################## 4:apache2 ##################################################
Le package apache-conf
contient en particulier les fichiers de configuration /etc/httpd/conf/httpd.conf
et /etc/httpd/conf/commonhttpd.conf
qui définissent les paramètres de fonctionnement du serveur[#foot94 ][#foot94 ][#foot94 Note 1]
4.2 Premier test d'Apache
Le fonctionnement d'Apache est matérialisé par la mise en route d'un démon nommé httpd. Pour mettre en route, arrêter, vérifier etc. ce service tapez /etc/rc.d/init/httpd option ou option peut prendre les valeurs start, stop, restart, status ou extendedstatus selon votre besoin. En clair, pour démarrer Apache tapez /etc/init.d/httpd start
sous Mandriva; sous une autre distribution, démon de lancement d'Apache pourra s'appeler apache; faites alors /etc/init.d/apache start
.
Sur Mandriva, vous pouvez également utiliser la commande service
: service httpd start
par exemple.
En principe l'installation d'Apache a modifié les fichiers de configuration du lancement de Linux. Le démon httpd devrait donc démarrer systématiquement et automatiquement à chaque boot. L'installation a par ailleurs démarré immédiatement ce démon, il n'est donc pas nécessaire de rebooter comme on le ferait avec un autre système d'exploitation très connu avec lequel le moindre changement de mulot passe par un reboot...
Nous pouvons par ailleurs passer immédiatement au test du serveur sans passer par la moindre phase de configuration. Pour cela chargez votre navigateur préféré (pour ma part j'utilise Konqueror). Saisir http://localhost
dans la barre d'URL. Vous voyez apparaître après quelques instant une page de présentation d'Apache. En fait le serveur Apache vient d'envoyer la page /var/www/html/index.shtml
, affirmation que vous pourrez facilement vérifier en tapant file:/var/www/html/index.shtml
dans la barre d'URL de votre navigateur. Attention: il n'y a qu'un slash après file:
alors que par habitude vous pourriez être tentés (comme moi!) d'en mettre deux.
La page affichée dans ce cas est bien la même que la première. Les différences d'affichage dans les parties graphiques s'expliquent par le fait que l'affichage a été demandé en direct au lieu de passer par le serveur Apache.
Si vous préférez utiliser Lynx (un navigateur en mode texte ultra rapide puisqu'il ne charge pas les parties graphiques) vous pouvez même vous contenter de taper lynx localhost
. Lynx ajoutera automatiquement ce qui manque. Merveilleux de simplicité non ?
5 Installation de PHP
5.1 Mise en place des paquetages
L'installation de PHP doit contenir :
libphp-common432
php.ini
mod_php
L'installation de ces packages ne devrait pas poser de problème particulier. Sauf erreur ils s'installent automatiquement avec l'option d'installation « recommandée » de Mandriva. Vérifiez toutefois la présence de mod_php
(rpm -qa | grep php
) !
# urpmi php Un des paquetages suivants est nécessaire : 1- apache2-mod_php-2.0.48_4.3.4-1mdk.i586 2- mod_php-4.3.4-1mdk.i586 3- php-cli-4.3.4-4mdk.i586 4- php-cgi-4.3.4-4mdk.i586 Que choisissez-vous ? (1-4)1 Préparation... ################################################## 1:apache2-mod_php ################################################## Shutting down httpd2: [ OK ] Checking configuration sanity for Apache 2.0: [ OK ] Starting httpd2: [ OK ]
L'installation des rpm se termine par un redémarrage d'Apache afin de prendre en compte le module PHP : taper en console /etc/init.d/httpd restart
5.2 Premier script PHP
Il importe maintenant de réaliser le premier test. Créez un sous répertoire /var/www/html/test/
puis créez dans ce sous répertoire un fichier test.php
contenant :
<?
echo 'premier test php
';
phpinfo();
?>
</html>
Sauvegardez et chargez dans un navigateur (URL http://localhost/test/test.php
).
Voilà votre première page web dynamique ! Vous avez, en quelques lignes, créé du code html (les balises <html> et </html>), faite générer du html par PHP (echo 'premier test php
), les
';
sont des retours chariots, et fait appel à l'une des nombreuses fonctions de PHP, phpinfo() qui donne les principales informations sur le configuration actuelle de PHP.
Vous pourrez réaliser d'autres tests, l'aide nécessaire est à votre disposition dans les bouquins, les revues et sur le net.
Lorsque vous aurez constitué un petit groupe de fichiers de test vous pourrez alors faire l'expérience suivante :
- tapez simplement
http://localhost/test/
dans la barre d'URL de votre navigateur, celui-ci affiche la liste des fichiers créés, en fait le contenu du sous répertoire/var/www/html/test/
. Si vous cliquez sur l'un des fichiers vous lancez le serveur Apache qui va interpréter le code PHP contenu dans le fichier choisi. - copiez l'un des fichiers (ou renommez le) vers index.php. La même URL que précédemment affiche alors directement les contenu de index.php! Le contenu du sous répertoire n'est plus visible! L'accès aux différents fichiers reste toutefois possible si vous tapez directement leurs noms respectifs.
- effacez le ficher
index.php
, l'affichage de la liste des fichiers est à nouveau possible. C'est pratique pour éviter qu'un visteur de passage puisse consulter le contenu d'un sous-répertoire. Bien sûr c'est un simple truc, pas un rideau de fer contre un kracker expérimenté, mal intentionné et patient !
6 Installation de MySQL
6.1 Mise en place des paquetages
L'installation de MySQL est elle aussi très simple. Les packages suivants sont nécessaires (ils devraient avoir été installés par défaut, en cas de besoin les installer par la suite):
mysql-common
mysql-client
mysql
MySQL-client n'est pas indispensable. Il s'agit en fait de la partie client de l'ensemble client-serveur. Ce client permet toutefois (attention, en mode texte c'est plutôt spartiate !) de faire quelques requêtes au serveur.
'# urpmi mysql Un des paquetages suivants est nécessaire : 1- MySQL-4.0.18-1.1.100mdk.i586 2- MySQL-Max-4.0.18-1.1.100mdk.i586 Que choisissez-vous ? (1-2)1 Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo): MySQL-4.0.18-1.1.100mdk.i586 MySQL-client-4.0.18-1.1.100mdk.i586 MySQL-common-4.0.18-1.1.100mdk.i586 libmysql12-4.0.18-1.1.100mdk.i586 perl-Mysql-1.22_19-9mdk.i586 Est-ce correct ? (O/n) Préparation... ################################################## 1:libmysql12 ################################################## 2:MySQL-client ################################################## 3:perl-Mysql ################################################## 4:MySQL-common ################################################## 5:MySQL ################################################## 040512 12:40:46 /usr/sbin/mysqld: Shutdown Complete # service mysql start Lancement du serveur MySQL [ OK ]
En principe après l'installation de MySQL vous devriez disposer d'un serveur MySQL opérationnel (et en marche). Pour le vérifier tapez ps -ax | grep mysql
. Vous devriez voir s'afficher quelques lignes relatives à autant de serveurs en attente de requêtes. Si tel n'est pas le cas tapez (comme root) "safe_mysql &
" dans une fenètre texte. Cette commande devrait démarrer le serveur MySQL.
Attention : l'installation par défaut utilise root comme super administrateur du serveur et le mot de passe root. Faites donc un essai de fonctionnement du serveur MySQL en utilisant simplement le client MySQL en mode texte.
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Tapez alors quit à l'invite mysql et vous voilà sorti.
Il va falloir faire fonctionner tout ce petit monde ensemble! Apache et PHP sont déjà opérationnels. Ils communiquent ensemble, l'essai a été fait. MySQL est en route également. Pour que PHP puisse entrer en contact avec MySQL il lui faut un minimum de connaissances qui lui sont apportées par le module php-mysql.
# urpmi php-mysql Préparation... ################################################## 1:php-mysql ##################################################
Pensez donc à l'installer lui aussi sinon pas de langue commune! Redémarrez Apache (taper en console "/etc/init.d/httpd restart" sans les "")
On notera qu'on peut utiliser aussi PostreSQL (à la place de MySQL) avec PHP et Apache.
6.2 Installation du script phpMyAdmin
Plutôt que de vous lancer dans la rédaction d'un premier script PHP qui va s'adresser au serveur MySQL (pour lui dire quoi ? Rien n'existe encore, ou si peu !) je vous suggère de récupérer sur le net un ensemble de scripts nommé phpMyAdmin. Il s'agit tout simplement d'un ensemble de scripts PHP qui va vous permettre, via un navigateur, d'administrer vos premières bases de données, de lire les bases de données système MySQL (celles qui définissent les droits des utilisateurs), d'en créer d'autres.
Préparation... ##################################################
1:phpMyAdmin ##################################################
6.3 Premier test
Une fois l'installation faite utilisez votre navigateur préféré et tapez http://localhost/phpMyAdmin/
dans la barre d'URL.
Vous devriez voire apparaître une page html "Bienvenue à phpMyAdmin 2.5.4 - Connexion". Par défaut, le nom d'utilisateur est "root" et aucun mot de passe n'est défini : il suffit de se loguer simplement en laissant vide le champ "mot de passe". Pour des raisons de sécurité, une fois logué, modifier le nom d'utilisateur et définir un nouveau mot de passe.
[ Il vous reste à modifier le fichier /var/www/phpMyAdmin/config.inc.php et le paramètre$cfg['blowfish_secret'] = '';
.
Exemple :$cfg['blowfish_secret'] = 'ma phrase secrete';
]
On notera que dans les versions récentes de PhpMyAdmin le fichier de configuration n'est plus config.inc.php
mais config.default.php
. Depuis la version 2.8.0 le fichier a été déplacé dans le répertoire libraries/
. Généralement, le fichier est mis dans /etc/phpMyAdmin/config.default.php
et lié vers /var/www/phpMyAdmin/libraries/config.default.php
.
Rechargez la page de votre navigateur, voilà vous êtes prêts à l'utiliser !
7 Synthèse
Vous venez de créer deux ensembles de données, les répertoires contenant les pages HTML/PHP, et les répertoires contenant les bases de données MySQL.
- Les pages PHP/HTML sont rangées dans
/var/www/html/
. La page d'accueil Apache est à l'adresse/var/www/html/index.shtml
(rappel !). Le sous-répertoire/var/www/html/admin/phpMyAdmin
contient le script de connexion à MySQL. Vous pourrez créer d'autres sous répertoires contenant vos premiers essais, par exemple/var/www/html/test/
qui sera accessible à l'URLhttp://localhost/test/
. - Les données MySQL sont rangées dans
/var/lib/mysql/
. Chaque base de données correspond à un sous-répertoire. Exemple :/var/lib/mysql/mysql/
contient les tables qui définissent les droits d'accès à MySQL. Ce sous-répertoire n'est évidemment accessible que pour l'administrateur système. Si vous créez une nouvelle base de données avec phpMyAdmin ou directement en utilisant le client MySQL, le serveur créera un nouveau sous répertoire /var/lib/mysql/test par exemple si votre nouvelle base s'appelle test.
Conclusion
La description ci-dessus avait pour but de vous conduire à disposer d'un serveur Apache qui soit opérationnel et qui puisse mettre en oeuvre des bases de données MySQL via PHP. Ce but étant atteint il convient maintenant d'être modeste. Le vrai travail commence juste. Lisez les docs, les man pages. Il existe aussi d'excellents bouquins sur la question. Pour ma part j'étudie actuellement ``Pratique de MySQL et PHP'' édition O'Reilly. Je le trouve très bien fait.
Enfin, lisez Protection d'un serveur Apache PHP MySQL, concernant la sécurisation de l'environnement que l'on vient de créer.
Remerciement
Lors d'une installation il est courant de progresser un peu à tâtons, par essais successifs. Après quelques heures de bagarre (qui peuvent être réparties sur plusieurs jours) il faudrait être un sur-homme pour se souvenir de tout ce qu'on a fait. La mise au point d'un document comme celui-ci ne peut donc se faire qu'après plusieurs installations réussies. Idéalement la bêta-version du document doit elle-même être testée par un autre personne qui suit scrupuleusement la description et commente les erreurs, inversions, oublis etc. Je remercie donc M. Guy ASSFELD d'avoir bien voulu apporter sa contribution à ce travail en déboguant la première version.
L'auteur
JML dit Jean-Marc LICHTLE, email jean-marc.lichtle@gadz.org, ingénieur Arts et Métiers promo CH173 (rigolez pas, à l'époque le hi-tech c'était les cartes perforées sur IBM 1130) !
Notes
- ... serveur[#tex2html1 1]
- De nombreuses distributions ne se contente plus du seul fichier httpd.conf. La version contenue dans LINUX Mandrake 10.0 utilise un fichier supplémentaire, commonhttpd.conf qui est appelé par httpd.conf par un ``include''.
- ... start[#tex2html2 2]
- Je ne précise pas, il va sans dire que certaines commandes ne peuvent être lancées que par l'administrateur système (root). L'appel à httpd fait partie de ces commandes réservées. Donc si LINUX vous fait un bras d'honneur commencez par vous poser la question de votre habilitation à lancer une commande.
@ Retour à la rubrique Réseau et sécurité
Copyright
Copyright © 01/10/2001, 2005 Jean-Marc Lichtle et Anne Nicolas
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |