Serveur web - LAMP

LAMP est un acronyme pour Linux, Apache, MySQL, PHP. C'est une pile logicielle comprenant le système d'exploitation, un serveur HTTP, un système de gestion de bases de données et un langage de programmation interprété, et qui permet de mettre en place un serveur web.

  • Linux : le système d'exploitation, on peut déployer la pile LAMP sur la plupart des distributions GNU/Linux ;
  • Apache : le serveur HTTP, il permet au serveur de communiquer avec le navigateur en utilisant le protocole HTTP(S) ;
  • 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 en 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 interprété 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 web. Au moyen de son navigateur il effectue une requête sur un serveur web en appelant une URL sur le domaine du serveur. Le module PHP d'Apache va interpréter un script qui envoie une requête au serveur MySQL en lui demandant les informations de l'utilisateur. Une fois ces informations récupérées, le script PHP met en forme le résultat sous forme de page web (HTML) qui est envoyée au navigateur web.

On peut déployer la pile 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

La pile LAMP est alors installée. 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
php-mbstring n'est plus nécessaire sous Ubuntu 18.04 - Bionic

Description des paquets :

  • Le paquet apache2 installe le serveur HTTP Apache 2.
  • Le paquet php méta-paquet permettant d'installer au moins un interpréteur PHP PHP.
  • Le paquet libapache2-mod-php 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 base données MariaDB.
  • Le paquet php-mysql installe les 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 souci.

sudo mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'le_mot_de_pass_choisi';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;

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).

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.

Configuration de MySQL

La configuration et les détails à propos du serveur de base de données sont accessibles sur la page dédiée à MySQL ou celle dédiée à MariaDB.

Il est courant d'installer également PHPMyAdmin afin de gérer la base de donnée MySQL dans une interface Web écrite en PHP.
On peut aussi utiliser Adminer qui est plus simple à installer (il s'agit d'un simple fichier PHP) et propose à peu près les mêmes fonctionnalités.

Configuration du démarrage automatique de LAMP

Par défaut, Apache et MySQL ou MariaDB démarrent automatiquement lorsque vous allumez votre ordinateur.

Empêcher LAMP de démarrer automatiquement

Pour empêcher cela :

sudo systemctl disable apache2

Et pour mysql :

sudo systemctl disable mysql

Vous pourrez donc ensuite les lancer manuellement.

Pour Apache :

sudo systemctl start apache2

et pour MySql

sudo systemctl start mysql

Les commandes disponibles sont systemctl start, systemctl stop, et systemctl restart.

Réactiver le démarrage automatique

Pour réactiver les services automatiquement au démarrage, c'est simple :

sudo systemctl enable apache2
sudo systemctl enable mysql

La mise en place d'un site internet, CMS, ou autre application web se fait en général en créant un hôte virtuel pour Apache, et une base de donnée MySQL.

Par exemple pour mettre en place une solution qu'on appellera ici example sur un nom de domaine example.com, en créera un fichier /etc/apache2/sites-available/example.com.conf contenant :

example.com.conf
<VirtualHost *:80>
	ServerName example.com
	ServerAlias www.example.com
	DocumentRoot "/var/www/example"
	<Directory "/var/www/example">
		Options FollowSymLinks
		AllowOverride all
		Require all granted
	</Directory>
	ErrorLog /var/log/apache2/error.example.com.log
	CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>

On déploiera ici les fichiers du site dans le répertoire /var/www/example.

Puis on active l'hôte virtuel et on recharge la configuration d'Apache :

sudo a2ensite example.com
sudo systemctl reload apache2

On se connecte ensuite au serveur MySQL (en ajoutant -p si on a spécifié un mot de passe pour root) :

sudo mysql -u root

Puis on créé une base de données example associée à un utilisateur userExample (en remplaçant mot_de_passe par un mot de passe complexe) :

CREATE DATABASE example;
GRANT ALL PRIVILEGES ON example.* TO 'userExample'@'localhost' IDENTIFIED BY 'mot_de_passe';
FLUSH PRIVILEGES;
EXIT

Il faudra finalement renseigner ces informations de connexion lors de l'installation ou la configuration de la solution web.

Pour plus de détails, consultez les documentations respectives :

Sans configuration préalable votre serveur (et donc PHP) est incapable d'envoyer un courriel.
Il existe plusieurs solutions.

La plus évidente serait de monter un serveur de messagerie sur sa machine (avec Postfix ou Exim par ex.). Cependant cette solution n'est pas adaptée à la plupart des situations. Elle est très lourde logistiquement, compliquée à mettre en place, et demande un gros investissement de maintenance.

SMTP est le nom du protocole qui permet de transférer des courriels. Donc un serveur SMTP, on dit aussi MTA (pour Mail Transfert Agent), reçoit ou envoie des courriels.
Tous les fournisseurs de messagerie donnent accès à un serveur SMTP, dont on doit habituellement indiquer les informations de connexion dans un client tel que Thunderbird pour qu'il envoie nos messages.
Postfix et Exim sont des serveurs SMTP, et demandent au minimum un gros travail de configuration.

Il existe un autre projet, sSMTP qui n'est pas un serveur SMTP, plutôt un client SMTP. Il permet de se connecter à un serveur SMTP distant qui se charge de l'envoi des messages. Sa configuration s'apparente donc à celle d'un serveur d'envoi dans Thunderbird.
Sa mise en place et son utilisation est donc incomparablement plus simple que celle d'un serveur de messagerie complet, et il ne requiert pas nécessairement l'ouverture du port 25.

Historiquement on utilisait Sendmail comme serveur SMTP sur GNU/Linux. Les logiciels sous Ubuntu tels que PHP font donc appel à la fonction /usr/sbin/sendmail. Pour des raisons de simplicité lorsqu'on installe une solution d'envoi de courriel, que ce soit postfix, exim ou ssmtp, /usr/sbin/sendmail est remplacé par un lien symbolique vers cette solution. C'est ce qui permet au système d'envoyer des courriels, et à la fonction mail() de PHP de fonctionner :

ls -al /usr/sbin/sendmail
lrwxrwxrwx 1 root root 5 Jul 15  2014 /usr/sbin/sendmail -> ssmtp

Conflits potentiels entre plusieurs versions de PHP

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

Contributeurs : krodelabestiole, oxossi, albanmartel, harren.

  • lamp.txt
  • Dernière modification: Le 16/05/2018, 13:36
  • par 92.133.88.35