Skip to main content

🗃️ Archiver un site et des images

Voici comment j'ai fait pour faire un backup complet de mon site avec Docker. Ce site était un site Bookstack qui était donc composé de Bookstack, de dépendences PHP ainsi que d'une base de donnée mariadb.

Malheureusement je ne peux pas simplement migrer le site vers une nouvelle instance car la version de Bookstack est trop ancienne pour être compatible.

D'abord je fais un backup des fichiers important sur le serveur

# Je vais dans le dossier du site
cd /var/www/BookStack

# Je génère un script sql qui va me permettre de restaurer ma base de donnée "bookstack_db"
mysqldump -u root bookstack_db > bookstack-backup-db.sql

# Ensuite je crée une archive tar qui contient tous mes fichiers importants
tar -czvf bookstack-backup-files.tar.gz .env public/uploads storage/uploads

# Enfin je vais prendre note de la version de bookstack
cat version

Ensuite je récupère ces fichiers dans un nouveau dossier sur mon ordi :

mkdir bookstack-backup
cd bookstack-backup
rsync -rv debian@snowcode.ovh:/var/www/BookStack/bookstack-backup-* .

Ensuite je vais créer un docker-compose dans ce dossier avec le contenu suivant :

version: "2"
services:
  bookstack:
    image: ghcr.io/linuxserver/bookstack:version-v0.31.4 # Ici je met la version de BookStack
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - APP_URL=http://localhost:8080
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USER=bookstack
      - DB_PASS=secret
      - DB_DATABASE=bookstackapp
    volumes:
      - ./bookstack_files:/config
    ports:
      - 8080:80
    depends_on:
      - bookstack_db
  bookstack_db:
    image: lscr.io/linuxserver/mariadb:10.6.10
    container_name: bookstack_db
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=secret
      - TZ=Europe/Brussels
      - MYSQL_DATABASE=bookstackapp
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=secret
    volumes:
      - ./bookstack_db:/config

Maintenant on peut lancer ce serveur

sudo docker-compose up

Et on va placer les fichiers dans les différents volumes créés

sudo su # Il faut être root pour faire tout ce qui suis
mv bookstack-backup-files.tar.gz bookstack_files
mv bookstack-backup-db.sql bookstack_db
cd bookstack_files
tar xvzf bookstack-backup-files.tar.gz

Enfin on va entrer dans le conteneur de la base de donnée pour y importer notre script

sudo docker exec -it bookstack_db bash -c "mysql -u bookstack -p bookstackapp < /config/bookstack-backup-db.sql"
# Le mot de passe est "secret"

Maintenant on peut accéder au site à l'addresse http://localhost:8080

Archiver les images

Maintenant si on veut aller encore plus loin on peut également archiver les images de mariadb et bookstack.

Tout d'abord on va lister les images:

sudo docker images

Maintenant on va prendre les ID de celles de bookstack et mariadb et on va les exporter dans un fichier .tar

sudo docker image save aad0c49aebf3 -o bookstack.tar
sudo docker image save 39a4293c3071 -o mariadb.tar

Et voilà !

Maintenant si on souhaite réimporter ces images :

sudo docker image import bookstack.tar ghcr.io/linuxserver/bookstack:version-v0.31.4 
sudo docker image import mariadb.tar lscr.io/linuxserver/mariadb:10.6.10

Les images ont maintenant été réimportées !