Last Updated on 6 janvier 2021 by jbhr
[et_pb_section admin_label= »section »] [et_pb_row admin_label= »row »] [et_pb_column type= »4_4″][et_pb_text admin_label= »Text »]Nous allons décrire ici la première étape pour mettre en place un petit site personnel PHP/MySQL: la configuration du poste de développement.
Choix de Docker pour lancer le site en local
Le poste de développement (le PC ou le Mac) doit permettre de lancer le site, afin de rapidement voir et tester ce que l’on est en train de développer. Il faut également que l’environnement d’exécution sous Apache, PHP et MySQL soit aussi proche que possible que celui du serveur hébergeant le site, pour éviter les mauvaises surprises: une fonctionnalité qui marche bien sur le poste de développement mais qui plante une fois installé sur le serveur d’hébergement.
Une alternative à l’installation sur le poste de développement des applications nécessaires au lancement du site (Apache, PHP, Mysql) consiste à installer l’outil Docker sur le poste PC ou MAC: Docker permet de configurer et de lancer un environnement de type Linux exécutant les services applicatifs dans des « conteneurs », puis de faire tourner le site dans cet environnement.
C’est un outil qui existe depuis quelques années déjà et la mise en place d’un conteneur Docker est aujourd’hui assez simple et bien documentée. Le bénéfice apporté par l’utilisation de Docker: en configurant un conteneur disposant de tout le nécessaire pour faire tourner un site (Keleril dans le cas présent), on peut facilement partager la configuration et lancer le même conteneur sur un autre poste de développement, ce qui évite de refaire le travail d’installer un environnement de développement complet une seconde fois.
En outre, on dispose d’un environnement de développement très proche de l’environnement de production qui est en général hébergé sur une machine Linux. On peut même imaginer utiliser directement le conteneur installé sur le poste de développement pour déployer le site en production.
Par exemple on peut configurer un conteneur (ou une pile de conteneurs) Docker sur un PC sous Windows 10 professionnel, et réutiliser le même conteneur tel quel sur un Mac sous OS X.
Plutôt qu’un conteneur, on va configurer et lancer un une pile de conteneurs (ou « stack » Docker), chaque conteneur intégrant une application et communiquant avec les autres: Apache/PHP, Mysql, Phpmyadmin…
Installation de Docker Desktop sous Mac OS X (Sierra ou plus récent)
Il suffit d’installer Docker Desktop (plus besoin d’installer VirtualBox comme c’était le cas auparavant): consulter le guide d’installation de Docker Desktop sur le site Docker.com.
Installation de Docker Desktop sous PC Windows 10 Professionnel (ou Entreprise)
Il est aujourd’hui possible d’installer l’application Community Edition (=gratuit) de Docker Desktop pour Windows, disponible sur le site: https://hub.docker.com (créer un compte sur le site pour pouvoir télécharger).
Il y a toutefois 2 pré-requis à valider concernant un poste PC Windows:
- Docker Desktop pour Windows (dernière version) ne peut pas être installé sur la version familiale de Windows 10. Il faut impérativement disposer de Windows 10 Professional ou Enterprise 64-bit.
- Pour faire fonctionner l’application Docker sur un PC sous Windows 1, il faut impérativement que la » virtualisation » n’est pas activée sur le PC (sinon l’application refusera de se lancer).
Pré-requis n°1: passer un PC sous Windows 10 Famille sur PC Windows 10 Professionnel
Pour upgrader un Windows 10 édition familiale vers un Windows 10 édition pro, plusieurs solutions existent qui sont plus ou moins coûteuse et risquées. J’en présente deux:
Solution 1: acheter une clé d’activation Windows 10 professionnel chez Microsoft
Le lien « Mettre à niveau votre édition de Windows ou modifier la clé de produit » permet d’acheter un clé d’activation Windows 10 Professionnel chez Microsoft, à… 145€ quand même.
En principe l’installation de l’édition pro ne nécessite pas une réinstallation complète du poste et ne supprime aucun fichier. Mieux vaut bien entendu de toutes manières sauvegarder les fichiers importants avant de réaliser l’opération.
Solution 2: acheter une clé d’activation Windows 10 professionnel chez un vendeur tierce
Il en existe beaucoup, pour un prix habituellement compris entre 30€ et 40€ pour des licences originales. La procédure est plus délicate (sauvegarde indispensable car il n’est pas garanti que la mise à jour ne nécessite pas une réinstallation complète du système): il faut saisir plusieurs clés d’activations (celle obtenue auprès du vendeur tierce et une clé « par défaut »), couper le réseau à une certaine étape…
La procédure est bien décrite sur le blog « Daemonspace » (Matthieu Poignant).
Pré-requis n°2: vérifier l’activation de la virtualisation sur un PC sous Windows 10
Pour vérifier l’activation de la virtualisation, il faut consulter l’onglet « Performance » du gestionnaire de tâches:
Si la virtualisation n’est pas activée, il faut alors aller l’activer sur le BIOS du PC.
Pour mon Lenovo j’ai pu lancer le BIOS en redémarrant la machine et en appuyant sur les touches du clavier [Fn+F2] dès l’affichage du logo « LENOVO ».
Il faut ensuite trouver et activer l’option de virtualisation (virtualisation INTEL) et redémarrer le PC.
Pour un autre PC sous carte mère MSI, l’option était dans la rubrique du Bios: Overclocking\CPU Features-> SVM Mode.
Test de l’installation de Docker
Une fois installé, il est possible d’exécuter des commandes simples de Docker pour vérifier son fonctionnement.
Les commandes peuvent être exécutées depuis la console de commandes Windows, mais il est également possible de lancer le Powershell. Pour lancer ce dernier, il suffit de saisir la commande « Powershell » dans le menu Exécuter (que l’on lance avec la commande Windows + R) ou même directement dans le menu de recherche Windows (Touche Windows).
Une première commande permet d’afficher la version installée (19.03.5 dans mon cas):
docker version
Une seconde commande permet de créer et lancer le conteneur « Hello World »:
docker run hello-world
Si la commande fonctionne, on peut considérer que docker est correctement installé. Sinon il faudra vérifier les étapes précédentes.
Configuration de la pile de conteneurs Docker pour le site PHP « Keleril »
Le site PHP Keleril est décrit dans l’article précédent.
Plutôt qu’un conteneur, on va configurer et lancer un une pile de conteneurs (ou « stack » Docker), chaque conteneur intégrant une application et communiquant avec les autres:
- Conteneur « Serveur d’application »: Apache/PHP
- Conteneur « base de données »: Mysql
- Conteneur Phpmyadmin
- Conteneur Redis (système de cache clé/valeur)
Référence: documentation sur le site docker.com.
Projet de stack Docker LAMP: https://github.com/sprintcube/docker-compose-lamp
Procédure pour utiliser la configuration du stack Docker du projet « sprintcube/docker-compose-lamp »:
Sur le dépôt GIT local, créer une nouvelle branche « docker-integration » et basculer dessus:
git branch docker-integration
huntz:warinkeleril jbhr$ git checkout docker-integration
Depuis la page Github du projet: https://github.com/sprintcube/docker-compose-lamp, récupérer le projet sous forme de zip: bouton vert « Clone or download » puis lien « Download zip »
Copier l’archive zip dans le répertoire du projet sur lequel l’on souhaite utiliser Docker (ici le dossier Keleril), puis extraire le contenu de l’archive.
Copier le contenu sur dossier « docker-compose-lamp-master » directement dans la racine du projet, sauf le fichier README.md pour ne pas écraser celui du projet
Dans le dossier « www », ne conserver pour le moment que le fichier test-db.php
Copier tous les fichiers *.php ainsi que les dossiers images et le fichier design.css dans le dossier www. Sous mac ou linux, ceci peut être réalisé à l’aide de la commande:
for FILE in ./*.php; do git mv $FILE www/; done
git mv images www
git mv design.css www
Ajouter « .env » dans le fichier .gitignore à la racine du projet pour éviter que le fichier propre à chaque environnement ne soit indexé dans le dépôt GIT. Ajouter également d’autres éléments:
#ENV file (Docker)
.env
# Other Docker elements
/config/*
/data/*
/logs/*
Créer le fichier .env à la racine du projet, sur le modèle du fichier sample.env, en renseignant les valeurs pour le poste de développement (les valeurs des clés contenues dans ce fichier seront utilisées dans le fichier docker-compose.yml). Si la procédure décrite à été suivie, il n’y a normalement pas de valeurs à modifier par rapport au modèle sample.env.
Par défaut PHP 7.1 (la version configurée) ajoute un en-tête avec comme charset par défaut: UTF-8. Or tous les fichiers php du projet Keleril sont pour le moment en ISO-8859-1. Idéalement il faudrait les convertir en UTF-8 (ce n’est pas trop compliqué car les éditeurs proposent des outils pour le faire, mais il y a beaucoup de fichiers php dans le projet donc c’est un peu long…). Dans l’attente, pour éviter d’avoir des gros carrés à la place de tous les caractères accentués sur les pages, il suffit de rajouter une option dans le fichier config/php/php.ini:
default_charset = "iso-8859-1"
Ajuster le fichier docker-compose.yml, en particulier la base de données à créer:
MYSQL_DATABASE: keleril
MYSQL_USER: wikuser
MYSQL_PASSWORD: wik-2019
Lancement du stack Docker
Aller à la racine du projet Keleril, ou se trouve le fichier docker-compose.yml, et lancer la commande suivante (option -d pour « detached mode »):
docker-compose up -d
Lors du premier lancement, beaucoup de choses doivent être chargées, et cela prend du temps. A l’issue du chargement on doit voir les lignes suivantes dans la console:
Creating png-redis ... done
Creating png-mysql ... done
Creating png-phpmyadmin ... done
Creating png-webserver ... done
Les conteneur sont lancés, ce qu’on peut vérifier à l’aide de la commande: docker ps
Accès au site: http://localhost
Accès à phpMyAdmin: http://localhost:8080 (mot de passe du superuser root visible dans le fichier docker-compose.yml sur la rubrique environment du service mysql)
Après le premier lancement, il faut créer les tables de la base de données keleril à l’aide des scripts SQL disponibles dans le dossier sql du projet:
- Sous PhpMyAdmin (http://localhost:8080), cliquer sur la base de données keleril
- Cliquer sur l’onglet: Importer
- Glisser/déposer les 6 fichiers dumps directement sur la fenêtre PhpMyAdmin: armees.sql, batailles.sql, forum.sql, inscription.sql, marche.sql, regions.sql
Configurer la connexion à la base de données dans le fichier config.inc.php, en prenant soin d’utiliser « mysql » comme valeur pour le domaine de la base de données (host). Le fichier test_db.php issu du projet stack Docker peut servir de modèle
$db_host="mysql"; $db_port="3306"; $db_name="keleril"; $db_username="keleril"; $db_password="[mot de passe du user mysql keleril]";
Pour stopper la pile de conteneurs, passer la commande:
docker-compose down[/et_pb_text][/et_pb_column] [/et_pb_row] [/et_pb_section]