Tester en local sous Debian 9.x + PHP 7.0.x + MariaDB


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.0.x avec MariaDB sur une Debian 9 Stretch XFCE.
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 9 est fournie avec PHP 7.0.15-1 au moment de ce test.
Il faut donc installer Apache, PHP et mariadb-server.
(le paquet mysql-server n'est plus disponible)

Les manipulations sont faites en ligne de commande (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
(Terminal administrateur)

1. mise à jour des paquets

apt-get update

2. Installation de 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.x


3. 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

4. Installation de PHP7.0

Attention le code ci-dessous doit être sur une seule ligne
apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-mbstring php7.0-xml php7.0-zip

Cela doit afficher sur le terminal
apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
php7.0-gd php7.0-mcrypt php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-mbstring
php7.0-xml php7.0-zip
Supprimer éventuellement les modules qui ne vous intéressent pas

The following additional packages will be installed:
libcurl3 libmcrypt4 libzip4 php-common php7.0-cli php7.0-common
php7.0-opcache php7.0-readline
Paquets suggérés :
php-pear libmcrypt-dev mcrypt
Les NOUVEAUX paquets suivants seront installés :
libapache2-mod-php7.0 libcurl3 libmcrypt4 libzip4 php-common php7.0
php7.0-cli php7.0-common php7.0-curl php7.0-gd php7.0-gmp php7.0-intl
php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache
php7.0-readline php7.0-sqlite3 php7.0-xml php7.0-zip

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


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.0.xx
et DOCUMENT_ROOT /var/www/html
phpinfo70


5. Installation de MariaDB
(mariadb-server-10.1)

apt install mariadb-server-10.1

The following additional packages will be installed:
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libdbd-mysql-perl
libdbi-perl libfcgi-perl libhtml-template-perl libjemalloc1
libmariadbclient18 libreadline5 libterm-readkey-perl mariadb-client-10.1
mariadb-client-core-10.1 mariadb-common mariadb-server-core-10.1
mysql-common rsync socat
Paquets suggérés :
gawk-doc libclone-perl libmldbm-perl libnet-daemon-perl
libsql-statement-perl libipc-sharedcache-perl mailx mariadb-test
netcat-openbsd tinyca openssh-server
Les NOUVEAUX paquets suivants seront installés :
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libdbd-mysql-perl
libdbi-perl libfcgi-perl libhtml-template-perl libjemalloc1
libmariadbclient18 libreadline5 libterm-readkey-perl mariadb-client-10.1
mariadb-client-core-10.1 mariadb-common mariadb-server-10.1
mariadb-server-core-10.1 mysql-common rsync socat

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


5a. Gestion des bases de données avec MariaDB

Affichage de la version
mysql -V 
mysql Ver 15.1 Distrib 10.1.21-MariaDB, for debian-linux-gnu (i686) using readline 5.2

Au cas ou on souhaite se connecter aux base de données créées soit avec PhpMyAdmin ou Adminer sans mot de passe, il suffit de passer en mysqld_safe

Mot de passe root de MariaDB perdu ou oublié



service mysql stop
mysqld_safe --skip-grant-tables &

[1] 1729
170213 15:14:45 mysqld_safe Logging to syslog.
170213 15:14:45 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Et a partir ce ce moment la connexion est possible sans mot de passe


5b. 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
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.21-MariaDB-5 Debian 9.0
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 'monpass';
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 "monpass" par votre mot de passe root choisi
Il sera alors possible de se connecter avec adminer avec les identifiant "root" et "monpass" et d'avoir accès à la gestion des toutes les bases de données.

5c. Création d'une base de données avec MariaDB pour gérer une seule base de données

Exemple : création d'une base de données : cmsdb 
- avec un utilisateur cmsuser avec mot de passe mdpuser

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 2
Server version: 10.1.21-MariaDB-5 Debian 9.0
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 cmsdb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create user cmsuser@localhost identified by 'mdpuser';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on cmsdb.* to cmsuser@localhost identified by 'mdpuser';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit;
Bye

5d. Contrôle de la création de la base en root
NOTA ici linux est le nom de mon  dossier personnel (/home/linux/) (adapter suivant votre dossier personnel)

root@debian:/home/linux# mysql -u root -p
Enter password:
NOTA : Tappez "votre_mot_de_passe_root_choisi" puis touche entrée pour valider
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database
+--------------------+
| cmsdb
| information_schema
| mysql
| performance_schema
+--------------------+
4 rows in set (0.01 sec)

5e. Contrôle de la création de la base cmsuser (password mdpuser)

mysql -u 'cmsuser' -p 
root@debian:/home/linux# mysql -u 'cmsuser' -p
Enter password:
NOTA : Tappez "mdpuser" puis touche entrée pour valider
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database
+--------------------+
| cmsdb
| information_schema
+--------------------+
2 rows in set (0.00 sec)



6. Télécharger et mettre en place Adminer  Recommandé pour la simplicité ;)
Adminer 4.2.5 for MySQL
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.2.5-mysql.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 attententiion 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

7. Pour phpmyadmin Pour les allergiques à Adminer ;)
j'utilise Synaptic (pour changer)
dbconfig-common (version 2.0.8) sera installé
dbconfig-mysql (version 2.0.8) sera installé
php-bz2 (version 1:7.0+49) sera installé
php-mysql (version 1:7.0+49) sera installé
php-pear (version 1:1.10.1+submodules+notgz-9) sera installé
php-php-gettext (version 1.0.12-0.1) sera installé
php-phpseclib (version 2.0.4-1) sera installé
php-tcpdf (version 6.2.12+dfsg2-1) sera installé
php7.0-bz2 (version 7.0.15-1) sera installé
phpmyadmin (version 4:4.6.6-1) sera installé

se connecter avec dans la barre d’adresse du navigateur : http://localhost/phpmyadmin/index.php

phpmyadmin

PhpMyAdmin a créé une table en base de données

Vérifions avec MariaDB entrer : mysql -u root -p
NOTA ici linux est le nom de mon dossiers personnel  (/home/linux/) (adapter suivant votre dossier personnel)

root@debian:/home/linux# mysql -u root -p
Enter password:
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database
+--------------------+
| cmsdb
| information_schema
| mysql
| performance_schema
| phpmyadmin
+--------------------+


B - Manipulations et ajouts


1. 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

gksudo mousepad /etc/php/7.0/apache2/php.ini
Par exemple avec le bureau KDE : gksu kwrite /etc/php/7.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 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)

1. 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

2. 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
gksudo 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.

3. 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

4. Editer le fichier hosts pour l’ajuster

gksudo mousepad /etc/hosts

et donc ajouter
127.0.0.1 sites


relancer Apache
systemctl reload apache2



5 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.0.15-1
et DOCUMENT_ROOT /home/linux/sites

6. Ajouter le mode rewrite

 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

Comment récupérer (perdu ou oublié) mon mot de passe root de MariaDB

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
systemctl restart mariadb
mysql_secure_installation


cela donne
 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):


Comme je ne le connais le mot de passe pas donc validation avec la touche Entrée

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: -> Entrer VOTRE mot de passe
Re-enter new password: Confirmer VOTRE mot de passe
Password updated successfully!
Reloading privilege tables..
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] n Nota Réponse suivant vos besoins
... skipping.

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] n Nota Réponse suivant vos besoins
... skipping.

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] n Nota Réponse suivant vos besoins
... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] n Nota Réponse suivant vos besoins
... skipping.

Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!


Et voila vote nouveau mot de passe MariaDB est en service


Il ne reste plus qu'à tester votre CMS,
par exemple
- si je choisi un bon 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 ;)


Pour information si vous souhaitez installer une version plus récente de PHP il faut passer par le dépôt Debian DPA (de Ondřej Surý) : Actuelment c'est le paquet PHP 7.3.x Pour information voir Tester en local sous Debian 9.x + PHP 7.3.x



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


Erreurs, omissions, corrections merci de me le signaler

Document http://jc.etiemble.free.fr/abc/ JCE - version du 08/05/2019-0  CC_licence