Aller au contenu principal

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.

· 7 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Journal des modifications

Dernière
Review and update YAML files to Joomla 6

Restaurer une sauvegarde Joomla avec Docker

⚡
TL;DR

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 :

Akeeba Kickstart

Restauration de la base de données

Le site est restauré

Pourquoi ça fonctionne​

  • Nous réutilisons le même trio compose.yaml/.env/makefile que 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.

>user@machine: ~/yourproject

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 $_.

>user@machine: ~/yourproject

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=joomla
DB_NAME=joomla
DB_PASSWORD=examplepass
DB_USER=joomla
MYSQL_PORT=3306
MYSQL_VERSION=8.4.2
// highlight-next-line
PHP_VERSION=8.3-apache
PROJECT_NAME=running-joomla-in-docker
WEB_PORT=8080

Ce 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-line
import: 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.

>user@machine: ~/yourproject
>user@machine: ~/yourproject

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_mysql

Ce 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) :

>user@machine: ~/yourproject

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 :

>Powershell

Dans les deux cas (Linux et Windows), vous obtiendrez une sortie de ce genre dans la console :

>user@machine: ~/yourproject

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

>user@machine: ~/yourproject

Peu importe la version de Joomla ou de MySQL que vous utilisez.

Simple comme bonjour, non ?


🦋 Rejoignez la conversation sur BlueskyUn compte Bluesky gratuit est nécessaire pour aimer, repartager ou commenter. Ce bloc interroge l'API publique de Bluesky directement depuis votre navigateur (sans cookie, sans connexion) — votre adresse IP parvient donc aux serveurs de Bluesky dès que cette section se charge.

Chargement des commentaires…

Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?