Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tutoriel:reseau:http:serveur:lemp:start [2024/09/21 10:24] – supprimée - modification externe (Unknown date) 127.0.0.1 | tutoriel:reseau:http:serveur:lemp:start [2024/09/21 22:29] (Version actuelle) – [Mise en place de PHP] 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 accédé via **SSH**) | ||
| + | * mis à jour :<cli prompt=' | ||
| + | USER@MACHINE: | ||
| + | USER@MACHINE: | ||
| + | ===== Première étape ===== | ||
| + | |||
| + | < | ||
| + | - **Installez [[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 / | ||
| + | USER@MACHINE: | ||
| + | - **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=' | ||
| + | USER@MACHINE: | ||
| + | - **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 [[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 ' | ||
| + | |||
| + | <cli prompt='> | ||
| + | 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/ | ||
| + | # Add index.php to the list if you are using PHP | ||
| + | index index.html index.htm index.nginx-debian.html; | ||
| + | </ | ||
| + | # Add index.php to the list if you are using PHP | ||
| + | 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): | ||
| + | # | ||
| + | #} | ||
| + | </ | ||
| + | # pass PHP scripts to FastCGI server | ||
| + | # | ||
| + | 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 **/ | ||
| + | <?php | ||
| + | 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 :<cli prompt=' | ||
| + | - **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 ) | ||
| + | ...</ | ||
| + | - et utilisez-la pour installer sqlite :<cli prompt=' | ||
| + | ... | ||
| + | Souhaitez-vous continuer ? [O/n] | ||
| + | ...</ | ||
| + | - Configurer MariaDB : vérifiez que MariaDb est bien démarré :<cli prompt=' | ||
| + | active</ | ||
| + | </ | ||
| + | |||
| + | ==== Démarrer le gestionnaire de processus FastCGI ==== | ||
| + | |||
| + | < | ||
| + | - **Affichez la version de php** :<cli prompt=' | ||
| + | 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** (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 / { | ||
| + | # | ||
| + | # } | ||
| + | #} | ||
| + | </ | ||
| + | ++++ | ||
| + | |||
| + | < | ||
| + | - **Dupliquez le fichier / | ||
| + | - **Éditez avec les droits d' | ||
| + | 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 :<cli prompt=' | ||
| + | nginx: the configuration file / | ||
| + | nginx: configuration file / | ||
| + | USER@MACHINE: | ||
| + | - Créez un fichier / | ||
| + | <?php phpinfo()?> | ||
| + | </ | ||
| + | - Vérification : [[http:// | ||
| + | </ | ||
| + | |||
| + | ==== Serveurs virtuels ==== | ||
| + | |||
| + | Créez avec les droits d' | ||
| + | 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 :<cli prompt=' | ||
| + | |||
| + | === Configuration d' | ||
| + | |||
| + | === Configurer Nginx pour gérer automatiquement les sous-domaines locaux === | ||
| + | |||
| + | < | ||
| + | - **Création d’un nouveau site nginx** : | ||
| + | - **Éditez avec les droits d' | ||
| + | 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** :<cli prompt=' | ||
| + | - <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 [[apt> | ||
| + | - Éditez avec les droits d' | ||
| + | address=/ | ||
| + | </ | ||
| + | address=/ | ||
| + | </ | ||
| + | - redémarrez dnsmasq :<cli prompt=' | ||
| + | </ | ||
| + | |||
| + | Désormais, tous les domaines ***.mondomaine.tld** existent. | ||
| + | |||
| + | Vous pouvez le vérifier : | ||
| + | - **Installez [[apt> | ||
| + | - Lancez :<cli prompt=' | ||
| + | |||
| + | ; <<>> | ||
| + | ;; 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 ===== | ||
| + | |||
| + | ~~FAQ~~ | ||
| + | |||
| + | ??? 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:// | ||