DevOps

Docker Compose : Déployer MySQL et phpMyAdmin sur un VPS

Guide pratique pour déployer une base de données MySQL avec phpMyAdmin via Docker Compose. Configuration YAML, firewall UFW et sécurisation par tunnel SSH.

07 Feb 2026 6 min de lecture 50 vues
50

Lectures

6

Minutes

0

Partages

Dans le monde du développement web, la gestion des bases de données est une tâche essentielle qui nécessite souvent une combinaison de MySQL pour les données et de phpMyAdmin pour une gestion visuelle. Pour les développeurs ou administrateurs système, déployer ces outils sur un serveur peut s'avérer une tâche laborieuse, surtout lorsque l'on doit ajuster les configurations pour chaque nouvel environnement. Heureusement, Docker Compose simplifie considérablement ce processus, permettant de déployer rapidement et efficacement MySQL et phpMyAdmin sur un VPS. Dans cet article, nous allons explorer comment utiliser Docker Compose pour configurer un environnement de base de données robuste, sécurisé et facilement maintenable. ## Prérequis pour le déploiement Avant de plonger dans le vif du sujet, il est important de s'assurer que vous disposez des prérequis nécessaires pour suivre ce guide. Voici ce dont vous aurez besoin : - **Un VPS sous Linux** : Nous recommandons fortement l'utilisation d'Ubuntu ou de Debian pour leur popularité et leur vaste support communautaire. - **Docker et Docker Compose installés** : Ces outils sont essentiels pour orchestrer et gérer vos conteneurs. - **Accès SSH** : Vous devez pouvoir vous connecter à votre serveur pour exécuter les commandes nécessaires. - **Connaissances de base en ligne de commande** : Bien que nous couvrions les commandes spécifiques, une compréhension des bases de la ligne de commande Linux est utile. Pour vérifier que Docker est bien installé sur votre serveur, exécutez les commandes suivantes :

docker --version
docker compose version
## Configuration du fichier `docker-compose.yml` Le cœur de notre déploiement repose sur le fichier `docker-compose.yml`. Ce fichier, écrit en YAML, décrit les services que nous souhaitons déployer, ainsi que leurs configurations respectives. Voici un exemple complet de fichier `docker-compose.yml` pour déployer MySQL et phpMyAdmin :

version: '3.8'
services:
  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: ma_base_de_donnees
      MYSQL_USER: user
      MYSQL_PASSWORD: mon_mot_de_passe
    volumes:
      - ./mysql/db:/var/lib/mysql
    networks:
      - app_network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: unless-stopped
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
    ports:
      - "5081:80"
    networks:
      - app_network

networks:
  app_network:
    driver: bridge
### Explication des services Analysons ensemble les services définis dans notre fichier `docker-compose.yml` : - **Service `db`** : Utilise l'image `mysql:8.0`. Il configure une base de données MySQL avec un mot de passe root, crée une base de données par défaut et ajoute un utilisateur avec des privilèges. - **Service `phpmyadmin`** : Utilise l'image `phpmyadmin/phpmyadmin`. Ce service fournit une interface web pour interagir avec notre base de données MySQL. La configuration des **réseaux** permet aux conteneurs de communiquer entre eux tout en étant isolés du reste du monde. ## Bonnes pratiques Lors de l'utilisation de Docker Compose pour déployer des services, il est crucial de suivre certaines bonnes pratiques pour assurer la sécurité et la performance de votre système. ### Utilisation des variables d'environnement Les mots de passe et autres informations sensibles ne devraient jamais être en dur dans le fichier `docker-compose.yml`. Utilisez plutôt des variables d'environnement pour les injecter au moment du démarrage du conteneur.

export MYSQL_ROOT_PASSWORD=rootpassword
export MYSQL_DATABASE=ma_base_de_donnees
export MYSQL_USER=user
export MYSQL_PASSWORD=mon_mot_de_passe
docker-compose up -d
### Sécurisation des données Utilisez des volumes pour persister les données MySQL sur le disque de votre VPS. Cela garantit que vos données ne sont pas perdues lors de la recréation ou de la mise à jour des conteneurs. ## Pièges courants Même avec Docker Compose, certains pièges peuvent survenir si vous n'êtes pas attentif. ### Port de connexion Assurez-vous que le port que vous mappez pour phpMyAdmin (dans notre cas, 5081) n'est pas utilisé par un autre service. Cela éviterait des conflits de port. ### Mises à jour des images Ne négligez pas la mise à jour régulière des images Docker pour bénéficier des dernières mises à jour de sécurité et fonctionnalités. Vous pouvez le faire en exécutant :

docker-compose pull
docker-compose up -d
## Cas d'usage réels Docker Compose est largement utilisé dans les environnements de développement et de production pour simplifier la gestion des services multi-conteneurs. Voici quelques scénarios typiques : - **Développement local** : Les développeurs peuvent utiliser Docker Compose pour configurer rapidement un environnement de développement local qui reflète l'environnement de production. - **Tests d'intégration** : Les équipes peuvent déployer des environnements de test isolés pour exécuter des tests d'intégration, assurant ainsi que les modifications n'affectent pas les services en production. - **Environnements de staging** : Avant la mise en production, un environnement de staging peut être mis en place pour tester les nouvelles fonctionnalités. ## Comparaison avec d'autres outils Docker Compose n'est pas le seul outil de gestion de conteneurs. Voici une comparaison avec d'autres solutions populaires :
Outil Usage principal Complexité
Docker Compose Orchestration de conteneurs multi-services Modérée
Kubernetes Orchestration à grande échelle Élevée
Swarm Orchestration native Docker Modérée
## Conclusion En conclusion, Docker Compose est un outil puissant qui simplifie considérablement le déploiement de services comme MySQL et phpMyAdmin sur un VPS. En suivant les bonnes pratiques et en évitant les pièges courants, vous pouvez créer un environnement de développement et de production efficace et sécurisé. Que vous soyez un développeur ou un administrateur système, maîtriser Docker Compose vous offre une flexibilité et une agilité accrues dans la gestion de vos infrastructures conteneurisées.

Conseil pro : Automatisez vos déploiements avec des scripts pour réduire les erreurs humaines et gagner du temps lors de la mise à jour ou de la réinitialisation de vos environnements.

En suivant ce guide, vous devriez maintenant être bien équipé pour déployer MySQL et phpMyAdmin sur votre VPS avec Docker Compose, prêt à répondre aux besoins de votre application web.

Configurer des volumes persistants avec Docker Compose

Par défaut, les données MySQL disparaissent quand le conteneur est supprimé. Les volumes Docker permettent de persister les données entre les redémarrages et mises à jour.

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootsecret
      MYSQL_DATABASE: portfolio
      MYSQL_USER: portfolio
      MYSQL_PASSWORD: secret
    volumes:
      - mysql_data:/var/lib/mysql       # Volume nommé (persistant)
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # Script d'init
    ports:
      - "3306:3306"

  phpmyadmin:
    image: phpmyadmin:latest
    depends_on:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_USER: portfolio
      PMA_PASSWORD: secret
    ports:
      - "8080:80"

volumes:
  mysql_data:    # Volume nommé géré par Docker

Commandes essentielles Docker Compose

# Démarrer tous les services en arrière-plan
docker compose up -d

# Voir les logs en temps réel
docker compose logs -f mysql

# Arrêter sans supprimer les volumes
docker compose stop

# Supprimer les conteneurs ET les volumes (attention : données perdues)
docker compose down -v

# Redémarrer uniquement un service
docker compose restart mysql

# Exécuter une commande dans un conteneur
docker compose exec mysql mysql -u portfolio -p

Conseil pro : En production, ne mappez jamais phpMyAdmin sur un port public (80/443). Limitez l'accès via un tunnel SSH : ssh -L 8080:localhost:8080 ubuntu@serveur, puis accédez à http://localhost:8080 depuis votre machine locale.

Sécuriser phpMyAdmin en production

MesureDescriptionPriorité
Accès SSH tunnelExposer uniquement en local via SSH🔴 Critique
Authentification forteMot de passe complexe, 2FA si possible🔴 Critique
Restriction IPNginx : allow uniquement votre IP🟡 Recommandé
URL personnaliséeChanger /phpmyadmin en URL aléatoire🟡 Recommandé
Logs d'accèsSurveiller les tentatives de connexion🟢 Optionnel

Optimiser les performances de MySQL dans Docker

MySQL dans Docker utilise une configuration par défaut qui n'est pas optimisée pour la production. Quelques ajustements dans le fichier de configuration permettent d'améliorer significativement les performances.

# Créer un fichier de configuration MySQL personnalisé
# mysql/conf.d/custom.cnf
[mysqld]
innodb_buffer_pool_size = 256M    # Augmenter selon la RAM disponible
innodb_log_file_size = 64M
max_connections = 100
query_cache_size = 32M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1               # Logger les requêtes > 1 seconde

# Monter le fichier dans docker-compose.yml
volumes:
  - ./mysql/conf.d:/etc/mysql/conf.d
  - mysql_data:/var/lib/mysql

Sauvegarder la base de données automatiquement

#!/bin/bash
# backup-mysql.sh - Sauvegarde automatique quotidienne
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/mysql"
mkdir -p $BACKUP_DIR

# Dump via Docker
docker exec portfolio-mysql mysqldump   -u portfolio -pPortfolioSecure2026!   --single-transaction --routines --triggers   portfolio | gzip > $BACKUP_DIR/portfolio_$DATE.sql.gz

# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "Sauvegarde créée : portfolio_$DATE.sql.gz"

# Ajouter au cron (tous les jours à 3h du matin)
# crontab -e
# 0 3 * * * /home/ubuntu/backup-mysql.sh

Conseil pro : Testez régulièrement la restauration de vos sauvegardes dans un environnement de test. Une sauvegarde non testée est une sauvegarde dont vous ne pouvez pas garantir l'intégrité. La commande de restauration est : gunzip -c backup.sql.gz | docker exec -i portfolio-mysql mysql -u portfolio -p portfolio

Tags

MySQL Docker phpMyAdmin Docker Compose

Partagez cet article

Twitter Facebook LinkedIn
JY
Jordane YENO

Developpeur Full Stack passionne par le web et les nouvelles technologies

En savoir plus

Articles similaires