# 🗃️ 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

```bash
# 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 :

```bash
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 :

```yml
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

```bash
sudo docker-compose up
```

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

```bash
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

```bash
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:

```bash
sudo docker images
```

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

```bash
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 :

```bash
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 !