Connecteur Redis 🔴

Sauvegarde une instance Redis en récupérant un snapshot RDB consistant via redis-cli --rdb. Restaure le RDB sur disque pour rechargement par l'instance Redis.

  • Image : ilygo/bridge-redis:7
  • Sous-commande : ilygo-bridge redis
  • Outils embarqués : redis-cli

Variables d'environnement

En plus des variables communes :

Variable Obligatoire Description
REDIS_URL oui URL de connexion, ex : redis://[:password@]HOST:6379/0
REDIS_RESTORE_PATH non Chemin où écrire le RDB lors d'une restauration (défaut /data/dump.rdb)

Surchargeable par commande via payload.url.

Prérequis

  • Redis doit autoriser la génération d'un snapshot (redis-cli --rdb déclenche un SAVE/BGSAVE côté serveur).
  • Si l'instance utilise un mot de passe : redis://:motdepasse@host:6379/0. Pour Redis 6+ avec ACL : redis://user:password@host:6379/0.
  • L'utilisateur doit avoir le droit d'exécuter SAVE/BGSAVE.

Déploiement (docker-compose)

services:
  app-redis:
    image: redis:7-alpine
    command: redis-server --save 900 1
    volumes: [redis_data:/data]
    networks: [app-net]

  ilygo-bridge:
    image: ilygo/bridge-redis:7
    restart: unless-stopped
    networks: [app-net, default]
    environment:
      ILYGO_ENDPOINT: https://backup.example/api/v1
      ILYGO_API_KEY: ik_xxx
      ILYGO_PASSPHRASE: ${ILYGO_PASSPHRASE}
      ILYGO_RESTORE_SECRET: 3f87d2022d95...
      ILYGO_LABEL: prod-redis
      REDIS_URL: redis://app-redis:6379/0
      # Pour restaurer dans le volume partagé :
      REDIS_RESTORE_PATH: /data/dump.rdb
    volumes:
      - redis_data:/data            # partagé avec app-redis pour la restauration in_place

networks:
  app-net:
    internal: true
volumes:
  redis_data:

Mécanisme de backup

redis-cli -u "$REDIS_URL" --rdb /tmp/snapshot.rdb
  • --rdb demande à Redis un snapshot RDB consistant et le télécharge.
  • Le fichier RDB est lu puis poussé en chunks chiffrés.
  • Un RDB capture tout le dataset à un instant donné (clés, TTL, types).

Mécanisme de restauration

Avec un RAT, le bridge déchiffre/décompresse le RDB et l'écrit sur disque :

side_by_side (recommandé) : écrit dans <REDIS_RESTORE_PATH>.restored (ex : /data/dump.rdb.restored). Vous démarrez une instance Redis temporaire pointant sur ce fichier pour inspecter.

in_place (exige confirm_destructive) : écrit dans REDIS_RESTORE_PATH (ex : /data/dump.rdb).

⚠️ Redis charge son RDB au démarrage. Après écriture du fichier, vous devez redémarrer l'instance Redis cible pour qu'elle recharge le dataset : bash docker compose restart app-redis (Le connecteur écrit le fichier ; le redémarrage reste une action opérateur volontaire, pour éviter toute coupure non maîtrisée.)

Réseau & sécurité

  • Aucun port exposé par le bridge.
  • Pour la restauration in_place, le bridge et Redis partagent le volume /data.
  • En prod : limitez les droits du volume, cap_drop: [ALL].

Dépannage

Symptôme Cause Solution
NOAUTH Authentication required mot de passe absent dans l'URL redis://:password@host:6379/0
--rdb timeout gros dataset + SAVE bloquant Préférez une fenêtre creuse ; Redis ≥ utilise BGSAVE
RDB restauré non chargé Redis pas redémarré docker compose restart app-redis
Permission denied à l'écriture volume non partagé / droits Montez le volume /data sur le bridge

Limites & roadmap

  • v1 : snapshot RDB complet (point-in-time). Le redémarrage de l'instance cible est manuel.
  • Roadmap : option AOF (append-only file) + reload à chaud via DEBUG RELOAD / réplication.