Logo

Pro Minecraft backups: Wisp Schedules + offsite with restic

Pro Minecraft backups: Wisp Schedules + offsite with restic

Serious backup strategy for a VeryCloud Minecraft server: panel automation + encryption + offsite with restic. For servers that don't want to lose a season.

Introduction

An untested backup isn't a backup. A backup at the same place as the server is only half a backup. This guide gives you a realistic 3-2-1 strategy: 3 copies, 2 different media, 1 offsite, with encryption and automatic rotation.

Prerequisites

  • A Minecraft server at VeryCloud (Paper / Spigot / Fabric / Forge / Vanilla)
  • Wisp panel access
  • An external VPS or S3 / B2 storage for offsite
  • restic installed on the external VPS

Step 1: Local Wisp backup schedule

  1. Panel → SchedulesCreate Schedule:
    • Name: Daily backup 4 AM
    • Cron: 0 4 * * *
    • Only when online: yes
  2. Add Task: Create Backup, name daily-{date}

Keep 7 days deep.

Step 2: Weekly schedule with longer retention

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

Step 3: Why offsite is non-negotiable

All backups in Wisp = same infrastructure as the server. If infra goes down, you lose everything. restic is the go-to: open source, native dedup, AES-256, multi-backend.

Step 4: Install restic

apt update && apt install -y restic
restic version

Step 5: Initialize the repo

export RESTIC_PASSWORD="A_VERY_LONG_RANDOM_PASS"
export RESTIC_REPOSITORY="/backups/restic-mc"
# Or for S3:
# export RESTIC_REPOSITORY="s3:s3.amazonaws.com/my-bucket"

restic init

⚠️ Save this password elsewhere. Without it, backups are unrecoverable.

Step 6: SFTP pull + restic script

#!/bin/bash
set -e

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

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

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/"

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

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

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

if [ "$(date +%u)" = "7" ]; then
  restic check
fi

/root/.restic-pass chmod 600.

Step 7: Cron

0 5 * * * /usr/local/bin/mc-backup-offsite.sh >> /var/log/mc-backup.log 2>&1

Step 8: Test a restore

restic snapshots
restic restore latest --target /tmp/test-restore
ls -la /tmp/test-restore

If coherent, your chain works.

Step 9: Retention strategy

LevelLocationFrequencyRetention
1Wisp localDaily 4 AM7 days
2Wisp localWeekly Sun 5 AM4 weeks
3External VPS + resticDaily 5 AM7d + 4w + 6m
4 (opt)S3/B2 via resticWeekly12 months

Level 4 = extreme disaster recovery. A few €/month.

Troubleshooting

SFTP asks for password — generate SSH key, upload to Wisp Settings → SSH Keys. restic "wrong password" — invisible chars in file. Check cat -A /root/.restic-pass. External disk fullrestic forget --prune actually frees space. Minecraft world corrupted in pull — send save-off via RCON first, or only download Wisp's native archives.

Useful commands

restic snapshots
restic stats
restic stats --mode raw-data
restic restore <snapshot-id> --target /tmp/restore
restic check --read-data

Conclusion

Pro Minecraft backups = Wisp for daily + restic offsite for resilience. ~€3/month for B2 100 GB vs losing a whole season — no contest.

Going further: Slack/Discord alerts on failure, restic + healthchecks.io, multi-server dedup.

Resources

Join our Discord community server

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

900+Members