[Tuto – Infrastructure Web – Debian 8] – Un serveur LAMP
5 (100%) 2 votes

Introduction

Le besoin est simple : avoir un serveur web modulable, configurable, indépendant de sa machine de travail et le plus proche possible des configurations proposées par les hébergeurs pro.

Ce tuto va vous permettre de créer une machine virtuelle avec un serveur web, un serveur de bases de données (avec phpMyAdmin) et un serveur FTP pour transférer vos fichiers.

Ce tuto fait parti d’un ensemble qui conduit à créer une infrastructure de serveurs web avec différents rôles : “[Tuto – Infrastructure Web – Debian 8] – Présentation et objectifs”.
Vous devez avoir préparé et cloné la machine gabarit pour continuer.
Voir “[Tuto – Infrastructure Web – Debian 8] – La machine gabarit” puis « [Tuto – Infrastructure Web – Debian 8] – Cloner et préparer la machine gabarit« .

Vous devez avoir des connaissances sur l’utilisation de Linux via une connexion SSH ainsi qu’une certaine aisance avec les commandes d’un shell Linux.

Comptez env. 1h de configuration en partant d’une VM fraichement clonée et paramétrée sur votre réseau.
… et encore, je suis large !

Modifications et mises à jour du document

27/07/2005 : Ajout du bonus 2

27/07/2015 : Changement d’emplacement des fichiers de configuration pour le site de test.

27/07/2015 : Ajout des commandes de modifications rapides du fichier de configuration Apache pour le site de test.

26/07/2015 : Ajout des commandes de modifications rapides du fichier /etc/vsftpd.conf

17/07/2015 : Ajout activation de modules Apache, ajout configurations supplémentaires dans php.conf

15/07/2015 : Publication initiale

Avertissement

Cette machine est construite pour vous permettre de créer des sites web dans un environnement de test, le plus proche possible d’un serveur de production se rapprochant d’un serveur mutualisé chez un hébergeur comme 1&1.

Bien qu’elle possède (presque) tout d’un serveur web mutualisé voir dédié, elle n’est pas à utiliser en production puisqu’elle ne possède aucun moyen de défense contre d’éventuelles intrusions.

Par conséquent, vous êtes seul responsable si vous vous contentez de suivre ce tutoriel pour une mise en ligne d’un serveur web sur internet avec un accès public.

Vous voilà averti, passons aux choses sérieuses.

Installer le serveur Web

Apache

Utilisons Apache, un serveur web très répandu bien que Nginx commence à bien faire parler de lui.
Je vais installer Apache MPM ITK, une variante d’Apache qui est multi-thread et surtout permet d’utiliser des UID et GID différents pour plus de sécurité.

Une fois l’installation terminée, vous pouvez tester votre serveur.
Ouvrez un navigateur web, et utilisez cette adresse : http://10.0.0.100 (ou l’ip que vous avez configurée).

Apache2 Debian Default Page: It works - Mozilla Firefox_113

Prenez le temps de consulter cette page, elle contient des informations utiles pour ajouter un site web.

Le site par défaut est placé dans le répertoire /var/www/html/

Quelques modules à activer :

PHP

Nous allons utiliser PHP5-FPM qui permet d’exécuter des threads php indépendant d’un site web à l’autre avec des utilisateurs différents.

Pour pouvoir utiliser cette version de php, il faut ajouter le module Apache fatcgi :

Puis installons PHP5-FPM avec déjà des modules utiles pour la plupart des sites web :

PHP5-FPM fonctionne avec des fichiers pool qui contiennent la configuration de PHP5-FPM pour un site donné.
Il faut un pool par site web.
Par défaut, le pool www.conf est créé dans le répertoire /etc/php5/fpm/pool.d.

Créez un fichier /var/www/html/phpinfo.php :

Pour le moment, Apache n’a pas encore les directives pour transférer les fichiers php à PHP5-FPM qui les interprétera.
Donc si vous appelez le fichier dans votre navigateur vous aurez une page vide.

Éditez le fichier /etc/apache2/sites-enabled/000-default.conf et ajoutez ces lignes après « DocumentRoot »

Relancez Apache et PHP5-FPM :

Rafraichissez votre navigateur :

phpinfo() - Mozilla Firefox_114PHP5-FPM fonctionne.

MySQL

L’installation de MySQL est relativement simple :

Durant l’installation, vous devez fournir le mot de passe root qui devra être différent de l’utilisateur root du système.

Debian 8 - MySQL - Mot de passe root

La configuration de MySQL se gère dans le fichier /etc/mysql/my.cnf

Par défaut, la configuration est correcte pour un serveur de développement ou de recettage.

Vérifiez que le serveur est disponible :

Saisissez le mot de passe root défini à l’installation.
Résultat :

Votre serveur fonctionne. Tapez « exit » pour quitter le client MySQL.

La bonne habitude à prendre est de sécuriser un minimum votre serveur MySQL :

phpMyAdmin

phpMyAdmin va permettre de gérer vos bases de données via un navigateur.

Bien sûr vous pouvez également procéder à une installation manuelle via le site phpMyAdmin.
Mais vous devrez vous-même assurer les mises à jour.

Sélectionnez « apache2 » :

Debian 8 - phpMyAdmin - Serveur web à reconfigurer automatiquement

phpMyAdmin a besoin d’une base de données pour fonctionner correctement, mais ce n’est pas obligatoire.
Sélectionnez « Oui » et validez.

Debian 8 - phpMyAdmin - Configuration de la base de données

Vous devez donner l’accès root, du moins temporairement, pour configurer la base de données de phpMyAdmin.
Attention, l’écran qui arrive après n’est pas pour valider le mot de passe.
Ne ressaisissez pas le mot de passe root !!

Debian 8 - phpMyAdmin - Accès administrateur

Laissez phpMyAdmin générer un mot de passe aléatoire, c’est plus « secure » :

Debian 8 - phpMyAdmin - Mot de passe de connexion MySQL pour phpmyadmin

Une fois l’installation terminée, vous pouvez accédez à phpMyAdmin via l’url : http://10.0.0.100/phpmyadmin

phpMyAdmin - Mozilla Firefox_120

Connectez-vous avec l’utilisateur root et le mot de passe configuré à l’installation pour valider l’accès :

10.0.0.100 - localhost | phpMyAdmin 4.2.12deb2 - Mozilla Firefox_121

Vous avez maintenant la main pour créer et gérer vos bases de données sur votre serveur lamp.

vsFTPd

vsFTPd permet d’avoir accès à votre serveur web par FTP.
Je vais vous montrer comment installer rapidement une connexion FTP non sécurisée (et donc à ne pas utiliser sur un serveur avec un accès public).

Le fichier de configuration est : /etc/vsftpd.conf

Faites-en une copie au cas où…

Ouvrez ce fichier et apportez les modifications suivantes.
Si nécessaire, ajouter les lignes manquantes à la fin du fichier.

Vous pouvez exécuter ces commandes pour modifier rapidement le fichier :

Redémarrez le service vsftpd :

Ouvrez un client FTP comme FileZilla ou WinSCP (pour windows uniquement).

Dans la barre de connexion rapide, tapez l’IP du serveur et les identifiants de connexion de l’utilisateur configuré à l’installation du serveur :

Debian 8 - vsFTPd - Connexion rapide avec FileZillaVous allez probablement avoir ce message d’erreur :

Pas de panique, c’est normal puisque nous avons chrooté les utilisateurs. C’est à dire que nous avons demandé à vsFTPd « d’enfermer » les connexions FTP dans le répertoire racine de chaque utilisateur. Ils ne peuvent donc pas aller n’importe où sur le serveur (avec les conséquences qu’on peut aisément imaginer !)

Il faut donc modifier les droits du répertoire home de l’utilisateur de 755 en 700 :

Retentez une connexion FTP et là tout va bien :

Debian 8 - vsFTPd - Connexion FileZilla chroot

Astuce : pour afficher les fichiers cachés dans FileZilla, menu « Serveur » puis « Forcer l’affichage des fichiers cachés ».

Créer un hébergement web

Maintenant que nous avons tout ce qu’il faut pour travailler, nous allons voir comment créer un hébergement pour un site web sur notre serveur lamp.

Dans ma console ssh, je vais utiliser 2 variables qui éviteront de me tromper et de gagner du temps par des copier/coller directement de cette page vers ma console ssh :

Dans l’exemple, je vais créer un site web « test.jbnet.lan » dans le répertoire /home de l’utilistateur « jbnet-user ».

Création du répertoire racine

A l’aide de FileZilla, créez l’arborescence suivante à la racine de votre compte.

Ou en ssh :

Dans le répertoire /test/html, créez le fichier phpinfo.php :

En ssh :

Vous l’avez compris, c’est ici que seront envoyés les fichiers de votre site web.

Copiez les fichiers de configuration Apache et PHP5-FPM par défaut dans le répertoire /conf du site web :

Configuration Apache

Éditez le fichier apache.conf et apportez les modifications pour arriver à ce fichier en ajustant suivant vos paramètres :

En ssh :

Activez le nouveau site web :

Si vous avez laissé le fichier de configuration dans le répertoire /etc/apache2/sites-available :

Sinon il faut créer un lien symbolique :

Ne redémarrez pas Apache, il faut d’abord configurer PHP5-FPM.

Configuration PHP5-FPM

Si ce n’est déjà fait, copier le fichier /etc/apache2/sites-available/000-default.conf vers /home/jbnet-user/test/conf/php.conf

Éditez le fichier php.conf et apportez les modifications suivantes en fonction de vos paramètres :

Nom du pool : test

En ssh :

Utilisateur et groupe :

En ssh :

Nom du sock php :

En ssh :

Permission du sock :

En ssh :

Laissez le reste par défaut.

Ajoutez à la fin du fichier quelques lignes de configuration pour un site de développement :

Il faut maintenant indiquer à PHP5-FPM l’emplacement du fichier à prendre en compte :

Redémarrez les services Apache et PHP5-FPM :

Vérification

Puisque j’ai utilisé un nom de domaine local, test.jbnet.lan, je ne vais pas pouvoir y avoir accès juste en tapant ce nom de domaine dans mon navigateur.
2 solutions :

  1. Soit vous ajoutez une entrée dans le serveur DNS du domaine (sur un réseau d’entreprise) ou celui de votre box (si vous êtes chez vous).
  2. Soit vous utilisez le fichier hosts.

Si on est chez soit et qu’on fait des tests, on va juste modifier le fichier hosts.
Sous Windows : C:\WINDOWS\system32\drivers\etc\hosts
Sous Linux : /etc/hosts

Il faut être root ou administrateur de sa machine pour modifier ce fichier.

Dans tous les cas, son utilisation est identique.
Il faut ajouter une ligne :

Ensuite, utilisez votre navigateur pour vérifier que le site fonctionne.

phpinfo() - Mozilla Firefox_125

Félicitation, vous venez de créer un hébergement fonctionnel pour votre site web.

Vous pouvez créer autant de site que vous voulez en repartant du chapitre « Créer un site web ».

Bonus : dupliquer un hébergement

Créer le modèle d’hébergement

C’est en fait ce que vous venez de faire !
Donc passons à la suite…

Utiliser le modèle d’hébergement

A la racine du répertoire où se trouvent les hébergements, dupliquez le répertoire test avec le nom de votre nouveau projet (jbnet.loc pour l’exemple) :

Attention, si vous avez exécuté cette commande avec root, il faut redonner les bons UID et GID :

Créez les liens symboliques vers les fichiers de configuration pour que Apache et PHP5-FPM puissent les charger :

Dans le fichier /home/jbnet-user/jbnet.loc/conf/apache.conf, modifiez les lignes :

Dans le fichier /home/jbnet-user/jbnet.loc/conf/php.conf, modifiez les lignes :

Il y a d’autres paramètres qui pourraient être utile de modifier sur un hébergement en production.
Mais là il s’agit d’un hébergement en local, pour du développement. Les modifications apportées sont largement suffisantes pour le moment.

Redémarrez les services Apache et PHP5-FPM :

Ajoutez la ligne dans votre hosts :

Testez dans votre navigateur.

Dans le phpinfo, cherchez la ligne « _SERVER[« SCRIPT_FILENAME »] » et vérifiez le chemin d’accès.

phpinfo() - Mozilla Firefox_128

Et voilà !
Votre nouvel hébergement est paré à recevoir votre site web comme un projet WordPress, Joomla, etc..

N’oubliez pas que vous pouvez à tout moment cloner votre VM pour la sauvegarder.
Ou encore, créer une VM par projet, ce qui peut faciliter les sauvegardes et les restaurations rapides d’un « vieux » projet.

Bonus 2 : le script qui fait (presque) tout !

Si vous êtes arrivé jusque là, vous avez alors mérité un petit script tout bête qui va permettre de dupliquer le site de test.

Créez un répertoire /home/jbnet-user/scripts

Puis créez le script /home/jbnet-user/scripts/jbnet-manage.sh :

Avant de l’utiliser, il faut modifier la ligne 2 avec le nom d’utilisateur qui héberge vos sites des dev.
En suite, il faut rendre le script exécutable :

Son utilisation est très simple :

Résultat :

Ajoutez la ligne donnée dans votre fichier hosts …Et c’est tout !

Have Fun !