Restaurer une sauvegarde Joomla avec Docker
Restaurez facilement la sauvegarde de votre site Joomla en local avec Docker, Docker Compose et Akeeba Kickstart. Une simple commande make import suffit.
Traduction automatique
Cet article fait partie de la série Créer votre site Joomla avec Docker :
Journal des modifications

Ce guide explique comment restaurer un site Joomla en local en combinant Docker, une archive Akeeba Backup et l'utilitaire Akeeba Kickstart. On configure un environnement sur mesure avec PHP et Apache, puis on lance une simple commande d'import pour déployer les fichiers et les containers nécessaires. Le processus se termine dans le navigateur, via l'assistant Kickstart, pour finaliser la connexion à la base de données et la restauration du site.
Dans les articles précédents (Partie 1 et Partie 2), nous avons vu comment créer un site Joomla de zéro avec Docker : récupérer Joomla, PHP, Apache et MySQL depuis Docker Hub et faire un peu de magie pour obtenir un site local tout neuf sur http://127.0.0.1:8080.
Dans cet article, nous allons voir comment restaurer sur notre machine une sauvegarde créée grâce à l'excellent composant Akeeba Backup.
Nous allons réutiliser certains fichiers de la Partie 2 et les adapter.
À la fin, nous aurons une commande make import qui démarrera Akeeba Kickstart.
Résultat
Renseignez les informations de base de données affichées dans votre console, et Akeeba Kickstart s'occupe du reste —
d'une sauvegarde .jpa brute à un site consultable :



Pourquoi ça fonctionne
- Nous réutilisons le même trio
compose.yaml/.env/makefileque dans la Partie 2, donc rien de neuf à apprendre là-dessus. - Le seul vrai changement : comme la sauvegarde est déjà un site Joomla complet, les containers n'ont besoin que de PHP et Apache, pas d'une image Joomla fraîche — la base de données est reconstruite depuis la sauvegarde par Akeeba Kickstart, et non par l'installateur de Joomla.
Créer les fichiers nécessaires
Passer l'étape de création des fichiers
Dans les chapitres suivants, vous devrez créer plusieurs fichiers par copier/coller. Si vous voulez aller plus vite, lancez simplement les commandes ci-dessous pour récupérer les fichiers depuis mon repo Github, vous n'aurez ainsi pas à les créer.
En suivant les instructions ci-dessous, vous créerez un dossier xxx dans lequel copier tous les fichiers nécessaires à la restauration d'un site Joomla avec Docker. Vous pouvez alors passer directement au chapitre « Lancer le processus d'importation », les fichiers étant déjà en place.
Si vous préférez comprendre ce que vous faites et créer les fichiers à la main, poursuivez la lecture ci-dessous.
Créez un nouveau dossier sur votre machine, par exemple mkdir /tmp/joomla_restore && cd $_.
Dans ce dossier, vous devrez créer plusieurs fichiers (référez-vous à la Partie 2 si vous avez besoin de plus d'explications sur ces fichiers).
Le fichier d'orchestration : compose.yaml
Ci-dessous, en surbrillance, les petites différences par rapport au fichier compose.yaml vu dans la Partie 2.
Voici pourquoi : cette fois, nous n'avons pas besoin de télécharger une copie fraîche de Joomla puisque nous avons déjà un site Joomla (notre sauvegarde). Ce dont nous avons besoin, c'est de PHP et Apache. Pas de Joomla, donc nous utiliserons cette fois une image Docker sur mesure, pas une image existante.
À part les lignes en surbrillance, tout le reste est identique à la Partie 2.
name: ${PROJECT_NAME:-your-project-name}
services: joomla: # highlight-next-line build: # highlight-next-line context: . # highlight-next-line args: # highlight-next-line - PHP_VERSION=${PHP_VERSION:-8.3-apache} container_name: ${CONTAINER_PREFIX:-joomla}-app restart: always ports: - ${WEB_PORT:-8080}:80 environment: - JOOMLA_DB_HOST=joomladb - JOOMLA_DB_NAME=${DB_NAME:-joomla} - JOOMLA_DB_PASSWORD=${DB_PASSWORD:-examplepass} - JOOMLA_DB_USER=${DB_USER:-joomla} depends_on: joomladb: condition: service_healthy user: ${UID:-1000}:${GID:-1000} volumes: - ./joomla_data:/var/www/html networks: - joomla_network
joomladb: image: mysql:${MYSQL_VERSION:-latest} container_name: ${CONTAINER_PREFIX:-joomla}-db restart: always ports: - ${MYSQL_PORT-:3306}:3306 environment: - MYSQL_DATABASE=${DB_NAME:-joomla} - MYSQL_PASSWORD=${DB_PASSWORD:-examplepass} - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-rootpass} - MYSQL_USER=${DB_USER:-joomla} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10 user: ${UID:-1000}:${GID:-1000} volumes: - ./db_data:/var/lib/mysql networks: - joomla_network
phpmyadmin: image: phpmyadmin container_name: ${CONTAINER_PREFIX:-joomla}-phpmyadmin restart: always depends_on: joomladb: condition: service_healthy ports: - 8081:80 environment: - PMA_HOST=joomladb - PMA_PASSWORD=${DB_ROOT_PASSWORD:-rootpass} networks: - joomla_network
networks: joomla_network:Ce fichier Docker Compose configure une application Joomla avec trois services : un conteneur Joomla construit à partir d'une image personnalisée, une base de données MySQL, et phpMyAdmin pour gérer la base. Les variables d'environnement permettent de personnaliser les ports, les identifiants de base de données, et les versions utilisées, avec des valeurs par défaut si rien n'est spécifié.
Le fichier .env
Comme indiqué plus haut, nous n'avons plus besoin de Joomla, juste de PHP et Apache. Nous allons donc définir une variable PHP_VERSION et l'initialiser à la version voulue.
CONTAINER_PREFIX=joomlaDB_NAME=joomlaDB_PASSWORD=examplepassDB_USER=joomlaMYSQL_PORT=3306MYSQL_VERSION=8.4.2// highlight-next-linePHP_VERSION=8.3-apachePROJECT_NAME=running-joomla-in-dockerWEB_PORT=8080Ce script bash définit un ensemble de variables d'environnement pour configurer une application Joomla s'exécutant dans Docker. Les variables spécifient les versions des services (MySQL et PHP), les identifiants de base de données, les ports réseau et un identifiant de projet. Ces valeurs servent ensuite à construire et déployer les conteneurs Docker nécessaires.
Attention
Comme nous devons restaurer un site existant, veillez à utiliser la même version de PHP que celle utilisée par votre site.
Notre makefile
Il nous faut une nouvelle action appelée import :
-include .env
config: @UID=$$(id -u) GID=$$(id -g) docker compose config
down: stop -@UID=$$(id -u) GID=$$(id -g) docker compose down
log: -@UID=$$(id -u) GID=$$(id -g) docker compose logs
reset: down -@rm -rf db_data joomla_data
start: @clear @printf "\033[1;33m%s\033[0m\n\n" "To start your site, please jump to http://127.0.0.1:${WEB_PORT}" @printf "\033[1;33m%s\033[0m\n\n" "Go to http://127.0.0.1:${WEB_PORT}/administrator to open your backend."
@printf "\033[1;104m%s\033[0m\n\n" "Below a summary of your current installation:"
@printf "\033[1;34m%s\033[0m\n\n" "JOOMLA" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Project name" "${PROJECT_NAME}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Version" "${JOOMLA_VERSION}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n\n" " * Port" "${WEB_PORT}"
@printf "\033[1;34m%s\033[0m\n\n" "DATABASE" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Host" "joomla-db" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * User name" "${DB_USER}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Password" "${DB_PASSWORD}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Database name" "${DB_NAME}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Version" "${MYSQL_VERSION}" @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n\n" " * Port" "${MYSQL_PORT}"
stop: -@UID=$$(id -u) GID=$$(id -g) docker compose stop
up: -@mkdir -p db_data joomla_data @UID=$$(id -u) GID=$$(id -g) docker compose up --detach --build
# highlight-next-lineimport: reset # highlight-next-line -@mkdir -p db_data joomla_data # highlight-next-line
# highlight-next-line @clear # highlight-next-line @printf "\033[1;33m%s\033[0m\n" "Copying Akeeba Kickstart to the Docker Joomla container..." # highlight-next-line @cp en-GB.kickstart.ini ./joomla_data # highlight-next-line @cp kickstart.php ./joomla_data/kickstart.php # highlight-next-line
# highlight-next-line @printf "\033[1;33m%s\033[0m\n\n" "Copying your backup to the Docker Joomla container..." # highlight-next-line @cp backup.jpa ./joomla_data # highlight-next-line
# highlight-next-line @UID=$$(id -u) GID=$$(id -g) docker compose up --detach # highlight-next-line
# highlight-next-line @printf "\n\n\033[1;33m%s\033[0m\n\n" "Please now jump to http://127.0.0.1:${WEB_PORT}/kickstart.php to finalize your site restoration." # highlight-next-line
# highlight-next-line @printf "\033[1;104m%s\033[0m\n\n" "Below a summary of your current installation:" # highlight-next-line
# highlight-next-line @printf "\033[1;34m%s\033[0m\n\n" "JOOMLA" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n\n" " * Port" "${WEB_PORT}" # highlight-next-line
# highlight-next-line @printf "\033[1;34m%s\033[0m\n\n" "DATABASE" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Host" "joomla-db" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * User name" "${DB_USER}" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Password" "${DB_PASSWORD}" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Database name" "${DB_NAME}" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n" " * Version" "${MYSQL_VERSION}" # highlight-next-line @printf "\033[1;34m%-30s\033[0m\033[1;104m%s\033[0m\n\n" " * Port" "${MYSQL_PORT}"Ce Makefile orchestre une installation Docker pour Joomla avec une base de données MySQL. Il fournit des commandes pour démarrer, arrêter et réinitialiser l'environnement, afficher la configuration, et restaurer un site à partir d'une sauvegarde Akeeba Kickstart.
Attention
Si vous ne savez pas si vous avez déjà GNU make, lancez simplement which make dans la console. Si vous voyez make not found, lancez sudo apt-get update && sudo apt-get install make pour procéder à l'installation.
Il nous faut aussi un fichier appelé Dockerfile
Dans les toutes premières lignes du fichier compose.yaml, nous avons ce passage :
name: ${PROJECT_NAME:-your-project-name}
services: joomla: # highlight-next-line build: # highlight-next-line context: . # highlight-next-line args: # highlight-next-line - PHP_VERSION=${PHP_VERSION:-8.3-apache}Ce fichier Docker Compose définit un service Joomla qui se construit à partir du répertoire courant avec des variables d'environnement paramétrables. Les valeurs par défaut sont fournies pour le nom du projet et la version PHP si elles ne sont pas définies ailleurs.
On n'y voit pas d'instruction image: mais un build:. Cela signifie qu'il nous faut un fichier spécial appelé Dockerfile.
Créez un nouveau fichier appelé Dockerfile dans votre dossier avec ce contenu :
ARG PHP_VERSION=8.3-apache
FROM php:${PHP_VERSION:-latest}
RUN set -e -x ; \ docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysqlCe Dockerfile construit une image Docker basée sur PHP avec Apache, en utilisant la version spécifiée en argument (8.3-apache par défaut). Il installe ensuite les extensions MySQL nécessaires pour permettre à PHP de se connecter à des bases de données MySQL.
Ce fichier est assez simple pour l'instant : il indique qu'il nous faut une image Docker PHP, et qu'il faut aussi installer les drivers mysqli.
Il nous faut une sauvegarde, évidemment
Placez également une sauvegarde de votre site existant dans le même dossier. Par souci de standardisation, nommez ce fichier backup.jpa.
Pour être plus explicite : rendez-vous sur votre site Joomla existant et, avec Akeeba Backup, créez une sauvegarde (format de fichier : .jpa) puis téléchargez-la. Renommez le fichier de sauvegarde ainsi : backup.jpa.
Et enfin, il nous faut Akeeba Kickstart
Enfin, il nous faut aussi deux fichiers provenant d'Akeeba Kickstart.
En suivant le lien Akeeba Kickstart, nous pourrons télécharger un fichier .zip (appelé kickstart-core-xxx.zip où xxx est un numéro de version). Téléchargez-le et ouvrez l'archive : elle contient deux fichiers. Copiez-les dans votre dossier.
Les deux fichiers dont nous avons besoin s'appellent en-GB.kickstart.ini et kickstart.php.
Avant de démarrer
Nous sommes prêts. Juste avant de commencer, vérifiez que vous avez bien tous les fichiers nécessaires (lancez ls -alh) :
Passer l'étape de création des fichiers
Si vous avez sauté l'étape de création des fichiers plus haut en les téléchargeant depuis mon repo, vous aurez tous les fichiers listés ci-dessus.
Attention
Rappel : pour les utilisateurs Linux, nous avons besoin de GNU make pour pouvoir lancer des commandes comme make import ou make up. Si vous voyez make not found, lancez sudo apt-get update && sudo apt-get install make pour procéder à l'installation.
Lancer le processus d'importation
Voilà, vous avez copié pas mal de fichiers. Il est temps de restaurer votre site.
Pour les utilisateurs Linux, profitez simplement de GNU Make et lancez l'instruction make import.
Pour Windows (Powershell ou DOS), lancez ces commandes :
Dans les deux cas (Linux et Windows), vous obtiendrez une sortie de ce genre dans la console :
Une fois terminé, ouvrez votre navigateur et rendez-vous sur http://127.0.0.1:8080/kickstart.php pour démarrer la restauration de votre site avec l'assistant Akeeba Kickstart — les écrans montrés en haut de cet article.
Lorsque vous devez renseigner les informations de base de données, référez-vous à ce qui s'est affiché dans votre console.
Poursuivez la restauration comme d'habitude ; fermez la fenêtre quand Akeeba Kickstart le demande, puis cliquez sur le bouton Clean Up ; ensuite sur Visit your site's frontend et profitez.
Information
Si vous avez utilisé le site de démo fourni, le compte admin est joomla et son mot de passe est joomla@secured.
Conclusion
Comme nous venons de le voir, restaurer un site Joomla en local est devenu vraiment simple.
Il suffit de récupérer quelques fichiers de configuration, et seul celui nommé .env doit être mis à jour avec les versions de PHP et MySQL utilisées sur votre site de production.
Vous téléchargez la sauvegarde locale de votre site et, avec une seule commande (make import), votre site est restauré.
Peu importe la version de Joomla ou de MySQL que vous utilisez.
Simple comme bonjour, non ?
Cet article fait partie de la série Créer votre site Joomla avec Docker :
Chargement des commentaires…
