| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| lamp [Le 11/05/2019, 12:45] – [Envoi de courriel] nicolas84 | lamp [Le 30/01/2026, 12:14] (Version actuelle) – [Réinstallation complète] apache2-bin et -mod-dnssd utilisé par certains outils GNOME krodelabestiole |
|---|
| {{tag>serveur }} | {{tag>serveur réseau internet web}} |
| ---- | |
| ====== 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]]. | [[wpfr>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 ; |
| * **[[:apache2|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 performant, et 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]]. |
| |
| 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. | 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 (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. 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 ==== |
| |
| Cette méthode consiste à [[:tutoriel:comment_installer_un_paquet|installer]] les paquets nécessaires pour Apache, PHP et MySQL :\\ | Cette méthode consiste à [[:deb#installer_un_paquet_deb|installer les paquets]] nécessaires pour Apache, PHP et MySQL : |
| <code bash>sudo apt install apache2 php libapache2-mod-php mysql-server 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]] au lieu de [[:MySQL]] : |
| <code bash>sudo apt install apache2 php libapache2-mod-php mariadb-server 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) | |
| |
| 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 [[php#modules|modules de PHP]] pour bénéficier de certaines fonctionnalités.\\ |
| |
| Description des paquets : | Description des paquets : |
| * Le paquet [[apt>apache2|apache2]] installe le serveur HTTP [[:apache2 |Apache 2]] (c'est une dépendance de libapache2-mod-php). | * Le paquet ''[[apt>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]] (aussi installé ici en dépendance de libapache2-mod-php). | * Le paquet ''[[apt>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]]'' 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]]'' 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]]'' 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]]'' 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 : |
| * [[http://localhost]] | * [[http://localhost]] |
| |
| 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é. |
| |
| Selon la version installée, vous pouvez aussi avoir une page intitulée « Apache2 Ubuntu Default Page ». | 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**).\\ | 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**).\\ |
| </note> | </note> |
| | |
| | ==== Méthodes alternatives ==== |
| | |
| | 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 [[:distributions#Debian]] et Ubuntu documentée sur ce site. |
| | |
| | === installation via Bitnami === |
| | |
| | [[https://bitnami.com/|Bitnami]] est un fournisseur d'[[:web#applications web]] telles que [[:WordPress]] ou [[: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>Pour éviter des erreurs avec Bitnami, installez le paquet ''[[apt>libncurses6]]'' s'il ne l'est pas déjà avant d'installer LAMP.</note> |
| |
| ===== Personnalisation de l'installation ===== | ===== Personnalisation de l'installation ===== |
| <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 === |
| ===== Utilisation ===== | ===== 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ée MySQL]]. | 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 ==== | ==== 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//, en créera un fichier ///etc/apache2/sites-available/example.com.conf// contenant : | 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> | <file - example.com.conf><VirtualHost *:80> |
| </VirtualHost></file> | </VirtualHost></file> |
| |
| On déploiera ici les fichiers du site dans le répertoire ///var/www/example//. | 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 : | Puis on active l'hôte virtuel et on recharge la configuration d'Apache : |
| ==== Création d'une base de donnée et d'un utilisateur associé ==== | ==== 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//) : | 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> | <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) : | 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; | <code mysql>CREATE DATABASE example; |
| GRANT ALL PRIVILEGES ON example.* TO 'userExample'@'localhost' IDENTIFIED BY 'mot_de_passe'; | CREATE USER 'userExample'@'localhost' IDENTIFIED BY 'mot_de_passe'; |
| | GRANT ALL PRIVILEGES ON example.* TO 'userExample'@'localhost'; |
| FLUSH PRIVILEGES; | FLUSH PRIVILEGES; |
| QUIT;</code> | QUIT;</code> |
| [[:Postfix]] et [[:Exim]] sont des serveurs SMTP, et demandent au minimum un gros travail de configuration. | [[: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.\\ | 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. | 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//. | 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_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 : | 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 | <code> |
| lrwxrwxrwx 1 root root 5 Jul 15 2014 /usr/sbin/sendmail -> ssmtp</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]]. |
| | |
| | ===== Réinstallation complète ===== |
| | |
| | Il peut arriver que d'anciennes configurations de [[:PHP]] et d'[[:apache2|Apache]] ou autres [[:web#serveurs|serveurs Web]] ([[:Nginx]], [[:Lighttpd]], [[https://caddyserver.com/|Caddy]], ...) entrent en conflit avec une nouvelle installation. |
| | * Si vous souhaitez continuer à utiliser votre ancienne installation en plus du serveur [[:apache2|Apache]], vous devriez sans doute considérer la containérisation avec [[:Docker]] par exemple. |
| | * Il est aussi possible de déployer plusieurs [[:web#applications web|services Web]], avec un même [[:web#serveurs|serveur Web]] et toujours la même version de [[:PHP]], grâce aux [[:apache2#hôtes virtuels]] (//VirtualHosts//). |
| | * Si vous souhaitez tout de même supprimer cette ancienne configuration, vous pouvez continuer à suivre cette procédure pour réinitialiser complètement [[:PHP]] et [[:apache2|Apache]]. |
| |
| <note important> | <note important> |
| sSMTP n'est plus mis à jour, privilégiez [[:msmtp]] | Pour réinstaller le gestionnaire de base de données, voir le chapitre //[[:mysql#Réinstallation complète]]// de la page concernant [[:MySQL]]. |
| | </note> |
| |
| Pour qu'il fonctionne avec php, il faudra peut-être modifier le fichier php.ini (chercher et modifier la ligne) : | Pour supprimer tous les paquets concernant [[:PHP]], [[:apache2|Apache]], [[:Nginx]] ou [[:Lighttpd]] (vérifiez bien ce qui va être désinstallé avant de valider !) : |
| | sudo apt autopurge ~n^php ~n^nginx ~n^lighttpd ~n^libapache2-mod-php apache2 apache2-data apache2-utils |
| |
| <file - /etc/php/7.2/apache2/php.ini> | Nous allons ensuite rendre les anciennes configurations inaccessibles : |
| sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t" | |
| </file> | |
| Le fichier de configuration doit appartenir a www-data et avoir des droits 600 : | |
| <code> | <code> |
| sudo chown www-data:www-data /etc/msmtprc | sudo mv /etc/php /etc/php.bak |
| sudo chmod 600 /etc/msmtprc | sudo mv /etc/apache2 /etc/apache2.bak |
| </code> | </code> |
| |
| FIXME Utiliser un deuxième fichier de configuration pour ne pas interférer avec le système ? | Vous pouvez ensuite recommencer l'[[#Installation|installation de LAMP]] normalement. |
| </note> | |
| |
| ===== Problèmes courants ===== | ===== 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> | <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> |
| | |
| | ==== Page blanche ==== |
| | |
| | Voir comment [[:php#page_blanche|résoudre le problème]] sur la page concernant PHP. |
| | |
| | ==== Code source visible dans le navigateur ==== |
| | |
| | Le problème a aussi son [[:php#code_source_visible_dans_le_navigateur|chapitre dédié]] sur la page PHP. |
| | |
| | ==== Erreurs numérotées ==== |
| | |
| | Les erreurs affichées dans le navigateur, numérotées de 400 à 599, sont des [[wpfr>Liste_des_codes_HTTP|codes HTTP]] retournés par Apache. |
| | |
| | Elles sont donc décrites sur la [[:apache2#problemes_courants|page concernant Apache]]. |
| |
| ==== Conflit entre MySQL et MariaDB ==== | ==== Conflit entre MySQL et MariaDB ==== |
| |
| 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]]. | 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 ===== |
| |
| * [[:MariaDB]] | * [[:MariaDB]] |
| * [[:tutoriel:lamp_repertoires_de_travail|Serveur LAMP - Créer un/des répertoires de travail]] | * [[:tutoriel:lamp_repertoires_de_travail|Serveur LAMP - Créer un/des répertoires de travail]] |
| | * [[?do=backlink|liste des pages]] abordant le sujet sur notre wiki |
| | |
| |
| //Contributeurs : [[utilisateurs:krodelabestiole]], [[utilisateurs:oxossi]], [[utilisateurs:albanmartel]], [[utilisateurs:harren]].// | //Contributeurs : [[utilisateurs:krodelabestiole]], [[utilisateurs:oxossi]], [[utilisateurs:albanmartel]], [[utilisateurs:harren]].// |