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
Prochaine révision Les deux révisions suivantes
lamp [Le 22/11/2017, 12:21]
krodelabestiole quickfix structure
lamp [Le 06/01/2019, 13:44]
krodelabestiole [Conflit entre MySQL et MariaDB] déplacement de la procédure de réinstallation sur la page mysql
Ligne 3: Ligne 3:
 ====== Serveur web - LAMP ======= ====== Serveur web - LAMP =======
  
-Un serveur **[[wpfr>​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 **L**inux **A**pache **M**ySQL **P**HP. ​Il s'agit probablement de la configuration la plus courante pour un 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** : 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 peut s'agir du logiciel [[:MySQL]] ou de [[:​MariaDB]] (fork plus ouvert, plus performant, et 100% compatible 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. +
-  * **[[:​PHP]]** : le 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 [[wpfr>​HTML]]), par exemple en fonction d'​informations stockées en base de données.+
  
-Un exemple type : le navigateur ​d'un internaute effectue une requête ​sur un serveur web (en appelant une [[wpfr>URL]] sur le domaine du serveur). Apache lance alors automatiquement ​le module PHP.  PHP va interpréter ​un scripten fonction duquel il pourra éventuellement aller chercher ​des données en effectuant à son tour une requête sur le serveur ​MySQL, ​puis il mettra en forme le résultat sous forme de page web (HTML). ​Apache pourra alors retourner ce résultat au navigateur qui l'​affichera. +  * **Linux** ​: le système ​d'exploitation,​ on peut déployer la pile LAMP sur la plupart des distributions GNU/Linux ; 
-===== Installation =====+  * **[[:​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 ouvertplus 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 [[wpfr>HTML]]).
  
-On peut déployer le stack 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). +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 (HTMLqui est envoyée au navigateur web. 
 + 
 +===== Installation =====
  
-==== Méthode recommandée ​Installation des paquets ====+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). ​
  
-<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>​+==== Méthode recommandée : installation des paquets ​====
  
 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>​
  
 +(attention le paquet php installe directement la dernière version de php)
  
-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.\\+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 : 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]] ​installe le logiciel ​permettant d'interpreter le langage ​[[: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-php5|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 [[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 bases 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 ​le module permettant d'​utiliser MySQL ou MariaDB avec PHP. +  * Le paquet [[apt>​php-mysql|php-mysql]] installe ​les module 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. +
-> sudo mysql -u root +
-> DROP USER '​root'​@'​localhost';​ +
-> CREATE USER '​root'​@'​%'​ IDENTIFIED BY '';​ +
-> GRANT ALL PRIVILEGES ON *.* TO '​root'​@'​%';​ +
-> FLUSH PRIVILEGES;​ +
-</​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 50:
 </​note>​ </​note>​
  
-==== Alternative : Installation par tâches ​====+===== Personnalisation de l'​installation =====
  
-=== Méthode graphique ​===+==== Configuration d'​Apache 2 ====
  
-Préalable : installer ​[[apt>​tasksel]]+La configuration et les détails à propos d'​Apache 2 sont accessibles sur la [[:apache2 |page dédiée à ce serveur HTTP]].
  
-[[:​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.+==== Configuration ​de MySQL ====
  
-=== Méthode en lignes ​de code === +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]].
-[[: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"​. \\ +Il est courant d'​installer également [[:​PHPMyAdmin]] afin de gérer ​la base de donnée MySQL dans une interface Web écrite en PHP.\\ 
-__Tasksel ne doit jamais être utilisé pour la suppression ​de paquet__. \\ +On peut aussi utiliser ​[[https://www.adminer.org/|Adminer]] qui est plus simple à installer ​(il s'agit d'un simple fichier PHPet propose à peu près les mêmes fonctionnalités.
-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 circonflexequ'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.</​note>​+
  
-ou sans passer par tasksel ​+==== Configuration du démarrage automatique de LAMP ====
  
-<​code>​sudo apt-get install lamp-server^</​code>​ +Par défaut, Apache et MySQL ou MariaDB démarrent automatiquement lorsque vous allumez votre ordinateur.
-//​**N'​oubliez pas** le caractère **^** en fin de ligne.//  +
-.+
  
-===== personnalisation ​de l'​installation =====+=== Empêcher LAMP de démarrer automatiquement  ​===
  
-==== Configuration d'​Apache 2 ====+Pour empêcher cela : 
 +<​code>​sudo systemctl disable apache2</​code>​
  
-La configuration et les détails à propos d'​Apache 2 sont accessibles sur la [[:apache2 |page dédiée à ce serveur HTTP]].+Et pour mysql : 
 +<​code>​sudo systemctl disable mysql</​code>​
  
-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>>​]].+Vous pourrez donc ensuite ​les lancer manuellement.
  
-Ceci est utile en toute circonstance avec un Debian et un Ubuntu.+Pour Apache : 
 +<​code>​sudo systemctl start apache2</​code>​
  
 +et pour MySql
 +<​code>​sudo systemctl start mysql</​code>​
  
-==== Configuration de MySQL ====+Les commandes disponibles sont //systemctl start//, //systemctl stop//, et //systemctl restart//.
  
-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]]. +=== Réactiver le démarrage automatique ===
-Il est courant d'​installer également [[:​PHPMyAdmin]] afin de gérer la base de donnée MySQL dans une interface Web écrite en PHP.+
  
 +Pour réactiver les services automatiquement au démarrage, c'est simple :
 +<​code>​sudo systemctl enable apache2
 +sudo systemctl enable mysql</​code>​
  
-==== Configuration du répertoire de travail ​====+===== Utilisation =====
  
-La configuration du répertoire de travail est accessible sur cette [[tutoriel:lamp_repertoires_de_travail ​|page]]+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ée MySQL]].
  
 +==== Création d'un hôte virtuel ====
  
-==== Configuration du démarrage automatique ​de LAMP ====+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 :
  
-=== Empêcher LAMP de démarrer automatiquement ​ ===+<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>​
  
-<note warning>​FIXME+On déploiera ici les fichiers du site dans le répertoire ///​var/​www/​example//​.
  
-La documentation indiquée dans ce paragraphe n'est plus d'actualité. Ne suivez pas cette procédure.</note>+Puis on active l'hôte virtuel et on recharge la configuration ​d'Apache : 
 +<​code>​sudo a2ensite example.com 
 +sudo systemctl reload apache2</code>
  
-Par défaut, apache démarre automatiquement lorsque vous allumez votre ordinateur. +<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>
-Pour empêcher cela : +
-<code>sudo update-rc.d -f apache2 ​disable</code>+
  
-Et pour mysql: +==== Création d'une base de donnée et d'un utilisateur associé ====
-<​code>​sudo sh -c "echo manual >> /​etc/​init/​mysql.override."</​code>​+
  
-Vous pourrez donc ensuite ​les lancer manuellement:​ +On se connecte ​ensuite ​au serveur MySQL (en ajoutant //-p// si on a spécifié un mot de passe pour //​root//​) ​
-Pour Apache+<​code>​sudo mysql</​code>​
-<​code>​/​etc/​init.d/​apache2 start</​code>​+
  
-et pour MySql +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 -u root -p -hlocalhost</​code>​+<code mysql>CREATE DATABASE example; 
 +GRANT ALL PRIVILEGES ON example.* TO '​userExample'​@'​localhost'​ IDENTIFIED BY '​mot_de_passe';​ 
 +FLUSH PRIVILEGES;​ 
 +QUIT;</​code>​
  
 +Il faudra finalement renseigner ces informations de connexion lors de l'​installation ou la configuration de la solution web.
  
-===== Utilisation et accès au serveur =====+Pour plus de détails, consultez la documentation //​[[:​mysql#​base_de_donnee|création de bases de données]]//​.
  
-Une fois l'​installation effectuée, le serveur est accessible (via un navigateur internet) à l'une des URL (locales) suivantes:​ +===== Envoi de courriel =====
-  * 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).+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.
  
-===== Problèmes courants =====+[[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.
  
-==== Plusieurs version ​de PHP installées simultanément ====+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.
  
-Il est possible ​que plusieurs versions de PHP soient installées simultanément,​ par exaprè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éeil vaut mieux dans ce cas utiliser ​[[:docker_lamp|docker]]).\\ +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//​. 
-Cela peut par exrendre ​des modules ​de PHP inaccessibles alors qu'ils semblent bien installés.+Pour des raisons de simplicité lorsqu'​on installe ​une solution ​d'envoi de courrielque ce soit postfix, exim ou ssmtp///​usr/​sbin/​sendmail//​ est remplacé par un [[:lien_physique_et_symbolique|lien symbolique]] vers cette solutionC'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 5 Jul 15  2014 /​usr/​sbin/​sendmail -> ssmtp</​code>​
  
-Vous pouvez vérifier cela avec cette commande : +===== Problèmes courants =====
-<​code>​apt list php* | grep install</​code>​ +
-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).+
  
 +<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 160: Ligne 168:
 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). 
  
-//​Contributeurs : [[utilisateurs:​oxossi]],​ [[utilisateurs:​albanmartel]],​ [[utilisateurs:​harren]].+  * [[:​apache2|Apache]] 
 +  * [[:PHP]] 
 +  * [[:​MySQL]] 
 +  * [[:​MariaDB]] 
 + 
 +//​Contributeurs : [[utilisateurs:​krodelabestiole]], ​[[utilisateurs:​oxossi]],​ [[utilisateurs:​albanmartel]],​ [[utilisateurs:​harren]].//
  • lamp.txt
  • Dernière modification: Le 04/09/2024, 11:22
  • par krodelabestiole