Différences
Ci-dessous, les différences entre deux révisions de la page.
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 26/04/2018, 16:08] bcag2 [Méthode recommandée : installation des paquets] |
lamp [Le 15/09/2021, 11:14] so_good [Création d'un hôte virtuel] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
{{tag>serveur }} | {{tag>serveur }} | ||
- | ---- | + | |
====== Serveur web - LAMP ======= | ====== Serveur web - LAMP ======= | ||
Ligne 6: | Ligne 6: | ||
* **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 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 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 [[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]]). | ||
Ligne 17: | Ligne 17: | ||
==== 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> |
- | <note tip>//php-mbstring// n'est plus nécessaire sous [[:bionic|Ubuntu 18.04 - Bionic]]</note> | + | |
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 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. | ||
- | <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 47: | ||
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 [[: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, mais celle qui nous intéresse, c'est [[https://bitnami.com/stack/lamp|LAMP]]. Il suffit de télécharger l'exécutable, autoriser son exécution puis l'exécuter en suivant les instructions. | ||
+ | |||
+ | <note important>Si **[[apt>libncurses5]]** n'est pas installé, installez-le avant de lancer l'installation de LAMP sinon vous allez rencontrer des erreurs.</note> | ||
===== Personnalisation de l'installation ===== | ===== Personnalisation de l'installation ===== | ||
Ligne 93: | 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 103: | Ligne 101: | ||
===== 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]]. |
- | 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 : | + | ==== 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> | <file - example.com.conf><VirtualHost *:80> | ||
- | DocumentRoot "/var/www/example" | ||
ServerName example.com | ServerName example.com | ||
ServerAlias www.example.com | ServerAlias www.example.com | ||
+ | DocumentRoot "/var/www/example" | ||
<Directory "/var/www/example"> | <Directory "/var/www/example"> | ||
Options FollowSymLinks | Options FollowSymLinks | ||
Ligne 120: | Ligne 120: | ||
</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 : | ||
Ligne 126: | Ligne 126: | ||
sudo systemctl reload apache2</code> | sudo systemctl reload apache2</code> | ||
- | On se connecte ensuite au serveur MySQL (en ajoutant //-p// si on a spécifié un mot de passe pour //root//) : | + | <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> |
- | <code>sudo mysql -u root</code> | + | |
+ | ==== 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) : | + | 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>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; | ||
- | EXIT</code> | + | QUIT;</code> |
Il faudra finalement renseigner ces informations de connexion lors de l'installation ou la configuration de la solution web. | 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 : | + | Pour plus de détails, consultez la documentation //[[:mysql#base_de_donnee|création de bases de données]]//. |
- | * [[:apache2#creation_d_hotes_virtuels|création d'hôtes virtuels]] | + | |
- | * [[:mysql#base_de_donnee|création de bases de données]] | + | |
===== Envoi de courriel ===== | ===== Envoi de courriel ===== | ||
Ligne 155: | Ligne 158: | ||
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 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 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 : |
<code>ls -al /usr/sbin/sendmail | <code>ls -al /usr/sbin/sendmail | ||
lrwxrwxrwx 1 root root 5 Jul 15 2014 /usr/sbin/sendmail -> ssmtp</code> | lrwxrwxrwx 1 root root 5 Jul 15 2014 /usr/sbin/sendmail -> ssmtp</code> | ||
- | ===== Problèmes courants ===== | + | <note important> |
+ | sSMTP n'est plus mis à jour, privilégiez [[:msmtp]] | ||
- | ==== Conflits potentiels entre plusieurs versions de PHP ==== | + | Pour qu'il fonctionne avec php, il faudra peut-être modifier le fichier php.ini (chercher et modifier la ligne) : |
- | 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]]).\\ | + | <file - /etc/php/7.2/apache2/php.ini> |
- | Cela peut par ex. rendre des modules de PHP inaccessibles alors qu'ils semblent bien installés. | + | 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> | ||
+ | sudo chown www-data:www-data /etc/msmtprc | ||
+ | sudo chmod 600 /etc/msmtprc | ||
+ | </code> | ||
- | Vous pouvez vérifier cela avec cette commande : | + | FIXME Utiliser un deuxième fichier de configuration pour ne pas interférer avec le système ? (pour que root reste propriétaire du fichier de configuration principal) Exemple /etc/msmtprc_php |
- | <code>apt list php* | grep install</code> | + | </note> |
- | 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). | + | |
+ | ===== 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 181: | Ligne 194: | ||
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)** | + | * [[:apache2|Apache]] |
- | * [[xampp]] Une version de LAMP simplifiée, servant pour le développement (seulement). | + | * [[: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]].// |