Si vous êtes un fervent utilisateur de PHP et que vous utilisez MySQL pour vos bases de données, vous connaissez certainement PHPMyAdmin, application vous permettant de gérer ces dernières, en évitant d’utiliser un terminal de s’y connecter et de tout faire à la main. Généralement, PHPMyAdmin est installé d’office sous WAMP/LAMP/XAMP, ainsi que sur la plupart des hébergeurs PHP (OVH, LWS, 1&1…)
Cependant, comment procéder lorsque vous avez initialisé un projet sous Docker ? C’est ce que nous allons voir ensemble maintenant :
Écriture du docker-compose
Que vous utilisiez Docker ou docker-compose, cela revient au même, nous allons devoir déclarer au système que nous voulons utiliser PHPMyadmin. Il existe justeent une image officielle sur le HUB docker, disponible ici : https://hub.docker.com/r/phpmyadmin/phpmyadmin/
Si vous ne savez pas comment s’écrit un docker-compose, et/ou que vous voulez en savoir plus sur le sujet, je vous invite fortement à lire cet article, qui vous décrira pas à pas comment configurer un site WEB (PHP-Apache-Mysql) avec docker-compose.
Écrivons pour l’instant un simple fichier docker-compose.yml qui contient notre container MySQL :
version: "3.9"
services:
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "super-secret-password"
MYSQL_DATABASE: "my-wonderful-website"
volumes:
- dbData:/var/lib/mysqlvolumes:
dbData:
Bon, jusque là, rien de sorcier, nous avons un container qui contient MySQL, ainsi qu’un volume associé, pour permettre aux données de ne pas être effacées lorsque ce container sera éteint.
Nous allons maintenant ajouter PHPMyAdmin, pour éviter de nous connecter sans arrêt au container MySQL via le terminal, ce qui sera bien plus pratique pour gérer nos bases de données :
version: "3.9"
services:
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "super-secret-password"
MYSQL_DATABASE: "my-wonderful-website"
volumes:
- dbData:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql // same name as mysql service name
PMA_PORT: 3306
restart: always
ports:
- 8081:80
volumes:
dbData:
Et voilà c’est tout. Qu’a-t-on fait ici ? On a créé un service qui dans l’ordre :
- récupère l’image phpmyadmin depuis le HUB docker
- contient deux variables d’environnement pour son bon fonctionnement :
- le HOST est « mysql », qui correspond au service du même nom, permettant à l’application de se baser sur ce serveur de base de données
- le PORT est 3306
- se redémarrera à chaque fois qu’e le service s’éteint (restart: always) pour une raison ou une autre (crash, plus de RAM…)
- est accessible depuis le port 8081 de votre PC, et est disponible sur le port 80 interne au container. Il n’est pas conseillé de rendre accessible PHPMyAdmin depuis le port 80 de votre PC, ce dernier étant généralement réservé à votre application/site web principal.
Accès et utilisation
Nous avons fait le minimum syndical pour accéder à PHPMyAdmin sur notre machine. Ce n’était pas bien long n’est-ce pas ? Si vous avez bien suivi, nous allons pouvoir y accéder depuis notre port 8081. Lançons tout d’abord les containers :
$ docker-compose up
Une fois les images téléchargées et les containers en route, rendez-vous sur http://localhost:8081
Si tout a bien fonctionné, vous devriez voir apparaître la page d’accueil de PHPMyAdmin :
L’application vous demande donc tout naturellement l’utilisateur et le mot de passe pour accéder à votre base de données, sur le serveur mysql que vous avez déclaré dans la variable d’environnement PMA_HOST. Entrez donc avec l’utilisateur « root » et son mot de passe, défini dans mysql, à savoir la variable « MYSQL_ROOT_PASSWORD » (dans notre exemple « super-secret-password »). Vous arrivez donc sur la page d’accueil de PHPMyAdmin :
Notez que nous pouvons confirmer la bonne connexion avec notre serveur MySQL, la base de donnée créée au démarrage des containers que nous avons définie dans notre fichier docker-compose dans la variable MYSQL_DATABASE (my-wonderful-website), est bien disponible et accessible dans le menu de gauche.
C’est tout bon, vous pouvez maintenant accéder à vos bases de données comme bon vous semble !
Accès direct sans authentification
Si vous avez l’habitude de travailler sur un environnement local, vous trouvez ça peut-être fastidieux de devoir sans cesse entrer votre mot de passe sur PHPMyAdmin (personnellement, lors de mes développements, j’utilise souvent la navigation privée pour des histoires de cache, et me fait déconnecter sans arrêt de l’application).
Heureusement, il est possible dans le fichier docker-compose de fournir à PHPMyAdmin des variables d’environnement supplémentaires, qui vont vous permettre de passer tout bonnement cette étape. Ainsi, vous pouvez procéder comme suit :
version: "3.9"
services:
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "super-secret-password"
MYSQL_DATABASE: "my-wonderful-website"
volumes:
- dbData:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql
PMA_USER: "root"
PMA_PASSWORD: "$MYSQL_ROOT_PASSWORD"
PMA_PORT: 3306
restart: always
ports:
- 8081:80
volumes:
dbData:
Avec les deux variables PMA_USER et PMA_PASSWORD de configurées, vous pourrez directement accéder à votre gestionnaire de bases de données préféré dans avoir à vous authentifier.
Pratique non ?