Installer un serveur de base de données MariaDB
La plupart des applications ont besoin de données persistantes — qui ne disparaissent pas lorsqu'on arrête le serveur — et modifiables. Les bases de données relationnelles sont remarquables pour rendre ce service. Malheureusement, leur mise en oeuvre consomme beaucoup de ressources sur un serveur. MariaDB (un fork en logiciel libre de MySQL) est une excellente solution pour héberger un serveur de données sur un nano-ordinateur comme le Raspberry Pi.
Cet article décrit l'installation et la configuration d'un serveur de données MariaDB pour qu'il puisse être utilisé en collaboration avec le serveur Web Lighttpd, PHP et Python.
Installation de MariaDB sur Rasperry Pi
Pré-requis
Bien que ce ne soit pas absolument nécessaire pour utiliser MariaDB, du fait que cet article traite de la configuration du serveur de données pour fonctionner avec des scripts CGI en langage PHP (ou Python) avec le serveur Web Lighttpd, quelques pré-requis sont nécessaires :
- L'installation de Lighttpd est traitée dans l'article intitulé « Créer un serveur Web avec Lighttpd sur Raspberry Pi ».
- L'installation de PHP (en version 7.3) est traitée dans l'article intitulé « Installer PHP avec Lighttpd ».
Installation de MariaDB
pi@raspi01:~ $ sudo apt update
. . .
pi@raspi01:~ $ sudo apt upgrade
. . .
pi@raspi01:~ $ sudo apt install mariadb-server mariadb-client
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libfcgi-perl
libhtml-template-perl libreadline5 libsigsegv2 libterm-readkey-perl
mariadb-client-10.3 mariadb-client-core-10.3 mariadb-server-10.3
mariadb-server-core-10.3 socat
Paquets suggérés :
gawk-doc libclone-perl libmldbm-perl libnet-daemon-perl
libsql-statement-perl libipc-sharedcache-perl mailx mariadb-test tinyca
Les NOUVEAUX paquets suivants seront installés :
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libfcgi-perl
libhtml-template-perl libreadline5 libsigsegv2 libterm-readkey-perl
mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-server
mariadb-server-10.3 mariadb-server-core-10.3 socat
0 mis à jour, 20 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 17,7 Mo dans les archives.
Après cette opération, 149 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
Paramétrage de mariadb-client (1:10.3.22-0+deb10u1) ...
Paramétrage de mariadb-server (1:10.3.22-0+deb10u1) ...
Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u4+rpi1) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.28-10+rpi1) ...
pi@raspi01:~ $
. . .
pi@raspi01:~ $ sudo apt upgrade
. . .
pi@raspi01:~ $ sudo apt install mariadb-server mariadb-client
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libfcgi-perl
libhtml-template-perl libreadline5 libsigsegv2 libterm-readkey-perl
mariadb-client-10.3 mariadb-client-core-10.3 mariadb-server-10.3
mariadb-server-core-10.3 socat
Paquets suggérés :
gawk-doc libclone-perl libmldbm-perl libnet-daemon-perl
libsql-statement-perl libipc-sharedcache-perl mailx mariadb-test tinyca
Les NOUVEAUX paquets suivants seront installés :
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libfcgi-perl
libhtml-template-perl libreadline5 libsigsegv2 libterm-readkey-perl
mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-server
mariadb-server-10.3 mariadb-server-core-10.3 socat
0 mis à jour, 20 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 17,7 Mo dans les archives.
Après cette opération, 149 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
Paramétrage de mariadb-client (1:10.3.22-0+deb10u1) ...
Paramétrage de mariadb-server (1:10.3.22-0+deb10u1) ...
Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u4+rpi1) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.28-10+rpi1) ...
pi@raspi01:~ $
Sécurisation de MariaDB
La procédure d'installation ci-dessus génère quelques failles de sécurité, destinées à faciliter des tests éventuels nécessaires après l'installation. La commande mysql_secure_installation permet de supprimer ces failles facilement.
pi@raspi01:~ $ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password: #######
Re-enter new password: #######
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
pi@raspi01:~ $
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password: #######
Re-enter new password: #######
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
pi@raspi01:~ $
- Pour se connecter au serveur de données MariaDB pour le sécuriser, il faut définir un mot de passe pour l'utilisateur root. Après l'installation MariaDB, le mot de passe est vide (il suffit de taper [Entrée] la première fois).
- Taper Y pour valider la saisie d'un nouveau mot de passe pour l'utilisateur root.
- A l'installation MariaDB, un utilisateur anonyme est créé, permettant à quiconque de se connecter à MariaDB, sans avoir à créer un compte utilisateur. Ceci est uniquement destiné à faciliter les tests éventuellement nécessaire après l'installation. Cet utilisateur doit être supprimé pour un fonctionnement normal d'un serveur données. Taper Y pour supprimer l'utilisateur anonyme.
- En principe, le compte root ne doit être autorisé à se connecter qu'à partir de «localhost» pour garantir que personne ne puisse deviner le mot de passe root du réseau. Taper Y pour interdire la connexion à distance sur le compte root de la base de données.
- A l'installation, une base de données test, accessible de façon anonyme, a été créée pour faciliter des tests éventuels. Taper Y pour supprimer cette base de données et les droit afférant.
- Taper Y pour prendre en compte toutes les modifications qui viennent d'être apportées.
Test de MariaDB
MariaDB fonctionne comme un service. Il est donc possible, comme on le fait pour Lighttpd de vérifier sont état, de l'arrêter ou de le démarrer grâce à la commande Linux service.
pi@raspi01:~ $ sudo service --status-all
[ - ] alsa-utils
[ - ] apparmor
[ + ] avahi-daemon
[ + ] bluetooth
[ - ] console-setup.sh
[ + ] cron
[ + ] dbus
[ + ] dhcpcd
[ + ] dphys-swapfile
[ + ] fake-hwclock
[ - ] hwclock.sh
[ - ] keyboard-setup.sh
[ + ] kmod
[ + ] lightdm
[ + ] lighttpd
[ + ] mysql
[ + ] networking
[ - ] nfs-common
[ - ] paxctld
[ - ] plymouth
[ - ] plymouth-log
[ + ] procps
[ + ] raspi-config
[ ? ] rng-tools
[ - ] rpcbind
[ - ] rsync
[ + ] rsyslog
[ + ] ssh
[ - ] sudo
[ + ] triggerhappy
[ + ] udev
[ - ] x11-common
pi@raspi01:~ $
[ - ] alsa-utils
[ - ] apparmor
[ + ] avahi-daemon
[ + ] bluetooth
[ - ] console-setup.sh
[ + ] cron
[ + ] dbus
[ + ] dhcpcd
[ + ] dphys-swapfile
[ + ] fake-hwclock
[ - ] hwclock.sh
[ - ] keyboard-setup.sh
[ + ] kmod
[ + ] lightdm
[ + ] lighttpd
[ + ] mysql
[ + ] networking
[ - ] nfs-common
[ - ] paxctld
[ - ] plymouth
[ - ] plymouth-log
[ + ] procps
[ + ] raspi-config
[ ? ] rng-tools
[ - ] rpcbind
[ - ] rsync
[ + ] rsyslog
[ + ] ssh
[ - ] sudo
[ + ] triggerhappy
[ + ] udev
[ - ] x11-common
pi@raspi01:~ $
Le nom du service mysql peut étonner. Mais la fondation MariaDB a été créé par le fondateur de MySQL à la suite du rachat de MySQL par Sun puis, par Oracle. Le nom du service a été conservé pour assurer l'interopérabilité entre MySQL et MariaDB.
Comme le package mariadb-client a été également installé, il est possible de se connecter au serveur de données en ligne de commande :
pi@raspi01:~ $ mariadb -u root -p
Enter password: #######
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
Enter password: #######
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
- Le fait d'avoir sécurisé MariaDB avec la commande mysql_secure_installation oblige à lancer une session en s'authentifiant :
- L'option -u permet de passer le compte utilisateur du serveur de donnée. Ici, c'est root (c'est encore le seul utilisateur existant à ce moment) qui est utilisé.
- Un mot de passe est obligatoire. Sur Raspberry Pi, on ne connait le mot de passe de l'utilisateur root de Rasbian qui est sans doute différent du mot de passe du compte root de MariaDB. L'option -p permet de forcer la demande de mot de passe lorsque la session MariaDB démarre.
- Le mot de passe à utiliser est celui créé lors de la commande mysql_secure_installation.
- La session démarrée, on peut taper des requêtes SQL pour interroger ou agir sur une base de données.
- La base de données sur laquelle les requêtes agissent est celle indiquée dans le prompt entre les crochet. Pour le moment, aucune base n'ayant été créée, il est indiqué (none). La base de donnée à utiliser peut être désignée soit par la commande MariaDB use, soit en passant son nom avec l'option -D au lancement de la session.
- La commande quit est utilisée pour quitter la session MariaDB et revenir à Raspbian,
Configurer PHP pour fonctionner avec MariaDB
Installation des modules mysql pour PHP
Pour que les scripts PHP puissent se connecter à MariaDB, il est nécessaire d'installer quelques packages PHP supplémentaires :
- php-mysql — est le package qui installe les modules PHP et les drivers nécessaires pour formuler des requêtes en PHP sur le serveur de bases de données MariaDB
- php-fpm — Le fonctionnement standard de PHP avec Lighttpd est basé sur le socket FastCGI. FPM (FastCGI Process Manager) est une variante permettant d'améliorer la performance et la sécurité des scripts CGI en langage PHP.
pi@raspi01:~ $ sudo apt install php-mysql php-fpm
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
php7.3-mysql
Les NOUVEAUX paquets suivants seront installés :
php-mysql php7.3-mysql
0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 102 ko dans les archives.
Après cette opération, 368 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
Paramétrage de php-mysql (2:7.3+69) ...
pi@raspi01:~ $ sudo service lighttpd restart
pi@raspi01:~ $
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
php7.3-mysql
Les NOUVEAUX paquets suivants seront installés :
php-mysql php7.3-mysql
0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 102 ko dans les archives.
Après cette opération, 368 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
Paramétrage de php-mysql (2:7.3+69) ...
pi@raspi01:~ $ sudo service lighttpd restart
pi@raspi01:~ $
Lorsqu'on effectue une requête avec phpinfo.php (voir article intitulé « Installer PHP avec Lighttpd » pour savoir comment créer ce script), on peut constater que plusieurs modules ont été ajoutés à la configuration de PHP. Parmi ceux-ci :
- Le module mysqli est le Framework standard de MySQL ou de MariaDB.
- Le module mysqlnd est le driver MySQL ou MariaDB pour PHP.
- Le module PDO (PHP Data Objects) est un FrameWork alternatif à mysqli apportant des fonctions PHP pour formuler des requêtes sur les bases de données relationnelles. Le même Framework peut être utilisé avec des bases de données différentes.
- Le module pdo_mysql est le driver PDO pour MySQL ou MariaDB.
Configuration du module fpm
Il est nécessaire de modifier une ligne dans le fichier /etc/php/7.3/fpm/php.ini. Attention le numéro de version de PHP (ici 7.3) peut être différente. L'information peut être obtenue avec la fonction phpinfo() dans le paragraphe intitulé « Additionnal .ini files parsed ».
Le fichier est assez grand. Il faut rechercher le paramètre cgi.fix_pathinfo (à peu près à 40% du fichier) et dé-commenter la ligne.
Le fichier est assez grand. Il faut rechercher le paramètre cgi.fix_pathinfo (à peu près à 40% du fichier) et dé-commenter la ligne.
. . .
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. P
HP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not g
rok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Set
ting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setti
ng
; of zero causes PHP to behave as before. Default is 1. You should fix your sc
ripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. P
HP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not g
rok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Set
ting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setti
ng
; of zero causes PHP to behave as before. Default is 1. You should fix your sc
ripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
. . .
Pour que le paramètre soit pris en compte, il faut redémarrer le service php7.3-fpm (atteion au numéro de version qui peut être différent). Ce service ne fait pas partie de la liste des services gérés par la commande service. Il faut passer par la commande systemctl.
pi@raspi01:~ $ sudo systemctl restart php7.3-fpm
pi@raspi01:~ $
pi@raspi01:~ $
Installation de PhpMyAdmin avec Lighttpd
PhpMyAdmin est une application Web, écrite en PHP, qui permet d'administrer une base de données MariaDB ou MySQL à distance en mode Web. C'est beaucoup plus pratique et convivial que de devoir ouvrir une session SSH sur le serveur, puis une session MariaDB sur celui-ci.
Installation du package phpmyadmin
pi@raspi01:~ $ sudo apt install phpmyadmin
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
dbconfig-common dbconfig-mysql libmcrypt4 libzip4 php-bz2 php-curl php-gd
php-mbstring php-pear php-php-gettext php-phpseclib php-tcpdf php-xml
php-zip php7.1-common php7.1-mcrypt php7.3-bz2 php7.3-curl php7.3-gd
php7.3-mbstring php7.3-xml php7.3-zip
Paquets suggérés :
libmcrypt-dev mcrypt php-libsodium php-gmp php-imagick
Les NOUVEAUX paquets suivants seront installés :
dbconfig-common dbconfig-mysql libmcrypt4 libzip4 php-bz2 php-curl php-gd
php-mbstring php-pear php-php-gettext php-phpseclib php-tcpdf php-xml
php-zip php7.1-common php7.1-mcrypt php7.3-bz2 php7.3-curl php7.3-gd
php7.3-mbstring php7.3-xml php7.3-zip phpmyadmin
0 mis à jour, 23 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 14,1 Mo dans les archives.
Après cette opération, 57,1 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
. . .
. . .
. . .
. . .
. . .
Run "service lighttpd force-reload" to enable changes
dpkg: erreur de traitement du paquet phpmyadmin (--configure) :
installed phpmyadmin package post-installation script subprocess returned error exit status 2
Traitement des actions différées (« triggers ») pour hicolor-icon-theme (0.17-2) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.28-10+rpi1) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
Des erreurs ont été rencontrées pendant l'exécution :
phpmyadmin
E: Sub-process /usr/bin/dpkg returned an error code (1)
pi@raspi01:~ $
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
dbconfig-common dbconfig-mysql libmcrypt4 libzip4 php-bz2 php-curl php-gd
php-mbstring php-pear php-php-gettext php-phpseclib php-tcpdf php-xml
php-zip php7.1-common php7.1-mcrypt php7.3-bz2 php7.3-curl php7.3-gd
php7.3-mbstring php7.3-xml php7.3-zip
Paquets suggérés :
libmcrypt-dev mcrypt php-libsodium php-gmp php-imagick
Les NOUVEAUX paquets suivants seront installés :
dbconfig-common dbconfig-mysql libmcrypt4 libzip4 php-bz2 php-curl php-gd
php-mbstring php-pear php-php-gettext php-phpseclib php-tcpdf php-xml
php-zip php7.1-common php7.1-mcrypt php7.3-bz2 php7.3-curl php7.3-gd
php7.3-mbstring php7.3-xml php7.3-zip phpmyadmin
0 mis à jour, 23 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 14,1 Mo dans les archives.
Après cette opération, 57,1 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
. . .
. . .
. . .
. . .
. . .
. . .
Run "service lighttpd force-reload" to enable changes
dpkg: erreur de traitement du paquet phpmyadmin (--configure) :
installed phpmyadmin package post-installation script subprocess returned error exit status 2
Traitement des actions différées (« triggers ») pour hicolor-icon-theme (0.17-2) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.28-10+rpi1) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
Des erreurs ont été rencontrées pendant l'exécution :
phpmyadmin
E: Sub-process /usr/bin/dpkg returned an error code (1)
pi@raspi01:~ $
Quelques écrans s'affichent pendant l'installation :
- Choisir la base de données lighttpd.
- Répondre Oui à la question « Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? »
- Choisir le même mot de passe que celui utilisé pour le compte root de MariaDB.
Pendant l'installation, des erreurs de packaging générées par dkpg sont signalée. La consultation de plusieurs articles dans les forums confirme qu'elles peuvent être ignorées.
Déplacer phpmyadmin
Par défaut, l'application PhpMyAdmin est installée dans le réperrtoire /usr/share. Or Lighttpd utilise le répertoire /var/www/html comme racine du service Web. Il faut donc déplacer l'application PhpMyAdmin dans ce répertoire pour qu'elle soit consultable sur le serveur en mode Web.
pi@raspi01:~ $ sudo mv /usr/share/phpmyadmin /var/www/html/phpmyadmin
pi@raspi01:~ $
pi@raspi01:~ $
Modifier /etc/phpmyadmin/lighttpd.conf
L'installation de PhpMyAdmin a créé un lien symbolique 50-phpmyadmin.conf dans le répertoire /etc/lighttpd/conf-available vers le fichier /etc/phpmyadmin/lighttpd.conf. PhpMyAdmin devient, de cette façon, un module de Lighttpd activable et désactivable comme les autres modules par les commandes lighty-enable-mod et lighty-disable-mod. Par défaut, le module phpmyadmin de Lighttpd est activé puisqu'un lien symbolique 50-phpmyadmin.conf vers /etc/lighttpd/conf-available/50-phpmyadmin.conf est présent dans le répertoire /etc/lighttpd/conf-enabled :
pi@raspi01:~ $ ls -l /etc/lighttpd/conf-enabled
total 0
lrwxrwxrwx 1 root root 30 mai 13 14:14 05-auth.conf -> ../conf-available/05-auth.conf
lrwxrwxrwx 1 root root 29 mai 11 14:00 10-cgi.conf -> ../conf-available/10-cgi.conf
lrwxrwxrwx 1 root root 33 mai 12 17:27 10-fastcgi.conf -> ../conf-available/10-fastcgi.conf
lrwxrwxrwx 1 root root 37 mai 12 17:27 15-fastcgi-php.conf -> ../conf-available/15-fastcgi-php.conf
lrwxrwxrwx 1 root root 36 mai 13 17:59 50-phpmyadmin.conf -> ../conf-available/50-phpmyadmin.conf
lrwxrwxrwx 1 root root 42 févr. 13 17:02 90-javascript-alias.conf -> ../conf-available/90-javascript-alias.conf
pi@raspi01:~ $
total 0
lrwxrwxrwx 1 root root 30 mai 13 14:14 05-auth.conf -> ../conf-available/05-auth.conf
lrwxrwxrwx 1 root root 29 mai 11 14:00 10-cgi.conf -> ../conf-available/10-cgi.conf
lrwxrwxrwx 1 root root 33 mai 12 17:27 10-fastcgi.conf -> ../conf-available/10-fastcgi.conf
lrwxrwxrwx 1 root root 37 mai 12 17:27 15-fastcgi-php.conf -> ../conf-available/15-fastcgi-php.conf
lrwxrwxrwx 1 root root 36 mai 13 17:59 50-phpmyadmin.conf -> ../conf-available/50-phpmyadmin.conf
lrwxrwxrwx 1 root root 42 févr. 13 17:02 90-javascript-alias.conf -> ../conf-available/90-javascript-alias.conf
pi@raspi01:~ $
Le préfixe 50- indique que la configuration de PhpMyAdmin sera prise après tous les autres modules (mais avant le module javascript-alias dont le préfixe est 90-). Cette configuration vient donc écraser d'éventuels paramètres homonyme. La plupart des paramètres de Lighttpd sont des tableaux associatif clef=valeur. Il faudra donc privilégier pour ceux-ci l'opérateur += plutôt que = pour effectuer les affectations.
Le fichier /etc/phpmyadmin/lighttpd.conf doit être modifié pour indiquer où se trouvent les fichiers PHP de l'application PhpMyAdmin relativement à l'url /phpmyadmin/. Ceux-ci ayant été déplacés dans /var/www/html/phpmyadmin, c'est ce répertoire qu'il faut associé en alias à l'url /phpmyadmin/.
# Alias for phpMyAdmin directory
alias.url += (
"/phpmyadmin" => "/var/www/html/phpmyadmin",
)
# Disallow access to libraries
$HTTP["url"] =~ "^/phpmyadmin/templates" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/phpmyadmin/libraries" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/phpmyadmin/setup/lib" {
url.access-deny = ( "" )
}
# Limit access to setup script
$HTTP["url"] =~ "^/phpmyadmin/setup" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/phpmyadmin/htpasswd.setup"
auth.require = (
"/" => (
"method" => "basic",
"realm" => "phpMyAdmin Setup",
"require" => "valid-user"
)
)
}
alias.url += (
"/phpmyadmin" => "/var/www/html/phpmyadmin",
)
# Disallow access to libraries
$HTTP["url"] =~ "^/phpmyadmin/templates" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/phpmyadmin/libraries" {
url.access-deny = ( "" )
}
$HTTP["url"] =~ "^/phpmyadmin/setup/lib" {
url.access-deny = ( "" )
}
# Limit access to setup script
$HTTP["url"] =~ "^/phpmyadmin/setup" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/phpmyadmin/htpasswd.setup"
auth.require = (
"/" => (
"method" => "basic",
"realm" => "phpMyAdmin Setup",
"require" => "valid-user"
)
)
}
- Le premier paramètre (celui qui a été modifié) désigne le répertoire physique associé à l'url /phpmyadmin/.
- Les trois paramètres suivant empêche les scripts PHP contenus dans les sous-répertoires d'être invoqués par une requête HTTP dans un navigateur Web. Il peuvent être intégré par des procédure include à partir des autres scripts PHP.
- Le dernier paramètre limite l'utilisation du script setup aux seul utilisateurs paramétrés dans /etc/phpmyadmin/htpasswd.setup.
Test final de l'installation
L'application PhpMyAdmin étant développée en PHP, installée sur une serveur Web (ici Lighttpd), pour administrer une base de donnée MariaDB (ou MySQL) à partir d'un navigateur Web, l'invocation de cette application sur un ordinateur distant permet donc de valider l'ensemble de l'installation du triplet Lighttpd/PHP/MariaDB. Selon les configurations ci-dessus, l'url à invoquer est http://192.168.1.102/phpmyadmin (192.168.1.102 étant l'adresse IP du Raspberry Pi utilisé comme serveur dans cet exemple).
Si tout ce passe bien, l'application PHPMyAdmin devrait afficher sa mire d'authentification.
L'utilisateur est root et le mot de passe à saisir est celui-utilisé dans la procédure d'installation. Normalement, la page d'accueil de PhpMyAdmin doit pouvoir s'afficher.
Procédure « mot de passe oublié » pour PhpMyAdmin
Comme le test est effectué sur un ordinateur distant, il se peut que l'authentification de PhpMyAdmin ne fonctionne pas (peut-être à cause problème de claviers QUERTY/AZERTY entre l'ordinateur distant et le Raspberry Pi). Le mot de passe pour l'utilisateur root peut être réinitialisé. Pour cela il faut démarrer une session MariaDB (ne pas oublier le mot de passe de celle-ci, du coup) et exécuter les commandes ci-dessous.
pi@raspi01:~ $ mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Set Password For root@localhost=Password('NewPassword');
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> Grant All Privileges On *.* To root@localhost Identified By 'NewPassword' With Grant Option;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Set Password For root@localhost=Password('NewPassword');
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> Grant All Privileges On *.* To root@localhost Identified By 'NewPassword' With Grant Option;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
Attention ! Cette procédure réinitialise le mot de passe de l'utilisateur root sur TOUTES les tables de TOUTES les bases de données installées sur le serveur de données MariaDB, y compris les tables du serveur lui-même. Ce nouveau mot de passe NewPassword devient de fait le mot de passe à utiliser pour ouvrir une session en mode root sur MariaDB... qu'il ne faut donc pas oublier.
Procédure « mot de passe oublié » pour MariaDB
Que faire lorsque l'on a oublié le mot de passe root de MariaDB sans avoir à réinstaller le serveur de données ?
En fait il existe une procédure pour restaurer les paramètres initiaux de MariaDB :
pi@raspi01:~ $ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" pi@raspi01:~ $ systemctl restart mariadb
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentification requise pour redémarrer « mariadb.service ».
Multiple identities can be used for authentication:
1. ,,, (pi)
2. root
Choose identity to authenticate as (1-2): 1
Password:
==== AUTHENTICATION COMPLETE ===
pi@raspi01:~ $ sudo mysql_secure_installation
. . .
pi@raspi01:~ $ mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Set Password For root@localhost=Password('NewPassword');
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> Grant All Privileges On *.* To root@localhost Identified By 'NewPassword' With Grant Option;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $ sudo systemctl unset-environment MYSQLD_OPTS
pi@raspi01:~ $ systemctl restart mariadb
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentification requise pour redémarrer « mariadb.service ».
Multiple identities can be used for authentication:
1. ,,, (pi)
2. root
Choose identity to authenticate as (1-2): 1
Password:
==== AUTHENTICATION COMPLETE ===
pi@raspi01:~ $ mariadb
ERROR 1045 (28000): Access denied for user 'pi'@'localhost' (using password: NO)
pi@raspi01:~ $ mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentification requise pour redémarrer « mariadb.service ».
Multiple identities can be used for authentication:
1. ,,, (pi)
2. root
Choose identity to authenticate as (1-2): 1
Password:
==== AUTHENTICATION COMPLETE ===
pi@raspi01:~ $ sudo mysql_secure_installation
. . .
pi@raspi01:~ $ mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Set Password For root@localhost=Password('NewPassword');
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> Grant All Privileges On *.* To root@localhost Identified By 'NewPassword' With Grant Option;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $ sudo systemctl unset-environment MYSQLD_OPTS
pi@raspi01:~ $ systemctl restart mariadb
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentification requise pour redémarrer « mariadb.service ».
Multiple identities can be used for authentication:
1. ,,, (pi)
2. root
Choose identity to authenticate as (1-2): 1
Password:
==== AUTHENTICATION COMPLETE ===
pi@raspi01:~ $ mariadb
ERROR 1045 (28000): Access denied for user 'pi'@'localhost' (using password: NO)
pi@raspi01:~ $ mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
pi@raspi01:~ $
- La première commande configure MariaDB pour fonctionner sans authentification.
- La seconde commande redémarre le serveur MariaDB. Ne connaissant pas le mot de passe du compte root de Rasbian, il faut choir l'option 1 pour authentifier le redémarrage avec le compte pi (pour lequel il faut espérer ne pas avoir oublié le mot de passe ;-) ).
- Il est alors possible de démarrer MariaDB sans avoir à saisir un compte utilisateur et un mot de passe pour démarrer une session MariaDB.
- Cette commande modifie le mot de passe pour le compte root. Cette commande est celle déjà utilisée dans la procédure mot de passe oublié pour PhpMyAdmin.
- Cette commande accorde les droits administrateur au compte root sur toutes les bases de données du serveur MariaDB, y compris les tables du serveur lui-même.
- La commande quit permet de quitter la session MariaDB pour revenir à Raspbian.
- Cette commande permet le fonctionnement de MariaDB en réactivant l'authentification.
- Pour que cette configuration soit prise en compte il faut redémarrer le serveur MariaDB. Choisir l'option 1 pour authentifier le redémarrage sur le compte pi.
- Lorsqu'on tente de lancer une session MariaDB sans authentification, cela génère une erreur. C'est normal.
- Lorsqu'on tente de lancer une session MariaDB pour le compte root avec authentification, cela fonctionne. Le mot de passe à utiliser est NewPassword (celui utilisé dans la commande Set Password). Il ne faut pas confondre le compte root utilisé ici qui est celui de MariaDB avec le compte root suggéré par l'option 2 de la commande systemctl qui est celui de Rasbian et dont on ne connait toujours pas la valeur.
Conclusion
Dans un article précédent, l'installation du serveur Web Lighttpd a été traitée pour permettre de servir des pages Web statiques. Puis un autre article a traité de l'installation de PHP sur Lighttpd pour créer des pages Web dynamiques par script. Enfin cet article a présenté l'installation et la configuration d'un serveur de données mariaDB pour fonctionner avec Lighttpd et PHP. De plus, PHPMyAdmin, une application Web écrite en PHP a été installée pour fournir une interface d'administration du serveur MariaDB. Avec ces trois articles, on dispose d'une plateforme serveur complète pour diffuser des applications Web en client léger accessible à distance avec un simple navigateur Web.
Il faut remarquer aussi que la configuration pour créer des pages Web dynamique en Python fonctionne toujours.
Commentaires
Enregistrer un commentaire