Connecteur Fichiers / dossiers 📁

Sauvegarde un répertoire (ou un fichier) du système de fichiers sous forme d'archive tar, et le restaure par dé-tarage. Pur Go, image distroless — le connecteur le plus léger.

  • Image : ilygo/bridge-files:1 (distroless, ~15 MB)
  • Sous-commande : ilygo-bridge files
  • Implémentation : archive/tar Go natif (aucun binaire externe)

Variables d'environnement

En plus des variables communes :

Variable Obligatoire Description
FILES_PATH oui Chemin du fichier ou dossier à sauvegarder, tel que monté dans le conteneur

Surchargeable par commande via payload.path.

Prérequis

  • Le dossier source doit être monté en lecture dans le conteneur bridge (volume Docker ou bind mount).
  • Pour la restauration : montez-le aussi en écriture (ou un dossier cible distinct).

Déploiement (docker-compose)

services:
  ilygo-bridge:
    image: ilygo/bridge-files:1
    restart: unless-stopped
    networks: [default]            # juste l'accès sortant HTTPS
    environment:
      ILYGO_ENDPOINT: https://backup.example/api/v1
      ILYGO_API_KEY: ik_xxx
      ILYGO_PASSPHRASE: ${ILYGO_PASSPHRASE}
      ILYGO_RESTORE_SECRET: 3f87d2022d95...
      ILYGO_LABEL: fileserver-docs
      FILES_PATH: /data
    volumes:
      - /srv/documents:/data:ro    # bind mount en lecture seule (backup)
      # Pour autoriser la restauration in_place, montez en lecture-écriture :
      # - /srv/documents:/data

Astuce : pour un backup strictement lecture seule (sécurité maximale), gardez :ro. Pour restaurer, déployez temporairement un second bridge avec le montage en écriture, ou retirez :ro.

Mécanisme de backup

  • Parcourt récursivement FILES_PATH (filepath.Walk).
  • Crée une archive tar préservant l'arborescence, les modes (permissions) et les dates de modification.
  • Les fichiers réguliers sont inclus avec leur contenu ; les dossiers comme entrées de structure.
  • L'archive est compressée (zstd) puis chiffrée.

Mécanisme de restauration

Avec un RAT, le bridge déchiffre/décompresse l'archive tar et la dé-tare :

side_by_side (recommandé) : extrait dans <FILES_PATH>.restored (ex : /data.restored). Vous comparez avant de promouvoir.

in_place (exige confirm_destructive) : extrait dans FILES_PATH, écrasant les fichiers de même chemin. (Ne supprime pas les fichiers ajoutés depuis le backup.)

Les permissions et arborescence sont restaurées à l'identique.

Réseau & sécurité

  • Le bridge n'a besoin que du réseau default (sortie HTTPS) — il ne parle à aucune base.
  • Image distroless, non-root.
  • Montez la source en :ro pour le backup.
  • En prod : read_only: true (sauf le volume cible de restauration), cap_drop: [ALL].

Dépannage

Symptôme Cause Solution
stat /data: no such file or directory volume non monté Vérifiez le bloc volumes:
permission denied au backup droits de lecture insuffisants Ajustez les droits ou l'UID du conteneur
restore : read-only file system volume monté :ro Montez en écriture pour restaurer
archive volumineuse dossier très gros (tar en mémoire en v1) Voir limites

Limites & roadmap

  • v1 : archive tar en mémoire — adapté jusqu'à quelques Go. Pas de déduplication ni d'incrémental.
  • Roadmap : tar streamé (To-scale), backup incrémental par mtime/hash, exclusions (.ilygoignore).