(G)LAMP : GNU/Linux Apache MySql Php

Internet aujourd'hui, c'est quand même pas mal de web. Le web, à la base World Wide Web ( www ça vous dit quelque chose ? ), c'est la partie d'internet qu'on peut voir d'un navigateur. Bon en vrai aujourd'hui, on peut voir un peu plus que du web dans un navigateur, puisque les applications sont de plus en plus souvent accessibles en ligne et permettent de faire par exemple de l'irc ou de la voip... Mais l'application qui vous sert à faire de l'irc ou de la voip, c'est du web, et donc hébergé sur un serveur web. Pour proposer une page sur le web, il en faut obligatoirement un. Il en existe plein, mais le plus connu et le plus répandu, c'est Apache.

Si on veut stocker et accéder à des données par le biais d'une page (par exemple des articles) , il faut un serveur de base de données. C'est presque indispensable de nos jours quand on veut faire quelque chose d'un peu dynamique. Les données qui sont stockées dans la base de données ne sont jamais vues directement mais elles sont appelées par la page web que notre navigateur charge. Et pour les appeler, on a besoin d'un langage de script qui s'appelle PHP.

Un exemple concret de comment ces trois éléments s'articulent :

On a d'un coté une base de données qui contient des articles de blog. De l'autre coté, une page web qui contient du code PHP. Si un visiteur appelle la page, le serveur web lit le fichier, exécute le code php et le remplace par le résultat de cette exécution. Dans votre navigateur, vous ne verrez donc jamais de code php, car il sera toujours substitué au contenu de la page que vous regardez. Dans ce cas précis, le code php pourrait dire au serveur :

"Tu te connectes à la base de données, tu prend l'article n°5 et tu me remplaces par cet article."

Et dans votre navigateur, vous verrez l'article n°5 sans vous douter que l'opération ci-dessus à eu lieu. Mais la base de donnée peut aussi servir à stocker des informations comme des mots de passe, des messages de forums, etc...

C'est un exemple et pas du tout représentatif de toutes les possibilités que la combinaison de ces trois outils fait apparaître.

LAMP ?

On parle de serveur LAMP quand on associe distribution Gnu/Linux, Apache, Mysql, Php (On devrait donc parler de GLAMP ...). Il est possible d'installer d'un coup tous les paquets, ou bien un par un. Dans la mesure ou on cherche la simplicité, c'est la première méthode que je décris ici.

Apache

Normalement, Apache a été installé en même temps que le système, mais si jamais ce n'est pas le cas, vous pouvez installer les paquets nécessaires en vous rendant dans le module "Module inutilisés" du menu de Webmin, et cliquer sur "Serveur web Apache". Dans la partie de droite, on devrait vous proposer de l'installer. Il est recommandé d'installer Mysql en même temps.

Si vous préférez passer par la ligne de commande :

 sudo apt-get install lamp-server^ 

avec l'accent circonflexe en fin de commande.

Une fois Apache installé, on peut déjà vérifier que ça marche en entrant l'ip du serveur dans un navigateur sur un autre ordi du réseau ( dans notre exemple ). Si vous avez déjà procédé à l'ouverture des ports (http://bambou.viens.la/blog/spip.php?article25), vous pourrez aussi y accéder en tapant votre ip externe (http://bambou.viens.la/ip).

Même si ça marche, il y a quelques petits trucs à vérifier et à mettre en place dans la configuration d'Apache, et puis on verra comment mettre en place des hôtes virtuels qui vont nous permettre d'avoir plusieurs sites web sur un seul serveur.

Pour avoir accès à cette configuration, rendez-vous dans Webmin, module "Serveurs", "Serveur Web Apache".

À chaque modification d'un réglage, n'oubliez pas de sauvegarder. En fin de configuration, appliquez les changements en utilisant le bouton adéquat.

VĂ©rifier les modules Apaches

Dans l'onglet "Configuration globale", "Configurer les modules Apache". Une liste de tous les modules disponibles apparaissent. Veiller à ce que le module "php5" soit bien activé. Il peut arriver qu'à la suite d'une mise à jour, certains modules d'Apache ne soient plus reconnus. C'est notamment le cas de libapache2-mod-php5. La conséquence de ceci, c'est que les fichiers php ne seront plus interprétés côté serveur, et que les utilisateurs pourront télécharger le code php en clair...

Plutôt embarrassant niveau sécurité !

Pour résoudre ce problème, Il suffit de réinstaller le module en question, et de relancer apache.

Soit en CLI :

 $ sudo apt-get -y --force-yes -f install libapache2-mod-php5 
 $ sudo /etc/init.d/apache2 force-reload 

Soit via Webmin :

libapache2-mod-php5 est bien sûr à remplacer par le nom du module en cause, qui apparaît souvent dans les messages d'erreurs ou dans les journaux systèmes.

Changer le répertoire du site

Par défaut, Apache affiche les fichiers qui sont présents dans le dossier /var/www quand on s'y connecte depuis un navigateur. Pour diverses raisons, il peut être plus pratique de mettre les fichiers du site dans le répertoire utilisateur (/home/utilisateur ).

On doit d'abord créer un dossier quelque part dans le dossier de l'utilisateur, et pour ça, deux solutions :

Plusieurs sites sur un seul serveur ?

Pour accéder à plusieurs sites en ayant une seule ip externe et un seul serveur web, il faut créer des hôtes virtuels. Pour cela, il faut se rendre dans l'onglet "Créer un hôte virtuel" ( ah bon ? ) et il y aura plusieurs infos à fournir.

Mais avant, quelques explications. Comme on a qu'une seule ip, et qu'un seul serveur, ça veut dire que toutes les requêtes vers Apache seront traitées par le même processus.

Si on a un nom de domaine "monsite.fr" et "monautresite.com" qui pointe vers notre ip externe, ils afficheront tous les deux la même page, car Apache ne fera pas la différence. Si on veut afficher un site à l'appel de "monsite.fr" et un site différent à l'appel de "monautresite.com", il va falloir dire au serveur : "Si on demande "monsite.fr", tu affiches les fichiers qui sont dans tel dossier, et si on demande "monautresite.com", tu affiches les fichiers qui sont dans tel dossier."

Pour faire ça on utilise des hôtes virtuels et lors de la création de celui-ci, il faut lui dire deux choses importantes : le nom du serveur et le répertoire racine du site.

Quand vous créez un hôte virtuel, il faut donc indiquer dans le champ "Racine du document" le dossier où les fichiers du site sont stockés, et dans le champ "Nom du serveur", le nom de domaine qui permet d'accéder à ce site.

Php

Pour accéder aux fichiers de configuration de php, rendez vous dans le module "Autres", puis "Configuration PHP". La configuration par défaut est fonctionnelle mais nous verrons plus tard que certaines modifications sont nécessaires pour quelques applications web.

Mysql

Le serveur de base de donnée Mysql est accessible dans le module "Serveurs", et permet de multiples opérations. Je ne décrirais ici que les principales.

Création d'un utilisateur

La plupart des applications nécessite un accès au serveur de la base de donnée ( bdd ), que ce soit un blog ou un webmail. Pour des raisons de sécurité, il est important de créer au moins un utilisateur de base de donnée dont on se servira pour les accès à la base. En effet, l'utilisateur par défaut est l'utilisateur du système, avec son mot de passe, ce qui est dangereux. La création d'un utilisateur avec des droits restreints permet de s'assurer que même si les données d'identification de cet utilisateur sont compromises, il ne pourra effectuer certaines actions comme la suppression complète de la bdd.

Pour créer un utilisateur, il faut se rendre dans "User permissions" puis cliquer sur "Create new user". Vous pourrez alors choisir un nom d'utilisateur et un mot de passe qui vous seront demandés par les différentes applications web lors de leur installation.

Dans le champ "hosts", mettez "localhost". Cela signifie que seules les requêtes locales provenant du serveur seront acceptées, ce qui renforce la sécurité. Il faudra modifier cette option ou créer un utilisateur avec un autre "hosts" si vous avez besoin de connexion depuis un autre serveur ( Si vous avez une page sur un autre serveur qui appelle des données de la base par exemple ).

En ce qui concerne les permissions, sélectionner les suivantes :

Ce sont les opérations de base sur les tables dont la plupart des applications web ont besoins. En fonction des cas, il peut arriver qu'il faille ajouter une permission, mais nous le ferons au cas par cas.

Mise en place d'un backup

Une fois vos bdd créées par vos applications web, il est conseillé de les sauvegarder régulièrement afin de pouvoir les restaurer en cas de pépin. Une fonction est disponible via webmin pour automatiser ce processus.

Cliquez sur la bdd dont vous voulez configurer la sauvegarde, puis sur le bouton "Backup database" dans la page qui s'affiche. Vous accédez alors au menu de configuration du backup.

Dans la première partie, vous devez définir l'emplacement et le nom de la sauvegarde, ainsi que son contenu.

Vous pouvez par exemple décider de regrouper toutes vos sauvegardes dans un dossier "backup" que vous aurez créé dans votre dossier d'utilisateur :

/home/votre utilisateur/backup/nom_du_fichier Ne pas mettre de "/" au bout, sinon le nom du fichier devient un nom de dossier et vous aurez une erreur. Il est possible ensuite de régler certaines options comme la compression du fichier de sauvegarde ou l'encodage, mais les options par défaut sont fonctionnelles si jamais vous avez trop peur de changer ces détails.

Enfin, vous pouvez automatiser la sauvegarde en choisissant une planification simple ( quotidien, hebdo, mensuel ) ou détaillée en définissant l'heure , le jour, etc...

Pour finir, cliquez sur "Sauvegarder maintenant pour vérifier qu'il n'y a pas de message d'erreur.

Backup ftp

Si vous avez mis le script du chapitre IV.a en place, vous pouvez modifier la commande pour inclure le fichier de sauvegarde défini plus haut :

lftp hĂ´te_ftp -u utilisateur,mdp -e "mirror -R --only-newer /chemin/en/local/dossier /chemin/sur/le/ftp ; put /home/votre utilisateur/backup/nom_du_fichier ; quit"

Chapitre suivant