Installer en local PHP 7.3.x + MariaDB avec Debian 10


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.

Dans l'exemple suivant j'ai installé sur une machine 32 bits une version de PHP7.3.x avec MariaDB sur une Debian 10 Stretch XFCE.
Nota :
- Depuis Debian 9 c'est mariadb-server. (le paquet mysql-server n'est plus disponible)
- Les différences entre mysql et mariadb  et MariaDB vs. MySQL
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 linux est le nom de mon 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.


Cette version de Debian 10 est fournie avec PHP 7.3.4-2 au moment de ce test (13/07/2019).
Afin d'avoir une version PHP plus à jour j'ai utilisé le dépôt de Ondřej Surý  qui donnait PHP 7.3.7-1
Il faut donc installer Apache, PHP et mariadb-server.


** Pour avoir PHP 7.4.x modifier le dépôt de Ondřej Surý php7.4  les commandes sont identique il suffit de modifier php7.3 en php7.4 **

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é a votre convenance pour l’édition des fichiers textes

A - Préparation et installation


A1. mise à jour des paquets

apt-get update

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
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
(Nota sur Debian 10 ( Buster) apt-transport-https est inclut dans apt 1.5)
sinon
apt-get install apt-transport-https lsb-release ca-certificates

dans mon cas lsb-release et ca-certificates étaient déjà installés donc
ca-certificates est déjà la version la plus récente (20190110).
ca-certificates passé en « installé manuellement ».
lsb-release est déjà la version la plus récente (10.2019051400).
Les NOUVEAUX paquets suivants seront installés :
apt-transport-httpsapt-transport-http

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
--2019-07-13 18:19:28-- https://packages.sury.org/php/apt.gpg
Résolution de packages.sury.org (packages.sury.org)… 104.31.94.169, 104.31.95.169, 2606:4700:30::681f:5ea9, ...
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
2019-07-13 18:19:29 (5,15 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 http://deb.debian.org/debian buster InRelease
Atteint :2 http://deb.debian.org/debian-security buster/updates InRelease
Atteint :3 http://deb.debian.org/debian buster-updates InRelease
Réception de :4 https://packages.sury.org/php buster InRelease [6 759 B]
Réception de :5 https://packages.sury.org/php buster/main i386 Packages [103 kB]

A4b. Installation de PHP 7.3.7

Attention le code ci-dessous doit être sur une seule ligne
apt install php7.3 libapache2-mod-php7.3 php7.3-mysql php7.3-curl php7.3-json php7.3-gd php7.3-intl php7.3-sqlite3 php7.3-gmp php7.3-mbstring php7.3-xml php7.3-zip
Cela doit afficher sur le terminal
apt install php7.3 libapache2-mod-php7.3 php7.3-mysql php7.3-curl php7.3-json
php7.3-gd php7.3-intl php7.3-sqlite3 php7.3-gmp php7.3-mbstring
php7.3-xml php7.3-zip
Supprimer éventuellement les modules qui ne vous intéressent pas

Les paquets supplémentaires suivants seront installés : 
libicu64 libzip4 php-common php7.3-cli php7.3-common php7.3-opcache
php7.3-readline
Paquets suggérés :
php-pear
Les NOUVEAUX paquets suivants seront installés :
libapache2-mod-php7.3 libicu64 libzip4 php-common php7.3 php7.3-cli
php7.3-common php7.3-curl php7.3-gd php7.3-gmp php7.3-intl php7.3-json
php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-readline php7.3-sqlite3
php7.3-xml php7.3-zip

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 7.3.7
et DOCUMENT_ROOT /var/www/html
phpinfo7.3.7


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

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 40
Server version: 10.3.15-MariaDB-1 Debian 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 [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 les touches Contrôle + C (Ctrl-C = exit)
MariaDB [mysql]> exit;
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.1 
utiliser ici lors du test - 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.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 la base de données

Adminer

Il vous reste à créer vos base de données en utilisant Adminer.


B - Manipulations et ajouts


B1. Modifications du php.ni 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/7.0/apache2/php.ini

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

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

Ajouter (pour afficher les erreurs d'exécution des scripts et les erreurs E_STRICT)
error_reporting = E_ALL | 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


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
# pour mode rewrite et autoriser les fichiers .htacces
</Directory>
</VirtualHost>
Compléter éventuellement suivant vos besoins et sauvegarder ce fichier.

C3. Activer le VirtualHost

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

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
<?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 7.3.7
et DOCUMENT_ROOT /home/linux/sites

C6. Déplacer le fichier Adminer.php depuis dossier /var/www/html/  vers /home/linux/sites
Tester avec http://sites/Adminer.php


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,
par exemple
- si je choisi un système de gestion de contenu je prends CMS made simple

Je vais créer un sous dossier /home/linux/sites/cms2/ pour installer les fichiers de CMS made simple,
Puis je vais télécharger le fichier installateur sur la page de téléchargement    et installer suivant la page d'aide,
Puis lancer la page administration pour tester.

- Si je souhaite installer un blog je choisi Dotclear   je vais créer un sous dossier /home/linux/sites/dotclear/ pour installer les fichiers,
Puis je vais télécharger le fichier fichier tar.gz sur la page de téléchargement  et décompacter ce fichier dans le dossier dotclear  et lancer l'installation comme indiquer dans la page Installation classique en lançant l’installation par http://sites/dotclear/
Puis tester.

Quelques astuces pour installer un CMS
- utilisez de préférence un dossier pour les fichiers plutôt que la racine du site pour pouvoir faire facilement les grosses mises à jour et disposer de l’évolution possible,
- pour le préfixe de la base de données évitez le préfixe par défaut par sécurité,
- n’utilisez pas l'email administrateur du CMS pour le formulaire de contact
- sécurisez éventuellement votre dossier d'administration (ou se trouve la page d’identification)
- sécurisez bien les dossiers avec des fichiers .htaccces . (exemple de fichier htaccess pour CMSMS)
- Et surtout suivez les mises à jour ;)

Compléments
- 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 01/12/2019
Document http://jc.etiemble.free.fr/abc/ JCE -
version du 11/05/2020-0  CC_licence