Mes ressources pour le Web

Installer PHP 8.x + MariaDB avec Debian 10

Installation de PHP 8.0 sur un Debian 10 XFCE avec MariaDB.
J'ai donc installé sur une machine 64 bits une version de PHP 8.0 rc avec MariaDB sur une Debian 10 Buster XFCE (test du 23/10/2020). NOTE au 04/11/20 PHP 8.0 rc3
Le but de ce mode d'emploi est de créer en local, un serveur de tests dans le home/dossier_personnel/ par un VirtualHost afin de pouvoir effectuer simplement les manipulations et sauvegardes des CMS.

Nota :
que ce soit 32 ou 64 bits la solution est la même à quelques détails prêt en fonction de la date où vous installez !
Dans cette page (installation en local) linux est le nom du dossier personnel : celui qui se créer avec le nom d’utilisateur à l'installation, dans le home, donc ici  /home/linux/ dans cette page. Il faut donc adapter le nom suivant votre dossier personnel.


Debian 10 est fournie avec PHP 7.3.23 au moment de ce test (22/10/2020).
Afin d'avoir une version PHP pour tester la future version PHP 8 plus à jour j'ai utilisé le dépôt de Ondřej Surý  qui donnait PHP 8.0.0~rc1 (NOTE au 04/11/20 PHP 8.0 rc3)
Il faut donc installer Apache, PHP et mariadb-server.



Les manipulations sont faites en ligne de commande en terminal administrateur

sudo -s
(plus simple à reproduire ici)
Uniquement pour tests et information "à vos risques et périls" ;-)
Nota suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité à votre convenance pour l’édition des fichiers textes

A - Préparation et installation


A1. mise à jour des paquets
apt-get update

Par sécurité
apt-get upgrade

A2. Installation d'Apache

apt-get install apache2

Les NOUVEAUX paquets suivants seront installés :
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
libaprutil1-dbd-sqlite3 libaprutil1-ldap
0 mis à jour, 8 nouvellement installés, 0 à enlever et 0 non mis à jour.
Ici se sera Apache 2.4.38.3


A3. test

- dans la barre d’adresse du navigateur : http://localhost/  
pour afficher la page (index.html) : Apache2 Debian Default Page - It works!-
NOTA : le fichier index.html se trouve dans /var/www/html/

apache

A4a. Installation de PHP 7.3 - Préparation
Grâce à la mise à disposition du dépôt de Ondřej Surý

Vérifier
que apt-transport-https,  lsb-release et ca-certificates sont installés
ou
apt-get install apt-transport-https lsb-release ca-certificates
lsb-release est déjà la version la plus récente (10.2019051400).
ca-certificates est déjà la version la plus récente (20200601~deb10u1).

dans mon cas lsb-release et ca-certificates étaient déjà installés donc
Les NOUVEAUX paquets suivants seront installés :
apt-transport-https
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.

Préparation pour l'ajout du dépôt packages.sury.org

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Résultats
--2020-10-22 18:22:20-- https://packages.sury.org/php/apt.gpg
Résolution de packages.sury.org (packages.sury.org)… 104.31.94.169, 172.67.182.150, 104.31.95.169, ...
Connexion à packages.sury.org (packages.sury.org)|104.31.94.169|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 1769 (1,7K) [application/octet-stream]
Sauvegarde en : « /etc/apt/trusted.gpg.d/php.gpg »
/etc/apt/trusted.gp 100%[===================>] 1,73K --.-KB/s ds 0s
2020-10-22 18:22:21 (7,08 MB/s) — « /etc/apt/trusted.gpg.d/php.gpg » sauvegardé [1769/1769]

Ajouter au fichier sources.list
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
Attention le code ci-dessus doit être sur une seule ligne
Cela crée un fichier php.list contenant  deb https://packages.sury.org/php/ buster main, dans le dossier /etc/apt/sources.list.d/

- Sinon crée un fichier php.list contenant
deb https://packages.sury.org/php/ stretch main
dans le dossier /etc/apt/sources.list.d/
 
Mise à jour des paquets du nouveau dépôt
apt-get update
Atteint :1 https://deb.debian.org/debian buster InRelease
Atteint :2 https://deb.debian.org/debian-security buster/updates InRelease
Réception de :3 https://packages.sury.org/php buster InRelease [6 759 B]
Atteint :4 https://deb.debian.org/debian buster-updates InRelease
Réception de :5 https://packages.sury.org/php buster/main amd64 Packages [148 kB]

A4b. Installation de PHP 8.0

Attention le code ci-dessous doit être sur une seule ligne
apt install php8.0 libapache2-mod-php8.0 php8.0-mysql php8.0-curl php8.0-gd php8.0-intl php8.0-sqlite3 php8.0-gmp php8.0-mbstring php8.0-xml php8.0-zip
NOTE php8.0-json est incorporé dans le PHP 8.x
Cela doit afficher sur le terminal
apt install php8.0 libapache2-mod-php8.0 php8.0-mysql php8.0-curl 
php8.0-gd php8.0-intl php8.0-sqlite3 php8.0-gmp php8.0-mbstring
php8.0-xml php8.0-zip
Supprimer éventuellement les modules qui ne vous intéressent pas

Les paquets supplémentaires suivants seront installés : 
libicu65 libonig5 libzip4 php-common php8.0-cli php8.0-common php8.0-opcache
php8.0-readline
Paquets suggérés :
php-pear
Les NOUVEAUX paquets suivants seront installés :
libapache2-mod-php8.0 libicu65 libonig5 libzip4 php-common php8.0 php8.0-cli
php8.0-common php8.0-curl php8.0-gd php8.0-gmp php8.0-intl php8.0-mbstring
php8.0-mysql php8.0-opcache php8.0-readline php8.0-sqlite3 php8.0-xml
php8.0-zip
0 mis à jour, 19 nouvellement installés, 0 à enlever et 10 non mis à jour.
la version installée sera 8.0.0~rc1-6+0~20201018.3+debian10~1.gbpc2ed52

Par sécurité
apt-get upgrade
Les paquets suivants seront mis à jour :
libargon2-1 libgd3 libidn2-0 libpcre2-16-0 libpcre2-8-0 libpcre3 libsodium23
libssl1.1 libxml2 openssl
10 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Puis une fois l'installation terminée
(pour relancer le serveur)
systemctl reload apache2


Créer en root dans /var/www/html/
un fichier phpinfo.php avec
<?php phpinfo(); ?>
Ou bien en ligne de commande entrer la ligne suivante
echo '<?php phpinfo(); ?>' >/var/www/html/phpinfo.php

Tester avec dans la barre d’adresse du navigateur : http://localhost/phpinfo.php
Cela affichera le contenu du phpinfo
avec PHP Version 8.0.0rc1
et DOCUMENT_ROOT /var/www/html
phpinfo 8.x


A5. Installation de MariaDB
(mariadb-server-10.3)

apt install mariadb-server
Les paquets supplémentaires suivants seront installés :
galera-3 gawk libaio1 libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl
libhtml-template-perl libreadline5 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 libmldbm-perl libnet-daemon-perl libsql-statement-perl
libipc-sharedcache-perl mailx mariadb-test netcat-openbsd tinyca
Les NOUVEAUX paquets suivants seront installés :
galera-3 gawk libaio1 libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl
libhtml-template-perl libreadline5 libterm-readkey-perl mariadb-client-10.3
mariadb-client-core-10.3 mariadb-server mariadb-server-10.3
mariadb-server-core-10.3 socat
0 mis à jour, 15 nouvellement installés, 0 à enlever et 0 non mis à jour.

Puis une fois l'installation terminée (pour relancer le serveur)
systemctl reload apache2


A5a. Création d'un mot de passe pour le compte "root" avec MariaDB pour gérer toutes les bases de données avec ce seul compte
- Par défaut le compte root, le mot de passe est vide donc impossible de se connecter avec Adminer

mysql -u root -p mysql
Enter password:
NOTA:tapez sur la touche entrée pour valider
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 49
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [mysql]>
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'linux';
Query OK, 0 rows affected (0.00 sec)
Nota pour sortir utiliser quit ou \q
MariaDB [mysql]> quit
Bye

Remplacer bien sur "linux" par votre mot de passe root choisi
Il sera alors possible de se connecter avec Adminer avec les identifiant "root" et "linux" et d'avoir accès à la gestion des toutes les bases de données.


A5b. Gestion des bases de données avec Adminer
Télécharger et mettre en place Adminer  Recommandé pour la simplicité ;)
Adminer 4.7.7 
utiliser ici lors du test du 23/10/2020 - voir une version plus récente
Il est plutôt conseillé d'installer Adminer que PhpMyAdmin.
C'est plus simple plus sur et aussi facile à gérer en local
- plus simple un seul fichier qu l'on place ou on veux (prendre uniquement dans ce cas le fichier unique depuis le site Adminer (le premier de la liste) et non pas le paquet Debian)
- plus sur, moins de bugs et corrections.
- le fichier sera dans le dossier /Téléchargements/ : adminer-4.7.7.php sera renommer en en adminer.php.
- puis copier ou déplacer le fichier adminer.php dans le dossier /var/www/html/ pour tester
en ligne de commande (remplacer linux par votre nom d'utilisateur) et attention au nom du dossier /Téléchargements/
cp /home/linux/Téléchargements/adminer.php /var/www/html/
Se connecter avec dans la barre d’adresse du navigateur : http://localhost/adminer.php pour afficher la base de données

ICI page blanche car Adminer n'est PAS compatible avec PHP 8.x
NOTA : le 06/12/20 la version 4.7.8 est compatible  PHP 8.x

Il vous reste à créer vos base de données en utilisant Adminer (pour plus tard ;) ).
il faut passer en mode console avec mysql
On va créer une nouvelle Base de Données avec le compte root mot de passe linux créé plus haut
mysql -u root -p
Enter password:
NOTA: Tapez "votre_mot_de_passe_root_choisi" puis touche entrée pour valider
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> \q
Bye

B - Manipulations et ajouts


B1. Modifications du php.ini pour affichage des erreurs, date et PHAR
Nota suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité a votre convenance, le but c'est d’éditer le fichier /etc/php/8.0/apache2/php.ini

mousepad /etc/php/8.0/apache2/php.ini
Par exemple avec le bureau KDE : su kwrite /etc/php/8.0/apache2/php.ini

Commenter cette ligne en ajoutant le point virgule ; devant
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Ajouter (pour afficher les toutes les erreurs d'exécution des scripts et les erreurs E_STRICT)
error_reporting = E_ALL
Pour infomation sur error_reporting
;   Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
;   Development Value: E_ALL
;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

Commenter cette ligne en ajoutant le point virgule ; devant
;display_errors = Off

Ajouter (Pour afficher les erreurs à l'écran)
display_errors = On

Rechercher
;date.timezone =

Ajouter (Pour afficher le fuseau horaire de Paris)
date.timezone = Europe/Paris

Rechercher
[Phar]
; http://php.net/phar.readonly
;phar.readonly = On

Ajouter (Permet la création des archives Phar)
phar.readonly = Off

Puis pour relancer le serveur
service apache2 restart ou systemctl reload apache2

Dans le phpinfo.php error_reporting est passé de 22527 à 32767 et Default timezone = Europe/Paris


C - Création d'un dossier de test dans home
En remplacement du traditionnel /var/www/html/, afin de pouvoir effectuer simplement les manipulations et sauvegardes des CMS
Si vous souhaitez utiliser le dossier /var/www/html/ pour installer vos CMS il faudra créer vos dossiers en faisant attention aux droits utilisateurs.

Nota : ici linux est le nom de mon dossier personnel (adapter suivant votre dossier personnel)
donc le dossier de test des sites Web sites sera  /home/linux/sites (adapter suivant vos besoins)

C1. Créer un dossier  (dossier de test des sites Web) nommé ici sites (par exemple)
Ce qui me permettra d'avoir tous les sous dossiers de mes CMS dans /home/linux/sites/
exemple sur l'image
mes_dossier

C2. Création d'un VirtualHost
Nota suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité a votre convenance, le but c'est d’éditer les fichiers textes ...
Il s'agit de copier le fichier original cp 000-default.conf pour avoir un nouveau fichier qui s'appellera sites.local.conf sur lequel les modifications seront faites
cd /etc/apache2/sites-available
cp 000-default.conf sites.local.conf
sudo mousepad /etc/apache2/sites-available/sites.local.conf

Ajuster les noms ici linux (répertoire personnel) et sites (dossier de tests des sites Web) suivant vos besoins
Remplacer tout le  texte du fichier sites.local.conf par le texte suivant
<VirtualHost *:80>
ServerAdmin sites@localhost
DocumentRoot /home/linux/sites
ServerName sites
<Directory /home/linux/sites/>
Require all granted
AllowOverride All
# AllowOverride All = pour mode rewrite et autoriser les fichiers .htacces
## Options Indexes FollowSymLinks
## Options Indexes FollowSymLinks pour afficher Index of ...
</Directory>
</VirtualHost>
Compléter éventuellement suivant vos besoins et sauvegarder ce fichier.
Nota : utliser  "Options Indexes FollowSymLinks" pour afficher le listing d'un dossier (exemple http://sites/..../ => Index of /....

C3. Activer le VirtualHost
[Ajuster le nom sites (dossier de tests des sites Web) suivant vos besoins]
a2ensite sites.local.conf
Enabling site sites.local.
To activate the new configuration, you need to run:
systemctl reload apache2
relancer Apache
 systemctl reload apache2


C4. Éditer le fichier hosts pour l’ajuster

mousepad /etc/hosts

[Ajuster le nom sites (dossier de tests des sites Web) suivant vos besoins]
et donc ajouter
127.0.0.1 sites


relancer Apache
systemctl reload apache2



C5 Créer aussi un fichier phpinfo.php dans le dossier /sites avec
Ajuster les noms ici linux (répertoire personnel) et sites (dossier de tests des sites Web) suivant vos besoins
<?php phpinfo(); ?>
soit en ligne de commande
echo '<?php phpinfo(); ?>' >/home/linux/sites/phpinfo.php
Ou avec un logiciel éditeur de texte (mousepad, gedit, geany par ou autre possibilité a votre convenance)
Exemple : ouvrir mousepad copier la ligne
<?php phpinfo(); ?>
Puis sauvegarder le fichier dans /home/linux/sites avec le nom phpinfo.php
/home/linux/sites (adapter suivant vos besoins et le nom de votre dossier personnel)


Tester avec http://sites/phpinfo.php
Cela affichera le contenu du phpinfo
avec PHP Version 8.0.0rc1
et DOCUMENT_ROOT /home/linux/sites

C6. Déplacer le fichier Adminer.php depuis dossier /var/www/html/  vers /home/linux/sites
Ajuster les noms ici linux (répertoire personnel) et sites (dossier de tests des sites Web) suivant vos besoins

Tester avec http://sites/adminer.php 
ici lors du test du 23/10/2020
Si vous avez un Not Found vérifier le nom du fichier ;)
Vous devez avoir des erreurs (comme l’affichage des erreurs PHP est activé) car Adminer n'est PAS compatible PHP 8
Warning: ...adminer.php on line 171
Warning: ...adminer.php on line 171
Warning: ...adminer.php on line 171
Fatal error: ...adminer.php on line 20


C7. Ajouter le mode rewrite (si besoin suivant vos CMS)

a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
## relancer Apache
systemctl reload apache2

Note dans phpinfo
Loaded Modules : mod_rewrite est dans le dossier /etc/apache2/mods-enabled/rewrite.load

Il ne reste plus qu'à tester votre CMS,
et il va y avoir du boulot ;)

NOTA : le 06/12/20 la version 4.7.8 est compatible  PHP 8.x

Compléments
- installer PostgreSQL avec PHP 8.x
- NOTE pour installer ImageMagick sous PHP
- Mot de passe root de MariaDB perdu ou oublié

Crédit pour les affichages en ligne de commande : Syntax highlighting for the Web


Erreurs, omissions, corrections merci de me le signaler

Original 23/10/2020

Document http://jc.etiemble.free.fr/abc/ JCE -
version du 06/12/2020-0  CC_licence