Archivage-ZIM/README.md
2025-11-06 19:10:00 +01:00

4.9 KiB
Raw Blame History

License: CC BY-NC-SA 4.0

Archivage web avec Kiwix et Zimit

Voici la méthode que j'utilise afin d'archiver une page web ou bien un site internet complet pour une lecture hors ligne.

J'utilise un serveur Kiwix afin de lire mes archives ZIM, l'outil Zimit pour créer les archives et celle-ci sont stockées sur un serveur externe au service.

1 Configuration du serveur de stockage

  • Créer un utilisateur + mot de passe
  • Créer un dossier de partage smb/cifs
  • Configurer les droits d'accès

2 Configuration du serveur Kiwix

  • Installer le paquet cifs-utils
  • Monter le partage à l'emplacement voulu ici : /srv/kiwix

▶️ Exemple fstab :

//serveur-de-stockage/kiwix /srv/kiwix cifs credentials=/etc/.smbcredentials-kiwix,uid=0000,gid=000,file_mode=0770,dir_mode=0770,iocharset=utf8 0 0

⚠️ J'utilise pour l'authentification un fichier de conf credentials, afin de ne pas laisser en claire le user/pass, car le fichier fstab est par défaut autorisé en lecture par tous, ne pas oublier d'adapter également uid et gid.

▶️ Exemple credentials :

username=user
password=MotDePasse

3 Premier fichier zim

  • Dans notre répertoire /srv/kiwix/zim il est important d'y déposer une première archive ZIM avant le déploiement de Kiwix,
    voir ce dépot publique https://library.kiwix.org

4 Déploiement du serveur Kiwix

  • Ici le docker-compose.
  • Démarrer le conteneur avec docker compose up -d

5 Utilisation manuel de Zimit

  • Cette commande pour exécuter un archivage web en fichier ZIM :
docker run --rm -it -v /srv/kiwix/zim:/output ghcr.io/openzim/zimit zimit  --seeds="https://lien-du-site"   --name="nom-de-l'archive"   --title="titre-de-l'archive"   --output=/output   --pageLimit=20   --waitUntil=networkidle0   --workers=4   --scopeExcludeRx="(\?q=|signup-landing\?|\?cid=)"

Plus d'infos sur les variables dans le dépot du projet https://github.com/openzim/zimit

6 Utilisation de mon interface zimit-webapp (direct mode)

  • Mettre en place cette architecture de fichiers
zimit-webapp/
├── app.py                  # Serveur Flask
├── templates/
│   └── index.html          # Interface web
├── data/
|   ├── tasks.json          # Fichier de tâches (Généré automatiquement)
│   └── zimit_archives.log  # Fichier de logs (Généré automatiquement)
└── requirements.txt        # Dépendances Python

# Si arborescence initialisée depuis téléchargement du repo, pensez à supprimer Dockerfile et docker-compose.yml qui sont inutiles pour cet usage.
  • Se placer dans le repertoire zimit-webapp
  • Installer Python 3.13 apt install python3.13
  • Créer un environement virtuel Python python3 -m venv menv
  • Activer cet environement source menv/bin/activate
  • Installer les dépendances pip install -r requirements.txt
  • Démarrer le serveur python app.py

7 Utilisation de mon interface zimit-webapp:1.1.0 (container mode)

  • Ici le docker-compose.
  • Modifier l'emplacement des archives *.zim ainsi que le port si besoin.
  • Démarrer le conteneur avec docker compose up -d

📝 --- Notes ---

  • Mon image a été compilée sur Debian 13 en architecture amd64, pour recompiler faire docker build -t nom-de-l'image:tag.
  • Possibilité de modifier l'image d'origine du Dockerfile par celle de mon registry si celle de l'éditeur n'est pas disponible git.selfitdeploy.com/willy/python-dev:3.13-slim
  • Si l'image ghcr.io/openzim/zimit du docker-compose.yml n'est pas disponible, possiblilité de remplacer par git.selfitdeploy.com/willy/zimit-dev:3.0.5 mais dans ce cas 2 choix :
    • Faire manuellement en CLI docker pull git.selfitdeploy.com/willy/zimit-dev:3.0.5 && docker tag git.selfitdeploy.com/willy/zimit-dev:3.0.5 ghcr.io/openzim/zimit:latest, cela permet de ne rien modifier dans les différents fichiers et garde l'accès vers le registry d'origine.
    • Modifier le docker-compose.yml et app.py pour pointer vers mon registry.

8 Aperçu de l'interface

  • Interface accessible en http://ip-du-serveur:8080

Interface web

🚧 Objectifs

  • Création d'un container pour simplifier sa mise en place et pour un usage en production.
  • Amélioration esthétique de l'interface web
  • Amélioration de la gestion des logs
  • Gestion des droits

📚 Ressources