Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
lamp [Le 12/03/2018, 02:33]
krodelabestiole [Serveur web - LAMP]
lamp [Le 18/01/2024, 17:20] (Version actuelle)
lyondif02 [Méthodes alternatives] typo.
Ligne 1: Ligne 1:
 {{tag>​serveur }} {{tag>​serveur }}
-----+
 ====== Serveur web - LAMP ======= ====== Serveur web - LAMP =======
  
 LAMP est un acronyme pour **L**inux, **A**pache, **M**ySQL, **P**HP. ​ 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 [[:​web#​serveurs|serveur web]]. LAMP est un acronyme pour **L**inux, **A**pache, **M**ySQL, **P**HP. ​ 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 [[:​web#​serveurs|serveur web]].
  
-  * **Linux** : le système d'​exploitation, on peut déployer la pile LAMP sur la plupart des distributions GNU/Linux ; +  * **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) ; +  * **[[:apache2|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 performantet 100% compatible MySQL). +  * **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 fourni ​par le logiciel [[:MySQL]] ou par [[:​MariaDB]] (fork plus ouvert, plus performant et 100 % compatible ​avec 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 [[wpfr>​HTML]]).+  * **[[:​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 [[wpfr>​HTML]]
 + 
 +Voici un exemple typique d’utilisation. Un internaute veut afficher son profil sur un site web. Au moyen de son navigateur, il effectue une requête sur un [[:​web#​serveurs|serveur web]] en appelant une [[:​web#​url|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 (HTMLqui est envoyée au navigateur web.
  
-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 [[:​web#​serveurs|serveur web]] en appelant une [[:​web#​url|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. 
 ===== Installation ===== ===== Installation =====
  
-On peut déployer la pile LAMP sur n'​importe quelle version ou [[:​variantes|variante]] d'​Ubuntu. La variante [[:​ubuntu_server|Ubuntu server]] est particulièrement adaptée dans le cas d'un serveur "​headless"​ (sans interface graphique) contrôlable à distance (par [[:ssh]] notamment). ​+On peut déployer la pile LAMP sur n'​importe quelle version ou [[:​variantes|variante]] d'​Ubuntu ​(le système d'​explotation que vous utilisez). La variante [[:​ubuntu_server|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 ==== ==== Méthode recommandée : installation des paquets ====
- 
-<note warning>​À partir d'​Ubuntu 16.04 les paquets doivent être installés par le biais d'un terminal pour fonctionner correctement (voir note ci-dessous).</​note>​ 
  
 Cette méthode consiste à [[:​tutoriel:​comment_installer_un_paquet|installer]] les paquets nécessaires pour Apache, PHP et MySQL :\\ Cette méthode consiste à [[:​tutoriel:​comment_installer_un_paquet|installer]] les paquets nécessaires pour Apache, PHP et MySQL :\\
  
-<code bash>​sudo apt install apache2 php mysql-server ​libapache2-mod-php php-mysql</​code>​+<code bash>​sudo apt install apache2 php libapache2-mod-php ​mysql-server ​php-mysql</​code>​
 ou si vous préférez opter pour [[:​mariadb|MariaDB]] au lieu de MySQL : ou si vous préférez opter pour [[:​mariadb|MariaDB]] au lieu de MySQL :
-<code bash>​sudo apt install apache2 php mariadb-server ​libapache2-mod-php php-mysql</​code>​+<code bash>​sudo apt install apache2 php libapache2-mod-php ​mariadb-server ​php-mysql</​code>​
  
- +La pile LAMP est alors installée. Cependant la plupart des scripts ​[[:PHP]] ([[:CMS]], forums, applications web en tout genre) utilisent des [[php#​modules|modules de PHP]] pour bénéficier de certaines fonctionnalités.\\
-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 : Voici comment installer les modules les plus courants :
-<code bash>​sudo apt install php-curl php-gd php-intl php-json php-mbstring ​php-mcrypt ​php-xml php-zip</​code>​+<code bash>​sudo apt install php-curl php-gd php-intl php-json php-mbstring php-xml php-zip</​code>​
  
 Description des paquets : Description des paquets :
-  * Le paquet [[apt>​apache2|apache2]] installe le serveur HTTP [[:apache2 |Apache 2]].   +  * Le paquet [[apt>​apache2|apache2]] installe le serveur HTTP [[:apache2 |Apache 2]] (c'est une dépendance de libapache2-mod-php).   
-  * Le paquet [[apt>​php|php]] méta-paquet permettant d'​installer au moins un interpréteur ​PHP [[:php |PHP]]. +  * Le paquet [[apt>​php|php]] méta-paquet permettant d'​installer au moins un interpréteur [[:​PHP]] ​(aussi installé ici en dépendance de libapache2-mod-php)
-  * Le paquet [[apt>​libapache2-mod-php|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 [[apt>​libapache2-mod-php|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 [[apt>​mysql-server|mysql-server]] installe le serveur de bases données [[:mysql |MySQL]].   * Le paquet [[apt>​mysql-server|mysql-server]] installe le serveur de bases données [[:mysql |MySQL]].
   * Le paquet [[apt>​mariadb-server|mariadb-server]] installe le serveur de base données [[:​mariadb|MariaDB]].   * Le paquet [[apt>​mariadb-server|mariadb-server]] installe le serveur de base données [[:​mariadb|MariaDB]].
-  * Le paquet [[apt>​php-mysql|php-mysql]] installe les module ​permettant d'​utiliser MySQL ou MariaDB avec PHP. +  * Le paquet [[apt>​php-mysql|php-mysql]] installe les modules ​permettant d'​utiliser MySQL ou MariaDB avec PHP.
- +
-<note important>​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 <​code>​sudo apt install mysql-server</​code>​ 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. +
-<​code>​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;</​code>​ +
-</​note>​ +
  
 Une fois les paquets installés, ouvrez un des liens suivants dans votre navigateur : Une fois les paquets installés, ouvrez un des liens suivants dans votre navigateur :
Ligne 59: Ligne 48:
 </​note>​ </​note>​
  
 +==== Méthodes alternatives ====
  
-.+Il existe d'​autres méthodes pour déployer un serveur LAMP : [[:​docker_lamp|docker]],​ [[:XAMPP]], virtualisation ou autreCes méthodes ne sont généralement pas recommandées,​ en particulier si vous êtes débutant, car elles ne fournissent pas la configuration par défaut sécurisée et standardisée pour [[:​debian_ubuntu_comparaison|Debian]] et Ubuntu documentée sur ce site. 
 + 
 +=== installation via Bitnami === 
 + 
 +[[https://​bitnami.com/​|Bitnami]] est un fournisseur d'​applications web telles que Wordpress et Moodle. Celle qui nous intéresse est [[https://​bitnami.com/​stack/​lamp|LAMP]]. Il suffit de télécharger l'​exécutable correspondant,​ d’autoriser son exécution puis de l'​exécuter en suivant les instructions. 
 + 
 +<note important>​Si **[[apt>​libncurses5]]** n'est pas installé, installez-le avant de démarrer l'​installation de LAMP. Sinon vous allez rencontrer des erreurs.</​note>​
  
 ===== Personnalisation de l'​installation ===== ===== Personnalisation de l'​installation =====
Ligne 73: Ligne 69:
  
 Il est courant d'​installer également [[:​PHPMyAdmin]] afin de gérer la base de donnée MySQL dans une interface Web écrite en PHP.\\ 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 [[https://​www.adminer.org/​|Adminer]] qui est plus simple à installer (il s'agit d'un simple fichier PHP). +On peut aussi utiliser [[https://​www.adminer.org/​|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 répertoire de travail ==== +
- +
-La configuration du répertoire de travail est accessible sur cette [[tutoriel:​lamp_repertoires_de_travail |page]] +
  
 ==== Configuration du démarrage automatique de LAMP ==== ==== Configuration du démarrage automatique de LAMP ====
  
-Par défaut, ​apache démarre ​automatiquement lorsque vous allumez votre ordinateur.+Par défaut, ​Apache et MySQL ou MariaDB démarrent ​automatiquement lorsque vous allumez votre ordinateur.
  
 === Empêcher LAMP de démarrer automatiquement ​ === === Empêcher LAMP de démarrer automatiquement ​ ===
Ligne 100: Ligne 91:
 <​code>​sudo systemctl start mysql</​code>​ <​code>​sudo systemctl start mysql</​code>​
  
-Les commandes disponibles sont //systemctl start////systemctl stop//, et //systemctl restart//.+Les commandes disponibles sont ''​systemctl start''​''​systemctl stop''​, et ''​systemctl restart''​.
  
 === Réactiver le démarrage automatique === === Réactiver le démarrage automatique ===
Ligne 108: Ligne 99:
 sudo systemctl enable mysql</​code>​ sudo systemctl enable mysql</​code>​
  
-===== Utilisation ​et accès au serveur ​=====+===== Utilisation =====
  
-Une fois l'installation effectuée, le serveur est accessible (via un navigateur ​internet) à l'une des URL (locales) suivantes: +La mise en place d'​un ​site internet, [[:CMS]], ou autre application web se fait en général en [[:apache2#​creation_d_hotes_virtuels|créant un hôte virtuel]] pour [[:apache2|Apache]],​ et une [[:mysql#​base_de_donnee|base ​de données MySQL]].
-  * http://​127.0.0.1 +
-  * http://​localhost +
-  * http://hostname ("​hostname"​ étant le nom de votre ordinateur)+
  
-Il existe des interfaces graphiques pour utiliser Apache et MySQL : [[https://​launchpad.net/​localhost-indicator|localhost-indicator]],​ [[https://​launchpad.net/​rapache|rapache]] et [[webmin]] (à utiliser avec prudence).+==== Création d'un hôte virtuel ====
  
 +Par exemple pour mettre en place une solution qu'on appellera ici ''​example''​ sur un nom de domaine ''​example.com'',​ on créera un fichier ''/​etc/​apache2/​sites-available/​example.com.conf''​ contenant :
  
-===== Problèmes courants =====+<file - 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></​file>​
  
-==== Conflits potentiels entre plusieurs versions de PHP ====+On déploiera ici les fichiers du site dans le répertoire ''/​var/​www/​example''​.
  
-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_lamp|docker]]).\\ +Puis on active l'​hôte virtuel et on recharge la configuration ​d'Apache ​: 
-Cela peut par ex. rendre des modules de PHP inaccessibles alors qu'ils semblent bien installés.+<​code>​sudo a2ensite example.com 
 +sudo systemctl reload apache2</​code>​
  
-Vous pouvez vérifier cela avec cette commande : +<note tip>Pour plus de détailsconsultez ​la documentation //​[[:​apache2#​creation_d_hotes_virtuels|Création ​d'hôtes virtuels]]//​et pour des exemples pratiques consultez le tutoriel //​[[:​tutoriel:​lamp_repertoires_de_travail|Créer un/des répertoires de travail]]//.</​note>​
-<code>apt list php* | grep install</​code>​ +
-Si vous voyez apparaître plusieurs versions ​de phppar 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 Xenialphp7.1 sur Artful) puis réinstallez les paquets absents si nécessaire (libapache2-mod-php,​ etc).+
  
 +==== Création d'une base de donnée et d'un utilisateur associé ====
 +
 +On se connecte ensuite au serveur MySQL (en ajoutant ''​-p''​ si on a spécifié un mot de passe pour ''​root''​) :
 +<​code>​sudo mysql</​code>​
 +
 +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) :
 +<code mysql>​CREATE DATABASE example;
 +CREATE USER '​userExample'​@'​localhost'​ IDENTIFIED BY '​mot_de_passe';​
 +GRANT ALL PRIVILEGES ON example.* TO '​userExample'​@'​localhost';​
 +FLUSH PRIVILEGES;
 +QUIT;</​code>​
 +
 +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 la documentation //​[[:​mysql#​base_de_donnee|création de bases de données]]//​.
 +
 +===== Envoi de courriel =====
 +
 +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 [[:​serveurs_messagerie|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.
 +
 +[[wpfr>​Simple_Mail_Transfer_Protocol|SMTP]] est le nom du protocole qui permet de transférer des courriels. Donc un serveur SMTP, on dit aussi [[wpfr>​Mail_Transfer_Agent|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 [[:​courriel#​principaux_clients_de_messagerie|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, **[[:​msmtp]]** 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 msmtp, ''/​usr/​sbin/​sendmail''​ est remplacé par un [[:​lien_physique_et_symbolique|lien symbolique]] vers cette solution. C'est ce qui permet au système d'​envoyer des courriels, et à la fonction //​[[http://​php.net/​manual/​fr/​function.mail.php|mail()]]//​ de PHP de fonctionner :
 +<​code>​
 +ls -al /​usr/​sbin/​sendmail
 +lrwxrwxrwx 1 root root 12 nov.  28  2016 /​usr/​sbin/​sendmail -> ../​bin/​msmtp
 +</​code>​
 +
 +Pour mettre en place **msmtp**, n'​hésitez pas à consulter la [[:​msmtp|page de documentation dédiée]].
 +
 +===== Problèmes courants =====
 +
 +<note tip>En fonction du problème que vous rencontrez, consultez également les problèmes courants spécifiques à [[:​apache2#​problemes_courants|Apache]],​ ceux de [[:​php#​problemes_courants|PHP]] ou ceux de [[:​mysql#​problemes_courants|MySQL]].</​note>​
  
 ==== Conflit entre MySQL et MariaDB ==== ==== Conflit entre MySQL et MariaDB ====
Ligne 140: Ligne 181:
 Upgrade process encountered error and will not continue.</​code>​ Upgrade process encountered error and will not continue.</​code>​
  
-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 ! +Dans ce cas le plus simple est de supprimer les paquets ainsi que tous les fichiers de configuration de votre serveur de bases de données ​en [[:​mysql#​reinstallation_complete|réinstallant complètement MySQL ou MariaDB]].
- +
-<​code>​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</​code>​+
 ===== Voir aussi ===== ===== Voir aussi =====
-  ​* [[http://​www.it-connect.fr/​installer-un-serveur-lamp-linux-apache-mysql-php/​|Tutoriel ​Mise en place d'un serveur LAMP sur IT-Connect ​]] **(fr)** + 
-  * [[xampp]] Une version de LAMP simplifiée,​ servant pour le développement (seulement).+  ​* [[:apache2|Apache]] 
 +  * [[:PHP]] 
 +  ​[[:MySQL]] 
 +  * [[:MariaDB]] 
 +  * [[:​tutoriel:​lamp_repertoires_de_travail|Serveur ​LAMP - Créer un/des répertoires de travail]]
  
 //​Contributeurs : [[utilisateurs:​krodelabestiole]],​ [[utilisateurs:​oxossi]],​ [[utilisateurs:​albanmartel]],​ [[utilisateurs:​harren]].//​ //​Contributeurs : [[utilisateurs:​krodelabestiole]],​ [[utilisateurs:​oxossi]],​ [[utilisateurs:​albanmartel]],​ [[utilisateurs:​harren]].//​
  • lamp.1520818433.txt.gz
  • Dernière modification: Le 12/03/2018, 02:33
  • par krodelabestiole