Contenu | Rechercher | Menus

Serveur web - LAMP

Un serveur LAMP est un serveur web. Un serveur web fournit des sites internet, des applications ou autres services accessibles par un navigateur web. LAMP est un acronyme pour Linux, Apache, MySQL, PHP. Il s'agit probablement de la configuration la plus courante pour un serveur web :

  • Linux : système d'exploitation, on peut déployer le stack LAMP sur la plupart des distributions GNU/Linux (mais ici nous traiterons spécifiquement d'ubuntu).
  • Apache : serveur HTTP, il permet au serveur de communiquer avec le navigateur en utilisant le protocole HTTP(S) et ses extensions (WebDAV, etc.).
  • MySQL : il s'agit d'un serveur de bases de données. Il sert à stocker, à manipuler et à accéder à des listes de données organisées par tableaux. Ce service peut être fournit par le logiciel MySQL ou par MariaDB (fork plus ouvert, plus performant, et 100% compatible MySQL).
  • PHP : PHP est un langage de programmation (et son interpréteur) qui permet de générer du contenu web "dynamiquement" (il s'agit la plupart du temps de pages HTML).

Un exemple type : un internaute veut afficher son profil sur un site internet. Au moyen de son navigateur il effectue une requête sur un serveur web en appelant une URL sur le domaine du serveur. Apache lance alors automatiquement le module PHP. PHP va interpréter un script : pour répondre à la requête du navigateur il va à son tour envoyer une requête au serveur MySQL en lui demandant les informations de l'utilisateur. Une fois ces informations récupérées, toujours en suivant le script, PHP mettra en forme le résultat sous forme de page web (HTML). Apache pourra alors retourner cette page au navigateur qui l'affichera.

Installation

On peut déployer le stack LAMP sur n'importe quelle version ou variante d'ubuntu. La variante Ubuntu server est particulièrement adaptée dans le cas d'un serveur "headless" (sans interface graphique) contrôlable à distance (par ssh notamment).

Méthode recommandée : Installation des paquets

À partir d'Ubuntu 16.04 les paquets doivent être installés par le biais d'un terminal pour fonctionner correctement (voir note ci-dessous).

Cette méthode consiste à installer les paquets nécessaires pour Apache, PHP et MySQL :

sudo apt install apache2 php mysql-server libapache2-mod-php php-mysql

ou si vous préférez opter pour MariaDB au lieu de MySQL :

sudo apt install apache2 php mariadb-server libapache2-mod-php php-mysql

Le stack LAMP est alors installé. Cependant la plupart des scripts PHP (CMS, forums, applications web en tout genre) utilisent des modules de PHP pour bénéficier de certaines fonctionnalités.
Voici comment installer les modules les plus courants :

sudo apt install php-curl php-gd php-intl php-json php-mbstring php-mcrypt php-xml php-zip

Description des paquets :

  • Le paquet apache2 installe le serveur HTTP Apache 2.
  • Le paquet php installe le logiciel permettant d'interpreter le langage PHP.
  • Le paquet libapache2-mod-php permet d'utiliser PHP en tant que module d'Apache (on peut aussi utiliser PHP en ligne de commande ou indépendamment en FastCGI, ce qui le rend plus performant mais plus compliqué à mettre en place)
  • Le paquet mysql-server installe le serveur de bases données MySQL.
  • Le paquet mariadb-server installe le serveur de bases données MariaDB.
  • Le paquet php-mysql installe le module permettant d'utiliser MySQL ou MariaDB avec PHP.
L'installation du paquet mysql-server en cliquant simplement sur un lien apt crée un problème à l'installation ! L'installeur ne demande pas le mot de passe pour mysql-server et l'accès est dès lors compliqué à mysql. Installez bien ce paquet en utilisant le terminal et la commande
sudo apt install mysql-server

comme indiqué juste au dessus. Vous pouvez consulter cette discussion https://forum.ubuntu-fr.org/viewtopic.php?pid=21588812#p21588812 Pour ceux qui auraient le problème de connexion mysql sur la 16.04, voici la manip à faire pour régler le soucis.

sudo mysql -u root
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

Une fois les paquets installés, ouvrez un des liens suivants dans votre navigateur :

Si le message « It works! » s'affiche, votre serveur Lamp est correctement installé.

Selon la version installée, vous pouvez aussi avoir une page intitulée « Apache2 Ubuntu Default Page ».

La méthode d'installation décrite ici permet d'obtenir un serveur LAMP pré-configuré et fonctionnel, affichant le contenu du répertoire /var/www/html (par défaut les fichiers index.html ou index.php).

Alternative : Installation par tâches

Méthode graphique

Préalable : installer tasksel

Synaptic permet d'installer automatiquement tous les paquets correspondant à une tâche. La liste des tâches est accessible par le menu Édition/Sélectionner paquets par tâches. Il suffit de sélectionner « serveur LAMP » et de valider puis de cliquer sur le bouton « Appliquer » pour installer les paquets nécessaires.

Méthode en lignes de code

Tasksel permet également d'installer automatiquement tous les paquets nécessaires sans avoir recours à une interface graphique. Dans le cas d'un serveur "LAMP", l'installation complète se résume à l'utilisation d'une seule commande :

sudo tasksel install lamp-server
Si vous voulez désinstaller LAMP, ne faites surtout pas "sudo tasksel remove lamp-server".
Tasksel ne doit jamais être utilisé pour la suppression de paquet.
Celui-ci supprime les paquets nécessaires au reste du système sans se poser de question.1) et 2)
En fait, c'est le package lamp-server^ (avec l'accent circonflexe) qu'il ne faut pas désinstaller. Que ce soit via apt-get ou tasksel. En revanche,les autres packages peuvent être désinstallés via Tasksel tout comme via apt-get.

ou sans passer par tasksel

sudo apt-get install lamp-server^

N'oubliez pas le caractère ^ en fin de ligne. .

personnalisation de l'installation

Configuration d'Apache 2

La configuration et les détails à propos d'Apache 2 sont accessibles sur la page dédiée à ce serveur HTTP.

La configuration et les détails pour permettre à chaque utilisateur d'avoir son propre site dans public_html sont accessibles sur la page Page dédiée <<public_html>>.

Ceci est utile en toute circonstance avec un Debian et un Ubuntu.

Configuration de MySQL

La configuration et les détails à propos de MySQL sont accessibles sur la page dédiée à ce serveur de base de données. Il est courant d'installer également PHPMyAdmin afin de gérer la base de donnée MySQL dans une interface Web écrite en PHP.

Configuration du répertoire de travail

La configuration du répertoire de travail est accessible sur cette page

Configuration du démarrage automatique de LAMP

Empêcher LAMP de démarrer automatiquement

FIXME

La documentation indiquée dans ce paragraphe n'est plus d'actualité. Ne suivez pas cette procédure.

Par défaut, apache démarre automatiquement lorsque vous allumez votre ordinateur. Pour empêcher cela :

sudo update-rc.d -f apache2 disable

Et pour mysql:

sudo sh -c "echo manual >> /etc/init/mysql.override."

Vous pourrez donc ensuite les lancer manuellement: Pour Apache:

/etc/init.d/apache2 start

et pour MySql

mysql -u root -p -hlocalhost

Utilisation et accès au serveur

Une fois l'installation effectuée, le serveur est accessible (via un navigateur internet) à l'une des URL (locales) suivantes:

Il existe des interfaces graphiques pour utiliser Apache et MySQL : localhost-indicator, rapache et webmin (à utiliser avec prudence).

Problèmes courants

Plusieurs version de PHP installées simultanément

Il est possible que plusieurs versions de PHP soient installées simultanément, par ex. après une mise à jour majeure d'ubuntu si vous avez spécifié le numéro de version de PHP lors de l'installation des paquets, ou si vous avez ajouté un PPA exotique pour installer une version spécifique de PHP (mauvaise idée, il vaut mieux dans ce cas utiliser docker).
Cela peut par ex. rendre des modules de PHP inaccessibles alors qu'ils semblent bien installés.

Vous pouvez vérifier cela avec cette commande :

apt list php* | grep install

Si vous voyez apparaître plusieurs versions de php, par ex. php7.0 php7.1 ou php5.6, vous avez un problème. Dans ce cas supprimez les versions de PHP qui ne correspondent pas à la version proposée par les dépôts officiels d'ubuntu (php7.0 sur Xenial, php7.1 sur Artful) puis réinstallez les paquets absents si nécessaire (libapache2-mod-php, etc).

Conflit entre MySQL et MariaDB

Si vous avez installé MariaDB et que vous cherchez à passer sur MySQL, il est possible que vous rencontriez une erreur de ce type lors de l'installation de votre paquet :

Aborting downgrade from (at least) 10.0 to 5.7.
If are sure you want to downgrade to 5.7, remove the file
/var/lib/mysql/debian-*.flag and try installing again.

ou encore :

mysql_upgrade: Got error: 1524: Plugin 'unix_socket' is not loaded while connecting to the MySQL server
Upgrade process encountered error and will not continue.

Dans ce cas il faut supprimer les paquets ainsi que tous les fichiers de configuration de votre serveur de bases de données. Attention cela rendra les bases de données existantes inaccessibles !

sudo apt autoremove --purge mysql* mariadb*
sudo apt clean
sudo mv /var/lib/mysql /var/lib/mysql_bak
sudo mv /etc/mysql /etc/mysql_bak
sudo apt install mysql-server

Voir aussi

Contributeurs : oxossi, albanmartel, harren.



Le contenu de ce wiki est sous licence : CC BY-SA v3.0