Différences
Ci-dessous, les différences entre deux révisions de la page.
— | tutoriel:internet:lemp:start [2022/11/08 19:40] (Version actuelle) – créée admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== LEMP : un serveur avec Linux, Nginx, MariaDB, PHP ====== | ||
+ | |||
+ | **LEMP** ((**L**inux, | ||
+ | * **[[logiciel: | ||
+ | * **PHP**, ou plutôt le packet **php-fpm**, | ||
+ | * **[[logiciel: | ||
+ | * **[[logiciel: | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | **Pour le cas d'un Raspberry**, | ||
+ | </ | ||
+ | * un **PC** sous Linux (ubuntu) (ou un Raspberry Pi) | ||
+ | * ou un **Raspberry Pi** accédé via **SSH** | ||
+ | * mis à jour :<cli prompt=' | ||
+ | ...@...:~$ sudo apt upgrade | ||
+ | ...@...:~$ sudo apt dist-upgrade</ | ||
+ | |||
+ | ===== Première étape ===== | ||
+ | |||
+ | - **Installez** les paquets **[[apt> | ||
+ | - **Vérifiez que NGINX est bien démarré** : sur un PC du réseau, ouvrez dans un navigateur l' | ||
+ | active</ | ||
+ | - **Sauvegardez les fichiers de configuration** :<cli prompt=' | ||
+ | |||
+ | ===== Autres étapes ===== | ||
+ | |||
+ | - **[[tutoriel: | ||
+ | - **Sauvegardez / | ||
+ | - **Éditez avec les droits d' | ||
+ | * **Remplacez la ligne**< | ||
+ | * **Activez php-fpm** pour Nginx, modifiez les lignes< | ||
+ | # include snippets/ | ||
+ | # | ||
+ | # # With php5-cgi alone: | ||
+ | # fastcgi_pass 127.0.0.1: | ||
+ | # # With php5-fpm: | ||
+ | # fastcgi_pass unix:/ | ||
+ | # | ||
+ | | ||
+ | | ||
+ | | ||
+ | - **Modifiez les droits du dossier / | ||
+ | ...@...:~$ sudo chmod -R 2770 / | ||
+ | - **Ajoutez un fichier index.php** pour vérifier que PHP fonctionne :<cli prompt=' | ||
+ | - **Redémarrez Nginx** pour appliquer les modifications :<cli prompt=' | ||
+ | - **Vérifiez l' | ||
+ | * **Version de PHP installée** :<cli prompt=' | ||
+ | PHP 7.3.19-1~deb10u1 (cli) (built: Jul 5 2020 06:46:45) ( NTS ) | ||
+ | ... | ||
+ | </ | ||
+ | * **État de PHP** :<cli prompt=' | ||
+ | ● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager | ||
+ | ... | ||
+ | | ||
+ | ... | ||
+ | </ | ||
+ | * **Sur un PC du réseau, ouvrez en http l' | ||
+ | - **Installez [[logiciel: | ||
+ | - **Installez [[logiciel: | ||
+ | - **Installez [[logiciel: | ||
+ | - **Sécurisez Nginx** : | ||
+ | * **[[tutoriel: | ||
+ | * **[[tutoriel: | ||
+ | |||
+ | ==== Désinstallation ==== | ||
+ | |||
+ | - **Arrêtez nginx** :<cli prompt=' | ||
+ | - **Démontez /var/www** et **/srv** :<cli prompt=' | ||
+ | ...@...:~$ sudo umount / | ||
+ | - **Retirez (commentez) le montage de /var/www et /srv** :<cli prompt=' | ||
+ | - **Supprimez php-fpm** :<cli prompt=' | ||
+ | - **Supprimez nginx** :<cli prompt=' | ||
+ | - **Terminez l' | ||
+ | - **Effacez /var/www/** et ses sous-répertoires :<cli prompt=' | ||
+ | |||
+ | ==== Installation du serveur MariaDB et du client en ligne de commande ==== | ||
+ | |||
+ | - Installez le paquet **[[apt> | ||
+ | - Vérifiez votre installation en lançant le client MariaDB en ligne de commande :<cli prompt=' | ||
+ | Welcome to the MariaDB monitor. | ||
+ | Your MariaDB connection id is 49 | ||
+ | Server version: 10.3.25-MariaDB-0+deb10u1 Raspbian 10 | ||
+ | |||
+ | Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | MariaDB [(none)]> | ||
+ | Bye | ||
+ | </ | ||
+ | |||
+ | ==== Configuration par défaut de Nginx pour qu'il traite les requêtes PHP ==== | ||
+ | |||
+ | - Faites une copie du fichier **/ | ||
+ | - Répérez le **socket d’écoute de php-fpm** :<cli prompt=' | ||
+ | total 4 | ||
+ | -rw-r--r-- 1 root | ||
+ | srw-rw---- 1 www-data www-data 0 oct. 27 08:15 php7.3-fpm.sock</ | ||
+ | - Éditez avec les droits d' | ||
+ | * remplacez <code - etc/ | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | </ | ||
+ | index index.html index.htm index.php index.nginx-debian.html;</ | ||
+ | * remplacez <code - ># pass PHP scripts to FastCGI server | ||
+ | # | ||
+ | #location ~ \.php$ { | ||
+ | # include snippets/ | ||
+ | # | ||
+ | # # With php-fpm (or other unix sockets): | ||
+ | # | ||
+ | # # With php-cgi (or other tcp sockets): | ||
+ | # | ||
+ | #} | ||
+ | </ | ||
+ | # | ||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | # With php-fpm (or other unix sockets): | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | </ | ||
+ | - Redémarrez Nginx <cli prompt=' | ||
+ | - Pour vérifier que Nginx exécute PHP, créez le fichier **/ | ||
+ | phpinfo();</ | ||
+ | |||
+ | ==== Configurer Nginx pour qu'il traite les requêtes PHP pour un nom de domaine ==== | ||
+ | |||
+ | Supposons que nous souhaitons répondre aux requêtes PHP pour **abcd1234.com**. | ||
+ | |||
+ | Créez avec les droits d' | ||
+ | server { | ||
+ | listen | ||
+ | ## Your website name goes here. | ||
+ | server_name abcd1234.com | ||
+ | root / | ||
+ | ## This should be in your http block and if it is, it's not needed here. | ||
+ | index index.php; | ||
+ | | ||
+ | location / { | ||
+ | try_files $uri $uri/ / | ||
+ | } | ||
+ | | ||
+ | location ~ \.php$ { | ||
+ | include fastcgi.conf; | ||
+ | fastcgi_intercept_errors on; | ||
+ | fastcgi_pass unix:/ | ||
+ | | ||
+ | fastcgi_buffers 16 16k; | ||
+ | fastcgi_buffer_size 32k; | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | ==== Mise en place de PHP ==== | ||
+ | |||
+ | - éditez avec les droits d' | ||
+ | # Site framboise4 | ||
+ | |||
+ | server { | ||
+ | listen 80; | ||
+ | |||
+ | server_name | ||
+ | root / | ||
+ | | ||
+ | location / { | ||
+ | index index.php index.html index.htm index.nginx-debian.html; | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | |||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | server { | ||
+ | listen 80; | ||
+ | |||
+ | server_name | ||
+ | root / | ||
+ | | ||
+ | location / { | ||
+ | index index.php index.html index.htm index.nginx-debian.html; | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | |||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | |||
+ | - Installez les **modules de php** (remplacez **php7.3** par la version trouvée ci-dessus) :<cli prompt=' | ||
+ | * Pour les installer :< | ||
+ | | ||
+ | - **Installez [[logiciel: | ||
+ | - [[logiciel: | ||
+ | * **Installez [[logiciel: | ||
+ | - **Installez la base de données SQL**, selon le cas : | ||
+ | * **MariaDB** : définissez le mot de passe de l' | ||
+ | * **SQLite** :Repérez la version de php installée :<cli prompt=' | ||
+ | PHP 7.4.3 (cli) (built: May 26 2020 12:24:22) ( NTS ) | ||
+ | ...</ | ||
+ | ... | ||
+ | Souhaitez-vous continuer ? [O/n] | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | - Configurer MariaDB : vérifiez que MariaDb est bien démarré :< | ||
+ | active | ||
+ | </ | ||
+ | |||
+ | ==== Démarrer le gestionnaire de processus FastCGI ==== | ||
+ | |||
+ | Affichez la version de php :< | ||
+ | PHP 7.2.19-0ubuntu0.18.04.1 (cli) (built: Jun 4 2019 14:48:12) ( NTS ) | ||
+ | Copyright (c) 1997-2018 The PHP Group | ||
+ | Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies | ||
+ | with Zend OPcache v7.2.19-0ubuntu0.18.04.1, | ||
+ | </ | ||
+ | |||
+ | Démarrez le gestionnaire de processus FastCGI en lançant la commande (aidez-vous de l' | ||
+ | < | ||
+ | Synchronizing state of php7.2-fpm.service with SysV service script with / | ||
+ | Executing: / | ||
+ | |||
+ | PHP-FPM est une alternative à PHP FastCGI. | ||
+ | |||
+ | ==== Configurer et démarrer le serveur NGINX ==== | ||
+ | |||
+ | Une fois PHP installé, il faut indiquer à NGINX d' | ||
+ | |||
+ | ++++ Fichier / | ||
+ | <code - / | ||
+ | ## | ||
+ | # You should look at the following URL's in order to grasp a solid understanding | ||
+ | # of Nginx configuration files in order to fully unleash the power of Nginx. | ||
+ | # https:// | ||
+ | # https:// | ||
+ | # https:// | ||
+ | # | ||
+ | # In most cases, administrators will remove this file from sites-enabled/ | ||
+ | # leave it as reference inside of sites-available where it will continue to be | ||
+ | # updated by the nginx packaging team. | ||
+ | # | ||
+ | # This file will automatically load configuration files provided by other | ||
+ | # applications, | ||
+ | # available underneath a path with that package name, such as /drupal8. | ||
+ | # | ||
+ | # Please see / | ||
+ | ## | ||
+ | |||
+ | # Default server configuration | ||
+ | # | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | |||
+ | # SSL configuration | ||
+ | # | ||
+ | # listen 443 ssl default_server; | ||
+ | # listen [::]:443 ssl default_server; | ||
+ | # | ||
+ | # Note: You should disable gzip for SSL traffic. | ||
+ | # See: https:// | ||
+ | # | ||
+ | # Read up on ssl_ciphers to ensure a secure configuration. | ||
+ | # See: https:// | ||
+ | # | ||
+ | # Self signed certs generated by the ssl-cert package | ||
+ | # Don't use them in a production server! | ||
+ | # | ||
+ | # include snippets/ | ||
+ | |||
+ | root / | ||
+ | |||
+ | # Add index.php to the list if you are using PHP | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name _; | ||
+ | |||
+ | location / { | ||
+ | # First attempt to serve request as file, then | ||
+ | # as directory, then fall back to displaying a 404. | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | # pass PHP scripts to FastCGI server | ||
+ | # | ||
+ | #location ~ \.php$ { | ||
+ | # include snippets/ | ||
+ | # | ||
+ | # # With php-fpm (or other unix sockets): | ||
+ | # | ||
+ | # # With php-cgi (or other tcp sockets): | ||
+ | # | ||
+ | #} | ||
+ | |||
+ | # deny access to .htaccess files, if Apache' | ||
+ | # concurs with nginx' | ||
+ | # | ||
+ | #location ~ /\.ht { | ||
+ | # deny all; | ||
+ | #} | ||
+ | } | ||
+ | |||
+ | |||
+ | # Virtual Host configuration for example.com | ||
+ | # | ||
+ | # You can move that to a different file under sites-available/ | ||
+ | # to sites-enabled/ | ||
+ | # | ||
+ | #server { | ||
+ | # listen 80; | ||
+ | # listen [::]:80; | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # root / | ||
+ | # index index.html; | ||
+ | # | ||
+ | # location / { | ||
+ | # | ||
+ | # } | ||
+ | #} | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | Pour cela, dupliquez le fichier / | ||
+ | < | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | <code - / | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | | ||
+ | root / | ||
+ | | ||
+ | index index.php index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name _; | ||
+ | | ||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | | ||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Testez la configuration : | ||
+ | < | ||
+ | nginx: the configuration file / | ||
+ | nginx: configuration file / | ||
+ | |||
+ | < | ||
+ | $ sudo nginx</ | ||
+ | |||
+ | |||
+ | Créez un fichier / | ||
+ | <code - / | ||
+ | <?php phpinfo()?> | ||
+ | </ | ||
+ | |||
+ | Vérification : [[http:// | ||
+ | |||
+ | ==== Serveurs virtuels ==== | ||
+ | |||
+ | Créez avec les droits d' | ||
+ | <code - / | ||
+ | server { | ||
+ | listen 80; | ||
+ | root / | ||
+ | index index.php index.html index.htm index.nginx-debian.html; | ||
+ | server_name monsite.tld; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | |||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | **__Explications__** | ||
+ | |||
+ | Voici ce que font ces directives et ces blocs location : | ||
+ | |||
+ | ; listen | ||
+ | : Port sur lequel Nginx écoute. | ||
+ | : 80 = port par défaut pour HTTP | ||
+ | ; root | ||
+ | : emplacement de la racine du site Web. | ||
+ | ; index | ||
+ | : fichiers index.php prioritaires | ||
+ | ; server_name | ||
+ | : nom de domaine ou adresse IP de votre serveur. | ||
+ | ; location / | ||
+ | : La directive try_files vérifie l’existence de fichiers demandés | ||
+ | : Si Nginx ne le trouve pas, il retourne une erreur 404. | ||
+ | ; location ~ \.php$ | ||
+ | : gère le traitement PHP en pointant Nginx vers le fichier de configuration fastcgi-php.conf et le fichier php7.2-fpm.sock, | ||
+ | ; location ~ /\.ht | ||
+ | : bloc location pour les fichiers .htaccess, que Nginx ne traite pas. | ||
+ | : La directive deny all ne transmet pas aux visiteurs des éventuels fichiers .htaccess | ||
+ | |||
+ | </ | ||
+ | |||
+ | Activez votre site en créant un lien symbolique dans le dossier **/ | ||
+ | < | ||
+ | |||
+ | Redémarrez nginx : | ||
+ | < | ||
+ | |||
+ | === Configuration d' | ||
+ | |||
+ | === Configurer Nginx pour gérer automatiquement les sous-domaines locaux === | ||
+ | |||
+ | == Création d’un nouveau site nginx == | ||
+ | |||
+ | éditez avec les droits d' | ||
+ | <code - / | ||
+ | server { | ||
+ | # On écoute le port 80. | ||
+ | listen 80; | ||
+ | |||
+ | # expression régulière pour récupérer | ||
+ | # le sous-domaine dans une variable nommée " | ||
+ | server_name | ||
+ | |||
+ | location / { | ||
+ | # On définit le chemin local | ||
+ | # en utilisant la variable " | ||
+ | root / | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Activez votre site en créant un lien symbolique dans le dossier **/ | ||
+ | < | ||
+ | |||
+ | Redémarrez le serveur via la commande : | ||
+ | < | ||
+ | |||
+ | <code - / | ||
+ | # Le nom du sous-domaine est mis dans une variable sub, | ||
+ | # utilisée ensuite pour définir la racine | ||
+ | |||
+ | # Sites dokuwiki | ||
+ | server { | ||
+ | listen 80; | ||
+ | |||
+ | server_name | ||
+ | root / | ||
+ | | ||
+ | location / { | ||
+ | index index.php index.html index.htm; | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | |||
+ | location ~ / | ||
+ | deny all; | ||
+ | } | ||
+ | |||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Autres sous-domaines | ||
+ | server { | ||
+ | listen 80; | ||
+ | |||
+ | server_name | ||
+ | root / | ||
+ | | ||
+ | location / { | ||
+ | index index.php index.html index.htm index.nginx-debian.html; | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | |||
+ | location ~ \.php$ { | ||
+ | include snippets/ | ||
+ | fastcgi_pass unix:/ | ||
+ | } | ||
+ | |||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Création des domaines génériques avec dnsmasq === | ||
+ | |||
+ | Installez le paquet **[[apt> | ||
+ | |||
+ | Ouvrez ou créez avec les droits d' | ||
+ | <code - / | ||
+ | address=/ | ||
+ | </ | ||
+ | |||
+ | Dans notre exemple, nous avons donc ajouter: | ||
+ | <code - / | ||
+ | address=/ | ||
+ | </ | ||
+ | |||
+ | On redémarre dnsmasq :< | ||
+ | |||
+ | Désormais, tous les domaines ***.mondomaine.tld** existent. | ||
+ | |||
+ | Vous pouvez le vérifier : | ||
+ | * Installez le paquet **[[apt> | ||
+ | * Lancez-le :< | ||
+ | |||
+ | ; <<>> | ||
+ | ;; global options: +cmd | ||
+ | ;; Got answer: | ||
+ | ;; ->> | ||
+ | ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 | ||
+ | |||
+ | ;; OPT PSEUDOSECTION: | ||
+ | ; EDNS: version: 0, flags:; udp: 65494 | ||
+ | ;; QUESTION SECTION: | ||
+ | ; | ||
+ | |||
+ | ;; ANSWER SECTION: | ||
+ | test.localhost. 0 IN A 127.0.0.1 | ||
+ | |||
+ | ;; Query time: 0 msec | ||
+ | ;; SERVER: 127.0.0.53# | ||
+ | ;; WHEN: Sat May 04 23:35:51 CEST 2019 | ||
+ | ;; MSG SIZE rcvd: 59 | ||
+ | </ | ||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | ===== Problèmes connus ===== | ||
+ | ??? Erreur 403 forbidden, un classique de Nginx | ||
+ | !!! L’erreur 403 est fréquente avec Nginx, mais simple à corriger. | ||
+ | - Cela peut signifier que Nginx ne trouve pas de fichier à afficher. Pour tester cela, créez un fichier index.html dans le répertoire **/ | ||
+ | - Sinon, c'est peut-etre que Nginx ne peut accéder au répertoire **/ | ||
+ | - Dernière possibilité : vous avez mal activé php. | ||
+ | |||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(fr)** [[https:// | ||
+ | * **(fr)** [[https:// | ||
+ | * **(en)** [[https:// | ||
+ | * **(en)** [[https:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | //Basé sur << [[https:// |