Backups Minecraft pro : Wisp Schedules + offsite avec restic

Backups Minecraft pro : Wisp Schedules + offsite avec restic

Stratégie de sauvegarde sérieuse pour un serveur Minecraft VeryCloud : automatisation panel + chiffrement + offsite avec restic. Pour les serveurs qui ne veulent pas perdre une saison entière.

Introduction

Un backup non testé n'est pas un backup. Un backup au même endroit que le serveur n'est qu'un demi-backup. Ce guide te donne une stratégie 3-2-1 réaliste pour Minecraft : 3 copies, 2 supports différents, 1 hors site, avec chiffrement et rotation automatique.

Prérequis

  • Un serveur Minecraft chez VeryCloud (Paper / Spigot / Fabric / Forge / Vanilla)
  • Accès panel Wisp
  • Un VPS externe ou stockage S3 / B2 pour l'offsite
  • restic installé sur le VPS externe

Étape 1 : Schedule de backup Wisp local

Premier niveau : un snapshot quotidien dans Wisp.

  1. Panel → ton serveur → Schedules
  2. Create Schedule :
    • Name : Daily backup 4 AM
    • Cron : 0 4 * * *
    • Only when online : oui
  3. Add Task :
    • Action : Create Backup
    • Backup name : daily-{date}

Garde 7 jours de profondeur (Wisp purge les vieux selon ton plan).

Étape 2 : Schedule weekly avec rétention plus longue

Crée un second schedule hebdomadaire pour garder 4 backups sur un mois sans saturer le quota.

Name : Weekly backup Sunday 5 AM
Cron : 0 5 * * 0
Task : Create Backup

Étape 3 : Le offsite — pourquoi c'est non-négociable

Tous tes backups sont dans Wisp = même infrastructure que le serveur. Si l'infra crashe (data center down, account compromise, suppression accidentelle), tu perds tout.

Solution : tirer une copie vers un autre lieu. restic est l'outil de référence : open source, dedup natif, chiffrement AES-256, multi-backend (S3, B2, SFTP, local, etc.).

Étape 4 : Installer restic sur ton VPS externe

# Debian/Ubuntu
apt update && apt install -y restic

# Vérifier la version
restic version

Étape 5 : Préparer le dépôt restic

# Variable d'environnement pour le mot de passe
export RESTIC_PASSWORD="UN_MDP_TRES_LONG_ALEATOIRE"
export RESTIC_REPOSITORY="/backups/restic-mc"
# Ou pour S3 :
# export RESTIC_REPOSITORY="s3:s3.amazonaws.com/mon-bucket"
# export AWS_ACCESS_KEY_ID=...
# export AWS_SECRET_ACCESS_KEY=...

# Initialiser le repo
restic init

⚠️ Note bien ce mot de passe ailleurs (gestionnaire de mots de passe). Sans lui, les backups sont irrécupérables. restic chiffre tout avec.

Étape 6 : Script de pull SFTP + restic

Sur ton VPS externe :

#!/bin/bash
# /usr/local/bin/mc-backup-offsite.sh
set -e

WISP_HOST="sftp.verycloud.fr"
WISP_PORT="2022"
WISP_USER="ton.user.wisp"
WISP_KEY="/root/.ssh/wisp_id_ed25519"

WORKDIR="/tmp/mc-backup-$(date +%s)"
mkdir -p "$WORKDIR"

# Pull via sftp (sshfs serait plus elegant mais bof la dependance)
sftp -i $WISP_KEY -P $WISP_PORT -r "$WISP_USER@$WISP_HOST:/world*" "$WORKDIR/"
sftp -i $WISP_KEY -P $WISP_PORT -r "$WISP_USER@$WISP_HOST:/plugins" "$WORKDIR/"
sftp -i $WISP_KEY -P $WISP_PORT "$WISP_USER@$WISP_HOST:/server.properties" "$WORKDIR/"
sftp -i $WISP_KEY -P $WISP_PORT "$WISP_USER@$WISP_HOST:/ops.json" "$WORKDIR/"
sftp -i $WISP_KEY -P $WISP_PORT "$WISP_USER@$WISP_HOST:/whitelist.json" "$WORKDIR/"

# Snapshot dans restic
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export RESTIC_REPOSITORY="/backups/restic-mc"

restic backup "$WORKDIR" --tag minecraft --tag $(date +%F)

# Cleanup
rm -rf "$WORKDIR"

# Retention : garder 7 quotidiens, 4 weekly, 6 monthly
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

# Verification d'integrite (1x par semaine c'est suffisant)
if [ "$(date +%u)" = "7" ]; then
  restic check
fi

Mets RESTIC_PASSWORD dans /root/.restic-pass (chmod 600) pour ne pas l'exposer en env.

Étape 7 : Cron sur le VPS externe

crontab -e
# Tous les jours a 5h, apres le backup Wisp de 4h
0 5 * * * /usr/local/bin/mc-backup-offsite.sh >> /var/log/mc-backup.log 2>&1

Étape 8 : Tester une restauration

Une fois par mois :

# Lister les snapshots
restic snapshots

# Restaurer le dernier dans /tmp/test-restore
restic restore latest --target /tmp/test-restore

# Verifier
ls -la /tmp/test-restore

Si le contenu est cohérent (world/, plugins/, etc.), ta chaîne marche.

Étape 9 : Stratégie de rétention détaillée

Niveau Lieu Fréquence Rétention
1 Wisp local Quotidien 4h 7 jours
2 Wisp local Hebdo dimanche 5h 4 semaines
3 VPS externe + restic Quotidien 5h 7 jours + 4 weekly + 6 monthly
4 (optionnel) S3 / B2 via restic Hebdomadaire 12 mois

Le niveau 4 est utile si tu veux un disaster recovery extrême (incendie du VPS externe). Coût : quelques euros/mois.

Dépannage

SFTP qui demande un mot de passe interactif

  • Génère une clé SSH (ssh-keygen -t ed25519) et upload la publique dans Wisp → Settings → SSH Keys
  • Utilise -i /root/.ssh/wisp_id_ed25519 dans sftp

restic dit "wrong password"

  • C'est probablement vrai : un caractère spécial mal échappé, un espace en début/fin
  • Vérifie cat -A /root/.restic-pass pour voir les caractères invisibles

Disque externe plein

  • restic.forget --prune libère vraiment l'espace seulement après prune
  • Augmente la rétention ou monte de stockage

Le world Minecraft est en cours d'écriture pendant le pull → corruption

  • Avant le pull, envoie une commande save-off via RCON pour stopper les écritures
  • Ou utilise plutôt les backups Wisp natifs (qui font le quiesce eux-mêmes), et ne télécharge que ces archives

Commandes utiles

# Lister les snapshots restic
restic snapshots

# Stats du depot
restic stats

# Voir la taille reelle apres dedup
restic stats --mode raw-data

# Restaurer un snapshot specifique
restic restore <snapshot-id> --target /tmp/restore

# Verifier l'integrite du depot (lent)
restic check --read-data

Conclusion

Backups Minecraft pro = Wisp pour le quotidien + restic offsite pour la résilience. restic gère le chiffrement, la dedup et la rétention automatiquement. Le coût marginal d'un VPS externe ou d'un bucket B2 (~3€/mois pour 100 Go) est ridicule comparé au prix de perdre une saison entière.

Pour aller plus loin : alerting Slack/Discord si un backup échoue, restic + healthchecks.io, deduplication entre serveurs multiples.

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members