Accueil > Serveurs Web > Serveur web Apache sous Mac OS X : Partie 5

Serveur web Apache sous Mac OS X : Partie 5

Note de l’éditeur : Kevin revient avec son cinquième article sur Apache, OS X et l’immense puissance disponible à tout un chacun. Après avoir jeté les bases d’une bonne connaissance d’Apache dans les quatre premiers articles, Kevin prend maintenant le temps de se concentrer sur une technologie aussi populaire, à savoir le serveur de base de données MySQL.

Note du traducteur : Kevin vous met dans la peau d’un informaticien qui a fait découvrir à son patron, de la société GatesMcFarlaneCo, les possibilités intrinsèques de Mac OS X en matière de développement web. Jusqu’à présent, vous avez créé un intranet de toute pièce reposant sur un serveur Apache et sur PHP.


Même après avoir obtenu votre place de parking réservée et votre fauteuil dégonflable de dotcom à déficit chronique, vous restez les yeux figés sur le dernier mail de la société GatesMcFarlaneCo et vous rendez compte que vous avez rendu les choses un petit peu trop magiques. Ce facétieux, moustachu, et ventripotant personnage que vous appelez votre patron est positivement ébahit par Mac OS X et ses yeux sont grand ouverts sur ses possibilités.

“Lecteurs intrépides !” écrit-il, “Notre lemming saute dans vos bras ouverts !” cite-t’il de nouveau du Manuel de l’Employé de GatesMcFarlaneCo, et il en vient rapidement à l’essentiel : “Ecoutez, beaucoup d’entre vous m’ont demandé ce qui était prévu en termes de bases de données et à propos de ce truc qui s’appelle ‘ace-cul-aile’. Ils pensent qu’avec Mac OS X et vos compétences cela doit être facile à monter, n’est ce pas ? Je leur ai dit que nous leur montrerons quelque chose cette après-midi. Rendez-vous à 15 heures !”.

Vous jetez un coup d’oeil à votre montre. Il est 13:30. Votre estomac gargouille. Encore un coup d’oeil à votre montre. Et un autre sur le moniteur. “Rendez-vous à 15 heures !” Les gargouillements s’accentuent. Montre. Moniteur. Estomac. Keanu Reeves chuchote, “Vous avez 3 secondes, qu’allez-vous faire ? QU’ALLEZ VOUS FAIRE ?!”.

A table !

Avant que nous ne commencions

Dans la partie 5 de cette série, nous allons aborder l’installation de MySQL et aussi la création un script PHP simple qui créera une base de données, y ajoutera quelques informations et retournera ensuite des données au navigateur. Ayez conscience que cet article n’est pas un tutoriel sur le SQL ou sur la complexité actuelle de MySQL - nous nous concentrons seulement sur son installation sur Mac OS X. Si vous sentez le besoin de vous perfectionner sur le SQL, allez lire l’excellente série aboutSQL d’O'Reilly (NDT : ces pages étant en anglais, je vous conseille le site français suivant : http://www.sqlfacile.com/).

Inévitablement, quelqu’un va vous demander, “Hé ! Pourquoi choisir MySQL au lieu de PostgreSQL (un autre serveur populaire de base de données) ?” Ceci n’est pas un match de Quidditch (NDT : jeux de combat magique sur manche à balais), gentes gens; prenez n’importe lequel du moment qu’il vous convient. MySQL est plus populaire et plus facile à utiliser, mais PostgreSQL est d’avantage dôté des fonctionnalités que les utilisateurs accros de bases de données estiment plus pro. Si vous êtes novice en gestion de bases de données et en SQL, collez vous à MySQL pour commencer. Une fois que vous commencerez à ramasser beaucoup de dollars, passez alors à PostgreSQL. Ici nous nous concentrons sur MySQL, mais les concepts s’appliquent également aux deux.

Avant d’attaquer réellement cet article, nous devons discuter d’un dernier concept :

Code source ou double-clickable ?

Nous, utilisateurs de Mac, je vous le dis, nous sommes habitués depuis longtemps à la facilité. Hé, même ces types sur Windows ont eux aussi été habitués au confort durant la plupart de leurs années. Voyez, quand nous voulons installer un logiciel, nous double-cliquons. Nous suivons les instructions et après un éventuel redémarrage, nous avons notre nouveau logiciel installé et prêt à tourner.

Il existe une race d’utilisateurs, cependant, qui appartiennent à une catégorie radicalement différente. Ils adorent mettre les mains dans le cambouis en se servant de makefiles, de scripts de configuration, de code source et plus encore. Ils aiment choisir des options ésotériques dont le seul résultat est une optimisation limitée dont l’existence est à prouver. Ils aiment observer des flash d’informations plein l’écran, plus rapidement qu’ils ne peuvent les lire et ils se délectent d’examiner de nouveau ce qu’ils ont pu manqué.

C’est le monde de “la compilation de code source”.

Rassurez-vous, je ne vais pas vous forcer à faire ce que vous ne voulez pas faire. Certains d’entre vous ont entendu parler de compilation et à chaque fois cela retourne votre estomac. Vous vous dites, “Attendez, le Mac était facile ! Ils ont ajouté cette vieillerie de Terminal et maintenant ils voudraient que je fasse coin-coin comme un programmeur ?! Malédiction ! Je vais le dire à ma mère !”

Il y a certains avantages à compiler un source : tailler l’installation à votre propre environnement de travail, activer ou désactiver des options qui en d’autres cas peuvent être inutiles, et modifier le code pour ces “moments spéciaux” que le développeur original n’avait pas prévus.

La plupart des systèmes assimilables à Linux, Mac OS X inclus, s’adressent autant aux utilisateurs qui veulent double-cliquer et à ceux qui veulent compiler le code source. Mac OS X vous permet de double cliquer sur un fichier .pkg, Red Hat vous propose un fichier .rpm, et Debian des fichiers .deb. Toutes les distributions vous permettent de compiler le code source, pourvu que vous ayez juste les outils nécessaires. Pour OS X, cela signifie que vous ayez les derniers Outils de Développement installés.

Par la suite, je vais vous montrer comment installer MySQL. Je vous montrerai où obtenir la version double-clickable, et aussi comment construire, à partir du code source, une copie exacte. C’est en réalité assez facile et cela ne vous prendra pas plus de quelques minutes (ce qui est bien, puisque votre pause déjeuner était plutôt loooonngue). Allons-y !

Installation de MySQL

MySQL est un des serveurs de base de données les plus populaires, disponibles pour toutes les versions de Linux, de Windows et maintenant pour Mac OS X. En raison de son immense popularité, vous verrez souvent des hébergeurs et des fournisseurs d’accès Internet l’offrir comme fonctionnalité par défaut aux nouveaux comptes. C’est une bonne base de données pour mouiller les mains.

Par contre, un des inconvénients du à sa popularité, tient dans le nombre important de façon de l’installer. Il existe divers packages doubles-clickable disponibles, et aussi diverses manières d’installer et de compiler le code source. Nous nous concentrerons sur celles que j’ai trouvées les plus excitantes :

Avant d’aller plus loin, nous devons créer un utilisateur MySQL. C’est le compte que notre serveur MySQL utilisera. (Tout comme nous pouvez être l’utilisateur morbus et tout comme le compte administratif emploie l’utilisateur root, notre serveur MySQL utilisera l’utilisateur mysql).

La création de ce compte est assez simple :

  1. Cliquez sur votre menu de Pomme.
  2. Choisissez “Préférences Système”.
  3. Cliquez sur “Utilisateurs”.
  4. Cliquez sur “Nouvel Utilisateur”.
  5. Pour le nom, entrez “Utilisateur MySQL”.
  6. Pour le nom abrégé, entrez “mysql”.

L’Image de connexion et le Mot de passe peuvent être tout ce que vous souhaitez. Une fois que vous avez rempli toutes les informations, cliquez sur le bouton OK et vous verrez alors “Utilisateur MySQL” dans la liste des utilisateurs. Cette étape est exigée à la fois pour l’installation double-cliquable et pour la compilation du code source - ne la sautez pas.

Installation du package MySQL

Nous sommes prêts à aller plus loin avec notre installateur double-cliquable, donc, téléchargez le Package MySQL 3.23.49 sur le site de Marc. Une fois que le téléchargement est complet, l’installation se fait comme avec d’autres packages OS X, vous aurez besoin d’un mot de passe administrateur et après quelques clics sur des boutons, l’installation sera finie.

Rien de plus à faire quand on installe MySQL sous la forme d’un package - vraiment rien à imaginer. Il y a un peu plus d’étapes à suivre pour configurer correctement la base de données MySQL, mais puisqu’elles sont nécessaires aux versions packagées et compilées, nous les aborderons dans la section suivante. Vous pouvez passer à la section “Finition post-installation”.

Compilation du code source de MySQL

La compilation du code source de MySQL est relativement facile. Dans les quelques prochaines étapes, nous créerons et installerons la base de données MySQL avec la même configuration que celle disponible ci-dessus sous forme de package. Pour compiler MySQL, vous aurez besoin d’un accès à votre Terminal et d’un mot de passe administrateur. Aussi, les derniers Outils de Développement OS X doivent être installés.

Si vous avez installé la version packagée de MySQL (ci-dessus), vous ne devez pas suivre les instructions de cette section.

La première chose, évidemment, est d’acquérir le code source lui-même. Vous pouvez trouver le serveur miroir le plus proche sur le site MySQL. Une fois que le téléchargement est complet, lancez le Terminal et créer le répertoire /usr/local/src/ et déplacez-y vous :

 Cd/usr/local/ mkdir src  cd src

Quand vous installez quelque chose de nouveau sur un système Linux-compatible (comme Mac OS X), vous devez vraiment considérer que le centre de votre environnement de travail tourne autour du répertoire /usr/local/. Cela permet de distinguer les logiciels installés par le système d’exploitation de ceux installés par vous. Quand vous installez le package MySQL (ci-dessus), par exemple, il installe tout dans /usr/local/mysql-3.23.49/, y compris un alias (appelé “symlink” en termes Linux) de /usr/local/mysql/.

Ensuite, nous décompressons notre fichier téléchargé (votre chemin d’accès et votre nom de fichier sera peut être différent) :

tar -zxvf /Users/morbus/Desktop/mysql.gz

Nous nous dépla®ons alors dans le nouveau répertoire :

cd mysql-3.23.49/

A ce point, vous allez employer trois commandes très communes quand on compile du code source. La première commande, qui est configure, crée assez incroyablement, un fichier de configuration qui sera employé par les deux autres commandes. Dans la plupart des cas, c’est là que vous indiquez comment vous voulez que votre programme agisse, oõ vous voulez qu’il s’installe, etc …

La ligne configure pour MySQL est simple :

./configure --mandir=/usr/local/share/man --with-innodb

Cette ligne nous donne un exemple de deux choses que nous pouvons faire avec une déclaration configure. La première option, –mandir=/usr/local/share/man, vous montre comment surpasser une option induite par défaut. Dans ce cas, nous disons, “Non, MySQL, n’installez pas la documentation dans le répertoire normal; installez-le dans celui-ci au lieu de celui-là”.

La deuxième option, –with-innodb, montre comment activer une fonctionnalité normalement désactivée. Dans ce cas, InnoDB est une manière d’ajouter des clefs étrangères, des transactions et plus encore à MySQL. (Ces fonctionnalités sont de celles qui rendent la base vraiment “pro” comme mentionné dans notre introduction). La signification réelle de ces fonctionnalités nous ferait sortir du cadre de cet article, mais si vous êtes intéressés vous pouvez en savoir plus en allant sur InnoDB.com.

Après avoir tapé la ligne de commande précédente, vous verrez une quantité d’informations s’afficher dont la plupart ne signifiera probablement pas grand chose pour vous. Tout est OK, quoique; les scripts configure vérifient souvent votre environnement de travail pour s’assurer qu’ils savent tout ce qu’ils ont à faire avant que vous ne compiliez réellement le code source. En résumé, ils testent toute la procédure de compilation à l’avance. Tant qu’il n’y a aucune erreur évidente (il ne doit pas y avoir), vous pouvez continuer.

L’étape suivante est la phase de compilation proprement dite. C’est là que vous prenez le code source que vous avez configuré et que vous le transformez en un programme exécutable par OS X. Pour faire cela, entrez simplement la ligne suivante :

make

make va jetter un oeil à la configuration que vous avez créée (avec la commande configure) puis va créer une installation personnalisée basée sur vos caprices et désirs. Souvent, cela peut prendre plusieurs minutes; mais cela peut aussi durer que quelques secondes. (Sur mon Dual G4 450, cela a pris huit voire neuf bonnes minutes, avec trois ou quatre autres programmes ouverts à ce moment). De toute façon, vous allez voir beaucoup de substances s’étaler sur votre écran. Vous ne devez pas vous inquiéter de la lecture ou de la compréhension de tout cela … c’est de l’art de compilateur en pleine progression.

Faites attention de ne pas confondre les concepts “de compilation” et “d’installation”. Ce n’est pas parce que nous compilons notre code source avec make, que nous aurons la garantie que nous pourrons l’employer pour conquérir le monde. La dernière commande de notre trio-de-témérité est la suivante :

sudo make install

Cette commande prend simplement tout le code que nous venons de compiler et l’installe à l’endroit que nous avons indiqué (endroit modifiable par l’utilisation de la commande configure, si vous vous en rappelez). Après que vous ayez fait tourner le make install, le code que vous avez compilé est prêt à être utilisé. Vous pouvez commencer à vous servir du programme tout de suite, ou vous pouvez continuer à triturer des réglages supplémentaires.

Dans le cas de MySQL, il y a encore quelques commandes que nous devons taper - étapes de base qui assurent une exécution correcte de MySQL. Continuez la lecture, vaillant explorateur !

Finition post-installation

Selon votre mode d’installation de MySQL (via le package ou en compilant le code source), certains fichiers seront à des endroits différents sous le répertoire /usr/local/. C’est normal et c’est expliqué dans la documentation d’installation, dont j’ai placé des extraits ci-dessous.

Dans le cas d’une installation via package, le contenu de votre répertoire correspondra à celui montré ci-dessous, avec /usr/local/mysql/ étant un symlink (alias) de /usr/local/mysql-3.23.49/. (Notez, cependant, que les programmes client et serveur sont aussi installés dans /usr/local/bin/).

*Répertoire*                             *Contenus du répertoire*
`/usr/local/mysql-3.23.49/bin'           Programmes Client et le serveur
`/usr/local/mysql-3.23.49/data'          Fichiers Log et bases de données
`/usr/local/mysql-3.23.49/include'       Fichier Include (header)
`/usr/local/mysql-3.23.49/lib'           Librairies
`/usr/local/mysql-3.23.49/scripts'       `mysql_install_db'
`/usr/local/mysql-3.23.49/share/mysql'   Fichiers de messages d'erreur
`/usr/local/mysql-3.23.49/sql-bench'     Benchmarks (tests comparatifs)

Si vous avez compilé le code source, votre structure de répertoire sera :

*Répertoire*                             *Contenus du répertoire*
`/usr/local/bin'                         Programmes Client et scripts
`/usr/local/include/mysql'               Fichier Include (header)
`/usr/local/info'                        Documentation au format Info
`/usr/local/lib/mysql'                   Librairies
`/usr/local/libexec'                     Le serveur `mysqld'
`/usr/local/share/mysql'                 Fichiers de messages d'erreur
`/usr/local/sql-bench'                   Benchmarks (tests comparatifs)
                                         et tests `plantez-moi'
`/usr/local/var'                         Fichiers Log et bases de données

Avec la hiérarchie ci-dessus, vos étapes finales sont à porter de main :

# pour les installations via package
cd /usr/local/mysql/
sudo ./scripts/mysql_install_db
sudo chown -R mysql /usr/local/mysql
sudo ./bin/safe_mysqld --user=mysql &
# pour les installations via compilation de code source
cd /usr/local/
sudo ./bin/mysql_install_db
sudo chown -R mysql /usr/local/var
sudo ./bin/safe_mysqld --user=mysql &

Ces instructions initialiseront le coeur de la base de données de MySQL (qui se charge des contrôles d’accès), et lanceront le serveur MySQL en arrière-plan. Si tout se passe bien, vous devriez voir quelque chose de semblable à ce qui suit (le nom du chemin d’accès est fonction du mode d’installation que vous aurez choisi) :

Starting mysqld daemon with databases from /usr/local/var

Salut, MySQL!

Si les étapes précédentes se sont bien passées, il est temps maintenant de monter un script PHP rapide pour s’assurer qu’une communication avec une base de données est possible. Copiez le code suivant dans votre éditeur de texte préféré (comme BBEDIT) et sauvegardez le fichier sous le nom test.php dans un répertoire de site Web (soit /Library/WebServer/Documents/ soit /Users/morbus/Sites, par exemple).

<?
   print "<pre>";
   // connexion à notre serveur local avec l'utilisateur racine MySQL.
   $dbh = mysql_connect( "localhost", "root", "" );
   // selection de la base de données 'test' créée lors de l'installation.
   mysql_select_db( "test" ) or die ( mysql_error() . "\n" );
   // creation d'une table simple.
   print "La connexion à la base a été établie.\n";
   $table = "CREATE table savoirs (
             id int(4) PRIMARY KEY AUTO_INCREMENT,
             savoir char(255), auteur char(125) );";
   $response = mysql_query( $table, $dbh );
   if ($response) { print "La table a correctement été créée !\n"; }
   else { print mysql_error () . "\n"; }
   // maintenant, nous allons ajouter quelques données à notre nouvelle table.
   // pour ajouter différents savoirs, changez juste les 'values'.
   $insert_data = "INSERT into savoirs ( savoir, auteur )
                   values ( 'Doit... rester... éveillé !', 'Morbus' );";
   $response = mysql_query( $insert_data, $dbh );
   if ($response) { print "Les données ont été insérées correctement !\n"; }
   else { print mysql_error () . "\n"; }
   // et nous les lisons pour les afficher.
   $get_table_data = "SELECT * FROM savoirs;";
   $response = mysql_query( $get_table_data, $dbh );
   if ($response) { print "Nous avons lu toutes les données avec succés.\n"; }
   else { print mysql_error () . "\n"; }
   // maintenant affichons les à l'utilisateur.
   while ( $one_line_of_data = mysql_fetch_array( $response ) ) {
       extract ( $one_line_of_data );
       print "#$id: $auteur dit : \"$savoir\"\n";
   }
   print "</pre>";
?>

Note : De nouveau, nous n’allons pas nous attarder sur la syntaxe du script PHP, ou sur la syntaxe SQL employée. Il suffit de dire que ce script crée une table dans la base de données ‘test’ de MySQL, qu’il ajoute quelques données et qu’il affiche ensuite tout le contenu de la table ’savoirs’. Si vous avez besoin d’approfondir ces notions de PHP ou de MySQL, rendez-vous sur ONLAMP.COM (NDT : Pour le PHP, rendez-vous sur http://www.php.net/, et pour MySQL sur http://www.nexen.net/).

Après avoir sauvegardé le fichier, chargez le dans votre navigateur Web. Personnelement, j’ai sauvegardé ma copie sous /Users/morbus/Sites/test.php, donc j’ai chargé http://127.0.0.1/~morbus/test.php dans mon navigateur. Après la première exécution, voici ce que j’ai vu :

La connexion à la base a été établie.  La table a correctement été créée !  Les données ont été insérées correctement !  Nous avons lu toutes les données avec succés.  *1 : Morbus dit : "Doit... rester... éveillé !"

Si je continue à lancer ce script, en changeant la ligne INSERT à chaque fois, mon affichage commencera à ressembler à cela :

La connexion à la base a été établie.  La table a correctement été créée !  Les données ont été insérées correctement !  Nous avons lu toutes les données avec succés.  *1 : Morbus dit : "Doit... rester... éveillé !"  *2 : Morbus dit : "Le sommeil rend Derrick colléreux !"  *3 : Morbus dit : "et il me reste 23 minutes avant 15 heures!"

Cet affichage certifie que notre communication PHP-VERS-MYSQL fonctionne parfaitement. Avec 23 minutes à passer avant que le patron et ses sbires ne viennent, nous avons juste assez de temps pour becter les derniers restes de nos chips au ketchup et les avaler avec une gorgée de Moxie.

Deux informations complémentaires

Quand nous démarrons notre serveur Web (par le biais du tableau de bord “Partage”), Mac OS X relance Apache, si notre machine n’a pas été redémarrée. Par contre, MySQL ne redémarre pas automatiquement. Heureusement, il y a une solution double-clickable, de nouveau de Marc Liyanage. En installant ce StartupItem, MySQL obéira au doigt et à l’oeil après chaque redémarrage.

Avec toutes ces instructions, MySQL est malheureusement non sécurisé. Chacun peut prendre possession de l’utilisateur administrateur MySQL et faire ainsi des ravages dans nos données. Cela ne peut ne pas être un problème si vous employez MySQL sur une machine de développement, mais les serveurs accessibles au grand public ont besoin de protection. Tout comme Mac OS X, qui est dôté d’un utilisateur root avec des possibilités de contrôle suprême de la machine, MySQL a aussi un utilisateur root qui a des possibilités de contrôle suprême sur le serveur de base de données.

Par défaut, l’utilisateur root de MySQL n’a aucun mot de passe. Si vous jetez un coup d’oeil à notre script PHP, vous verrez que nous nous connectons à notre base de données en laissant le champ “mot de passe” à blanc :

// connexion à notre serveur local avec l'utilisateur racine MySQL.
$dbh = mysql_connect( "localhost", "root", "" );

La première chose à faire pour sécuriser notre serveur de base de données est d’assigner un mot de passe à l’utilisateur root de MySQL. Pour faire cela, saisissez la chose suivante dans une fenêtre du Terminal :

mysqladmin -u root password nouveau_mot_de_passe

Une fois que nous aurons fait cela, nous devrons alors aussi modifier notre code PHP :

// connexion à notre serveur local avec l'utilisateur racine MySQL.
$dbh = mysql_connect( "localhost", "root", "nouveau_mot_de_passe" );

Ce n’est que le début de la sécurisation d’une installation de MySQL. Vous pouvez aller beaucoup plus loin, comme limiter les accès à certaines bases de données par nom d’hôte, tout comme nous avons limité l’accès à certains répertoires Web avec les instructions allow et deny d’Apache (voir le paragraphe “Choisir qui peut voir quoi !” dans la partie 3 de cette série).

Après la démonstration…

Heureusement, la réunion n’a seulement duré qu’une demi-heure. Tout le monde est parti les yeux grands ouverts d’étonnement. De nouveau, vous êtes assis, avec un regard suffisant sur votre visage, réalisant que l’inquiétude relative à la sécurité est une chose du passé.

Vous avez maintenant des bases de données stockées, des fonctionnalités adorées et des requêtes chiadées. Vous vous rendez compte qu’il y a encore tant de choses à découvrir dans ce serveur Apache qui hurle “Viens me découvrir !” avec une jubilation normalement sans fondement dans les logiciels typiques Mac. Où aimeriez-vous être emmené ensuite ?

Textes originaux en anglais sur O’Reilly : Apache Web-Serving With Mac OS X, Part 5 par Kevin Hemenway

Thierry Serveurs Web , , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire