Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

LEMP : Installer Nginx, MariaDB, PHP

LEMP est l'acronyme de Linux, NGINX (engine X), MySQL/MariaDB, PHP/Perl/Python

Pour le cas du RaspBerry Pi, voir LEMP sur RPI : Installer Nginx, MariaDB, PHP sur un RaspBerry

7. Pré-requis

  • Système d'exploitation Linux (ubuntu)
  • seveur web NGINX
  • MariaDB
  • PHP 7.2

8. Première étape : Installer NGINX, MariaDB et PHP

Lancez les commandes suivantes pour mettre à jour le système :

$ sudo apt update
$ sudo apt -y upgrade

Installez les paquets nginx-full,mariadb-server,php-fpm,php-mysql ou en ligne de commande :

$ sudo apt install nginx-full mariadb-server php-fpm php-mysql

Démarrez le service NGINX et activez le pour être lancé au démarrage en utilisant les commandes :

$ sudo nginx
$ sudo systemctl enable nginx

Vérifiez que NGINX est bien démarré :

$ sudo systemctl is-active nginx
active

Ouvrez votre navigateur web et allez sur http://localhost or http://127.0.0.1.

La page de test du serveur Nginx s'affiche :

9. Autres étapes

9.1. Configurer MariaDB

Vérifiez que MariaDb est bien démarré, en lançant la commande :

$ sudo systemctl is-active mysqld
active

Lancez la commande :

$ sudo mysql_secure_installation

pour définir le mot de passe de l'utilisateur root de MariaDb (au début, répondre ↵ Entrée car il n'y a pas de mot de passe, puis en donner un).

MariaDB est installé et prêt à l'emploi.

9.2. Démarrer le gestionnaire de processus FastCGI

Démarrez le gestionnaire de processus FastCGI en lançant la commande (aidez-vous de l'auto-complétion) :

$ sudo systemctl enable php7.2-fpm
Synchronizing state of php7.2-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable php7.2-fpm

PHP-FPM est une alternative à PHP FastCGI.

9.3. Configurer et démarrer le serveur NGINX

Une fois PHP installé, il faut indiquer à NGINX d'exécuter PHP en utilisant PHP-FPM.

Fichier /etc/nginx/sites-available/default d'origine

Pour cela, dupliquez le fichier /etc/nginx/sites-available/default :

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist

Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/default pour le remplacer par ceci :

/etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /var/www/html;
    
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;
    
    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }
    
    location ~ /\.ht {
        deny all;
    }
}

Testez la configuration :

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo nginx -s stop
$ sudo nginx

Créez un fichier /var/www/html/test/test.php dans le répertoire web racine de NGINX :

/var/www/html/test/test.php
<?php phpinfo()?>

Vérification : http://localhost/test

9.4. Serveurs virtuels

Créez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite.tld pour y écrire :

/etc/nginx/sites-available/monsite.tld
server {
        listen 80;
        root /var/www/html;
        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-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

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, qui indique le type de socket associé à php-fpm..
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 /etc/nginx/sites-enable :

$ sudo ln -s /etc/nginx/sites-available/monsite.tld /etc/nginx/sites-enabled/monsite.tld

Redémarrez nginx :

$ sudo nginx -s reload

9.4.1. Configuration d'hôtes virtuels sur NGinx avec support automatique des sous-domaines, du SSL et de l'authentification

9.4.2. Configurer Nginx pour gérer automatiquement les sous-domaines locaux

9.4.2.1. Création d’un nouveau site nginx

éditez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite.local pour y écrire :

/etc/nginx/sites-available/monsite.local
server {
    # On écoute le port 80.
    listen 80;

    # expression régulière pour récupérer
    # le sous-domaine dans une variable nommée "sub".
    server_name  ~^(?P<sub>.+)\.monsite\.local$;

    location / {
         # On définit le chemin local
         # en utilisant la variable "sub" récupérée précédemment.
         root /var/www/html/$sub;
    }
}

Activez votre site en créant un lien symbolique dans le dossier /etc/nginx/sites-enable :

$ sudo ln -s /etc/nginx/sites-available/local.dev /etc/nginx/sites-enable/monsite.local

Redémarrez le serveur via la commande :

$ sudo service nginx restart
/etc/nginx/sites-available/chateau.parc
# 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  ~^(?P<sub>doc|perso|site2)\.chateau\.parc$;
    root /var/www/html/$sub;
    
	location / {
		index index.php index.html index.htm;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
	}

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}

	location ~ /\.ht {
			deny all;
	}
}

# Autres sous-domaines
server {
    listen 80;

    server_name  ~^(?P<sub>.+)\.chateau\.parc$;
    root /var/www/html/$sub;
    
	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
	}

	location ~ /\.ht {
			deny all;
	}
}

9.4.3. Création des domaines génériques avec dnsmasq

Installez le paquet dnsmasq ou en ligne de commande :

$ sudo apt install dnsmask

Ouvrez ou créez avec les droits d'administration le fichier /etc/dnsmasq.d/local.conf et ajoutez-lui la ligne :

/etc/dnsmasq.d/local.conf
address=/mondomaine.tld/127.0.0.1

Dans notre exemple, nous avons donc ajouter:

/etc/dnsmasq.d/local.conf
address=/monsite.local/127.0.0.1

On redémarre dnsmasq :

$ sudo systemctl restart dnsmasq

et on peut constater que nos domaines sont accessibles.

Désormais, tous les domaines *.mondomaine.tld existent.

Vous pouvez le vérifier :

  • Installez le paquet dnsutils ou en ligne de commande :
    $ sudo apt install dnsutils
    

  • Lancez-le :

    $ dig test.localhost
    
    ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> test.localhost
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47480
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;test.localhost.			IN	A
    
    ;; ANSWER SECTION:
    test.localhost.		0	IN	A	127.0.0.1
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53)
    ;; WHEN: Sat May 04 23:35:51 CEST 2019
    ;; MSG SIZE  rcvd: 59
    

10. Conclusion

11. Problèmes connus

12. Voir aussi


Basé sur « Article » par Auteur.


Navigation