Backup & Recovery
Backup Overview
| Backup Type | Frequency | Location | Managed By |
|---|---|---|---|
| SMAPI Auto-Backup | Once per day | /data/game/save-backups | SMAPI |
| Docker Volumes | Persistent | Host filesystem | Docker |
| Manual Backups | On-demand | Your choice | You |
SMAPI Automatic Backups
SMAPI's built-in Save Backup mod compresses all your saves into a single dated zip once per day.
Viewing Backups
docker compose exec server ls -al /data/game/save-backupsYou'll see dated zip files named {date} - SMAPI {version} with Stardew Valley {version}.zip (the version numbers reflect your installed build):
2026-03-26 - SMAPI 4.5.1 with Stardew Valley 1.6.15.zip
2026-03-21 - SMAPI 4.5.1 with Stardew Valley 1.6.15.zip
...Each archive contains every save folder (e.g. Junimo_430843225/) at its root.
Restoring from SMAPI Backup
1. Move current save aside:
docker compose exec server bash -c "cd /config/xdg/config/StardewValley && mv Saves Saves_old && mkdir Saves"2. List available backups:
docker compose exec server ls -al /data/game/save-backups3. Restore the desired backup:
docker compose exec server unzip "/data/game/save-backups/BACKUP_FILENAME.zip" -d /config/xdg/config/StardewValley/Saves/4. Verify and restart:
docker compose exec server ls -al /config/xdg/config/StardewValley/Saves
docker compose restartDocker Volume Persistence
Your data lives in Docker volumes and bind mounts that persist across container restarts and updates:
| Data | Storage | Contents |
|---|---|---|
| Saves | saves volume | Save files |
| Game data | game-data volume | Game files |
| Steam session | steam-session volume | Steam tokens |
| Settings | .local-container/settings/ bind mount | Server configuration (server-settings.json) |
Volume Names
Docker Compose prefixes volume names with your project directory. If your directory is junimoserver, the saves volume is junimoserver_saves. Run docker volume ls to see actual names.
Inspecting Volumes
# List volumes
docker volume ls
# Inspect a volume (replace prefix with your project directory name)
docker volume inspect junimoserver_savesManual Backups
For maximum safety, create periodic manual backups.
Backup Saves Volume
Replace junimoserver below with your project directory name (see volume names note above).
Linux/macOS:
docker run --rm -v junimoserver_saves:/saves -v $(pwd):/backup ubuntu tar czf /backup/saves-backup-$(date +%Y%m%d).tar.gz /savesWindows PowerShell:
docker run --rm -v junimoserver_saves:/saves -v ${PWD}:/backup ubuntu tar czf /backup/saves-backup-$(Get-Date -Format "yyyyMMdd").tar.gz /savesBackup All Data
Create a comprehensive backup:
# Stop server first
docker compose down
# Backup saves volume (replace junimoserver with your directory name)
docker run --rm -v junimoserver_saves:/data -v $(pwd):/backup ubuntu tar czf /backup/saves-$(date +%Y%m%d).tar.gz /data
# Backup settings (bind mount, just copy the directory)
cp -r .local-container/settings settings-backup-$(date +%Y%m%d)
# Restart server
docker compose up -dRestore from Manual Backup
Replace junimoserver below with your project directory name.
# Stop server
docker compose down
# Remove old volume
docker volume rm junimoserver_saves
# Recreate volume
docker volume create junimoserver_saves
# Restore from backup
docker run --rm -v junimoserver_saves:/data -v $(pwd):/backup ubuntu bash -c "cd /data && tar xzf /backup/saves-YYYYMMDD.tar.gz --strip-components=1"
# Restart
docker compose up -dBackup Best Practices
Frequency
| Situation | Recommended Frequency |
|---|---|
| Active development | Before any changes |
| Regular play | Daily |
| Stable server | Weekly |
| Before upgrades | Always |
Storage
- Keep backups off the server (cloud storage, different machine)
- Maintain multiple generations (daily, weekly, monthly)
- Test restore procedures periodically
- Document your backup locations
Automation
Consider automating backups with cron (Linux) or Task Scheduler (Windows):
# Example cron entry (daily at 3 AM)
0 3 * * * /path/to/backup-script.shImporting Existing Saves
To bring an existing save to your server:
1. Stop the server:
docker compose down2. Copy save folder into volume (replace junimoserver with your directory name):
docker run --rm -v junimoserver_saves:/saves -v $(pwd):/backup ubuntu cp -r /backup/YourFarm_123456789 /saves/3. Start server:
docker compose up -d4. Verify in game:
Connect via VNC and check that your save appears.
Recovery Scenarios
Corrupted Save
- Check SMAPI backups for recent clean save
- Restore from backup as described above
- If all backups corrupted, check manual backups
Accidental Deletion
- Saves volume persists unless explicitly deleted
- Restore from SMAPI or manual backup
- Consider more frequent backups
Server Crash
- Docker auto-restarts containers
- Last save should be intact
- Check logs for cause:
docker compose logs
Failed Upgrade
- Don't panic. Volumes persist.
- Rollback server version if needed
- Restore saves from pre-upgrade backup