Mes ressources pour le Web

Installer PHP 8.0.x + MariaDB avec Debian 11

Installation de PHP 8.0.x sur une Debian 11 XFCE avec MariaDB.
J'ai donc installé sur une machine virtuelle 64 bits une version de PHP 8.0.9 avec MariaDB sur une Debian 11 RC3 Bullseye XFCE (test du 05/08/2021).
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 :

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.
** Ce tuto est en cours de finition et donc seul la partie A est terminée **


Debian Bullseye RC3 est fournie avec PHP 7.4 au moment de ce test.
Afin d'avoir une version PHP 8.0.x plus à jour j'ai utilisé le dépôt de Ondřej Surý  qui donnait PHP 8.0.9
Il faudra 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 par gedit, geany, nano 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.48-3.1


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/

deb11_apache

A4a. Installation de PHP 8.0.x - Préparation
Grâce à la mise à disposition de DEB.SURY.ORG
(dépôt php8.0)

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 (11.1.0).
ca-certificates est déjà la version la plus récente (20210119).

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
--2021-08-05 11:37:55-- https://packages.sury.org/php/apt.gpg
Résolution de packages.sury.org (packages.sury.org)… 104.21.18.148, 172.67.182.150, 2606:4700:3037::6815:1294, ...
Connexion à packages.sury.org (packages.sury.org)|104.21.18.148|: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
2021-08-05 11:37:55 (5,93 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/
 deb11_apt_sources_php8

Mise à jour des paquets du nouveau dépôt
apt-get update

Atteint :1 https://deb.debian.org/debian bullseye InRelease
Atteint :2 https://deb.debian.org/debian-security bullseye-security InRelease
Atteint :3 https://deb.debian.org/debian bullseye-updates InRelease
Réception de :4 https://packages.sury.org/php bullseye InRelease [6 841 B]
Réception de :5 https://packages.sury.org/php bullseye/main amd64 Packages [288 kB]

A4b. Installation de PHP 8.0.x

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 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, 18 nouvellement installés, 0 à enlever et 0 non mis à jour.
la version installée sera 8.0.9-1+0~20210730.22+debian11~1.gbp99e7e9

Par sécurité
apt-get upgrade

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
0 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.9
et DOCUMENT_ROOT /var/www/html
deb11_phpinfo-local 
deb11_phpinfo_apache-local


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

apt install mariadb-server

Les paquets supplémentaires suivants seront installés :
galera-4 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libfcgi-bin
libfcgi-perl libfcgi0ldbl libhtml-template-perl libsigsegv2
libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5
mariadb-server-10.5 mariadb-server-core-10.5 socat
Paquets suggérés :
gawk-doc libmldbm-perl libnet-daemon-perl libsql-statement-perl
libipc-sharedcache-perl mailx mariadb-test netcat-openbsd
Les NOUVEAUX paquets suivants seront installés :
galera-4 gawk libaio1 libcgi-fast-perl libcgi-pm-perl
libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libfcgi-bin
libfcgi-perl libfcgi0ldbl libhtml-template-perl libsigsegv2
libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5
mariadb-server mariadb-server-10.5 mariadb-server-core-10.5 socat
0 mis à jour, 20 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 44
Server version: 10.5.11-MariaDB-1 Debian 11
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 [mysql]>
Indiquez suite à l'invite  MariaDB [mysql]> :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'linux';
Ce qui donnera
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'linux';
Query OK, 0 rows affected (0.043 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.8.1
utilisée ici lors du test  - A voir si une version plus récente existe
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 ;)
Alors le fichier sera téléchargé dans le dossier /Téléchargements/ : adminer-4.8.1.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 Adminer et créer ses bases de données.

 deb11_var_html  adminerdeb11conex  adminerdeb11bd



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, nano 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, nano 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 ## si besoins décommenter ##
# 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
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.9
et DOCUMENT_ROOT /home/linux/sites
deb11_phpinfo-sites  deb11_phpinfo_apache-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

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
Puis relancer Apache
systemctl reload apache2
Note dans phpinfo
Loaded Modules : mod_rewrite est dans le dossier /etc/apache2/mods-enabled/rewrite.load

Pour compléments je vais installer la gestion d'associations GestAssoPhp

deb11_gesta-demo  deb11_gesta-demobd

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 05/08/2021

- 01/10/21 remplacé PHP 8 par 8.0.x
Document http://jc.etiemble.free.fr/abc/ JCE - version du 01/10/2021-0  CC_licence