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/01/2015, 15:31]
albanmartel
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 =======+
  
-Un serveur **[[wpfr>​LAMP]]** est un serveur Web. Historiquement,​ l'acronyme ​« LAMP » fait référence aux quatre composantes d'un tel 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]].
-  * **L**inux ​: le système d'​exploitation constituant la base du système. Iciil s'agit d'​[[:​ubuntu_distribution |Ubuntu]]. +
-  * **A**pache ​: le serveur HTTP qui gère la communication avec le client. +
-  * **M**ySQL ​le système de gestion de base de données+
-  * **P**HP : le langage de script utilisé pour générer les pages dynamiques.+
  
-<note >Les serveurs ​Linux/Apache/​MySQL associés à [[:Python]] ou [[http://fr.wikipedia.org/​wiki/​Perl_%28langage%29|Perl]] ​au lieu de PHP sont également appelés ​serveur ​« LAMP »Cependantpour des soucis ​de simplicité,​ seul le cas (majoritaireoù PHP est utilisé comme langage de script est présenté iciVous pouvez obtenir des informations sur [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=395008|l'​installation ​de Python dans Apache ​sur le forum]]</​note>​+  * **Linux** : le système d'​exploitation. On peut déployer la pile LAMP sur la plupart des distributions GNU/Linux ; 
 +  * **[[:apache2|Apache]]** le serveur HTTPIl 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éesIl 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 dynamiquementIl s'agit la plupart du temps de pages [[wpfr>​HTML]]. 
 + 
 +Voici un exemple typique d’utilisationUn internaute veut afficher son profil sur un site webAu 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 =====
  
-Le prérequis pour un serveur "LAMP" est d'​avoir un système d'​exploitation GNU/Linux. La première étape est donc d'[[:installation ​|installer Ubuntu]] (ou une de ses [[:​variantes]]). La variante [[:​ubuntu_server|Ubuntu server]] est particulièrement adaptée dans le cas d'un serveur ​de production ​contrôlable à distance (par [[:ssh]] notamment) ​et ne nécessitant pas d'​interface graphique. +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). ​
-==== Alternative 1: Installation par tâches ====+
  
-=== Méthode ​graphique ​===+==== Méthode ​recommandée : installation des paquets ====
  
-Préalable : installer ​[[apt>​tasksel]]+Cette méthode consiste à [[:​tutoriel:​comment_installer_un_paquet|installer]] les paquets nécessaires pour Apache, PHP et MySQL :\\
  
-[[:​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. +<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 
-=== Méthode en lignes de code === +<code bash>​sudo apt install apache2 ​php libapache2-mod-php mariadb-server php-mysql</​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 [[:terminal |commande]] : +
-  ​sudo tasksel ​install ​lamp-server +
- +
-<note warning>​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.(([[https://​help.ubuntu.com/​community/​Tasksel|Tasksel sur Help Ubuntu]])) et (([[https://​launchpad.net/​bugs/​574287|tasksel:​ forcefully removes packages when tasks overlap]]))</​note>​ +
-<​note>​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, je pense que les autres packages peuvent être désinstallés via Tasksel tout comme via apt-get. À certifier.</note> +
- +
-ou sans passer par tasksel  +
- +
-<​code>​sudo apt-get install lamp-server^</​code>​ +
-//​**N'​oubliez pas** le caractère **^** en fin de ligne.//  +
- +
- +
-==== Alternative 2 : Installation des paquets (méthode recommandée) ==== +
- +
-Une alternative à la méthode précédente consiste à [[:tutoriel:​comment_installer_un_paquet|installer]] directement les paquets nécessaires :\\ +
-**[[apt>​apache2,​php5,​mysql-server |apache2, php5, mysql-server]]** +
- +
-En ligne de commande ​+
-<code bash>​sudo apt-get install apache2 ​php5 mysql-server ​libapache2-mod-php5 php5-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.\\
 +Voici comment installer les modules les plus courants :
 +<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 [[: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>php5|php5]] installe le langage ​[[:php |PHP 5]] +  * 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-php5|libapache2-mod-php5]] (module d'intégration dans Apache) est installé automatiquement ((grâce aux dépendances du précédent ​( à vérifier) )). +  * 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 [[:mysql |MySQL]]. +  * Le paquet [[apt>​mysql-server|mysql-server]] installe le serveur ​de bases données ​[[:mysql |MySQL]]. 
-  * Le paquet [[apt>php5-mysql|php5-mysql]] installe ​le module ​d'interface ​avec PHP. ((vérifier s'il n'est pas installé automatiquement grâce aux dépendances (non réalisé pour Ubuntu 13.04) )).+  * 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 modules permettant ​d'utiliser MySQL ou MariaDB ​avec PHP.
  
 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 61: Ligne 42:
 Si le message << **It works!** >> s'​affiche,​ votre serveur Lamp est correctement installé. Si le message << **It works!** >> s'​affiche,​ votre serveur Lamp est correctement installé.
  
-Sinon consultez les notes ci-dessous : +Selon la version installée, vous pouvez aussi avoir une page intitulée « Apache2 Ubuntu Default Page ».
- +
-<note important>​Si après l'​installationle serveur refuse d'​ouvrir les fichiers en PHP (Firefox ​vous demande si vous voulez télécharger la page en PHP), il faudra vider le cache de Firefox (ça peut suffire) et parfois (ré)installer le paquet libapache2-mod-php5. De même il arrive qu'il faille (ré)installer le paquet php5-mysql si PHP ne dispose pas des instructions de gestion des bases de données MySQL.</​note>​+
  
 <​note>​ <​note>​
-Les méthodes ​d'​installation ​décrites ​ici permettent ​d'​obtenir un serveur ​"LAMP" ​pré-configuré et fonctionnel.\\ +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**).\\
-Une configuration n'est donc nécessaire que dans le cas d'une personnalisation de l'​installation.+
 </​note>​ </​note>​
  
 +==== Méthodes alternatives ====
  
-===== personnalisation de l'installation =====+Il existe d'autres méthodes pour déployer un serveur LAMP : [[:​docker_lamp|docker]],​ [[:XAMPP]], virtualisation ou autre. Ces 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.
  
-==== Configuration d'​Apache 2 ====+=== installation via Bitnami ​===
  
-==== Personnaliser Apache2 ====+[[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.
  
-La configuration et les détails à propos d'​Apache 2 sont accessibles sur la [[:apache2 |page dédiée à ce serveur HTTP]].+<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>​
  
-La configuration et les détails ​ pour permettre à chaque utilisateur d'avoir son propre site dans public_html sont accessibles sur la page [[apache2#​mod_userdir_gerer_les_dossiers_utilisateur| Page dédiée <<​public_html>>​]].+===== Personnalisation de l'installation =====
  
 +==== Configuration d'​Apache 2 ====
  
-==== Configuration de PHP ====+La configuration et les détails à propos d'​Apache 2 sont accessibles sur la [[:apache2 |page dédiée à ce serveur HTTP]].
  
-La configuration et les détails à propos de PHP sont accessibles sur la [[:php |page dédiée à ce langage]]. 
 ==== Configuration de MySQL ==== ==== Configuration de MySQL ====
  
-La configuration et les détails à propos de MySQL sont accessibles sur la [[:mysql |page dédiée à ce serveur de base de données]]+La configuration et les détails à propos ​du serveur ​de base de données ​sont accessibles sur la [[:mysql |page dédiée à MySQL]] ou [[:mariadb|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. +
-==== Configuration du répertoire de travail ====+
  
-La configuration du répertoire de travail ​est accessible sur cette [[tutoriel:lamp_repertoires_de_travail ​|page]]+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) et propose à peu près les mêmes fonctionnalités.
  
 ==== Configuration du démarrage automatique de LAMP ==== ==== Configuration du démarrage automatique de LAMP ====
  
-=== Empêcher LAMP de démarrer automatiquement ​ ==== +Par défaut, ​Apache et MySQL ou MariaDB démarrent ​automatiquement lorsque vous allumez votre ordinateur.
-Par défaut, ​apache démarre ​automatiquement lorsque vous allumez votre ordinateur. +
-Pour empêcher celà: +
-<​code>​sudo update-rc.d -f apache2 disable</​code>​+
  
-Et pour mysql: +=== Empêcher LAMP de démarrer automatiquement ​ ===
-<​code>​sudo sh -c "echo manual >> /​etc/​init/​mysql.override"</​code>​+
  
 +Pour empêcher cela :
 +<​code>​sudo systemctl disable apache2</​code>​
  
-===== Utilisation et accès au serveur ===== +Et pour mysql 
-Une fois l'​installation effectuée, le serveur est accessible (via un navigateur internet) à l'une des URL (locales) suivantes+<​code>​sudo systemctl disable mysql</code>
-  * 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. De la plus simple à la plus complète : [[http://​websyys.olympe.in/​localserver-indicator-raccourcis-pour-serveur-local-ubuntu-13-10.html|localserver-indicator]],​ [[https://​launchpad.net/​localhost-indicator|localhost-indicator]],​ [[https://​launchpad.net/​rapache|rapache]] et [[webmin]] (à utiliser avec prudence).+Vous pourrez donc ensuite les lancer manuellement.
  
 +Pour Apache :
 +<​code>​sudo systemctl start apache2</​code>​
 +
 +et pour MySql
 +<​code>​sudo systemctl start mysql</​code>​
 +
 +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 :
 +<​code>​sudo systemctl enable apache2
 +sudo systemctl enable mysql</​code>​
 +
 +===== Utilisation =====
 +
 +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]].
 +
 +==== 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 :
 +
 +<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>​
 +
 +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 :
 +<​code>​sudo a2ensite example.com
 +sudo systemctl reload apache2</​code>​
 +
 +<note tip>Pour plus de détails, consultez 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>​
 +
 +==== 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 ====
 +
 +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 :
 +<​code>​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.</​code>​
 +ou encore :
 +<​code>​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.</​code>​
 +
 +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]].
 ===== 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). 
  
-//​Contributeurs : [[utilisateurs:​oxossi]],​ [[utilisateurs:​albanmartel]]+  * [[:​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]].//​
  • lamp.1421073113.txt.gz
  • Dernière modification: Le 12/01/2015, 15:31
  • par albanmartel