Document backup feature in scripts/backup/README.md
- Quick start guide for backup/restore - Configuration options (local, SMB, S3) - Troubleshooting common issues - API endpoints reference - Clarify empty list on first deployment is normal
This commit is contained in:
79
scripts/backup/README.md
Normal file
79
scripts/backup/README.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# ShopDB Backup & Restore
|
||||||
|
|
||||||
|
The backup system provides automated database and instance backups with restore capability.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Trigger a backup via docker-compose
|
||||||
|
docker compose -f docker-compose.backup.yml up backup
|
||||||
|
|
||||||
|
# Or via API (requires admin JWT token)
|
||||||
|
curl -X POST http://localhost:5001/api/shopdbbackups \
|
||||||
|
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
By default, backups are stored in `/backups` volume (local to Docker host).
|
||||||
|
|
||||||
|
For production, configure storage in Settings > Backups web UI:
|
||||||
|
- **Local**: Default, no configuration needed
|
||||||
|
- **SMB**: Network share (requires hostname, share, credentials)
|
||||||
|
- **AWS S3**: Cloud storage (requires region, bucket, credentials)
|
||||||
|
|
||||||
|
## Retention Policy
|
||||||
|
|
||||||
|
- 5 daily backups
|
||||||
|
- 4 weekly backups
|
||||||
|
- 6 monthly backups
|
||||||
|
|
||||||
|
## Backup Contents
|
||||||
|
|
||||||
|
Each backup set includes:
|
||||||
|
- `db.sql.gz` - Compressed MySQL dump
|
||||||
|
- `instance/` - Uploaded files, branding, floor plans, maps
|
||||||
|
- `manifest.json` - Schema revisions for compatibility checking
|
||||||
|
|
||||||
|
## Restore
|
||||||
|
|
||||||
|
1. Go to **Settings > Backups** in web UI
|
||||||
|
2. Select a backup set
|
||||||
|
3. Click **Restore**
|
||||||
|
4. System validates schema compatibility and restores database + files
|
||||||
|
|
||||||
|
## First Deployment
|
||||||
|
|
||||||
|
On fresh install, `/api/shopdbbackups` returns empty list - this is normal.
|
||||||
|
No backups exist until first backup runs.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**"No backups found"**
|
||||||
|
- Check `/backups` volume is mounted
|
||||||
|
- Verify backup container ran: `docker logs shopdb-backup-1`
|
||||||
|
|
||||||
|
**"500 error on backup endpoint"**
|
||||||
|
- Must be logged in as admin
|
||||||
|
- Check Flask logs for details
|
||||||
|
|
||||||
|
**"Restore failed: incompatible schema"**
|
||||||
|
- Backup is from newer ShopDB version
|
||||||
|
- Update code first, then restore
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
All require `admin` role:
|
||||||
|
|
||||||
|
- `GET /api/shopdbbackups` - List backups
|
||||||
|
- `POST /api/shopdbbackups` - Trigger backup
|
||||||
|
- `POST /api/shopdbbackups/<id>/restore` - Restore backup
|
||||||
|
- `GET /api/shopdbbackups/status` - Current status
|
||||||
|
- `GET /api/shopdbbackups/history` - Backup history
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
- Backups contain sensitive data (DB dump, uploads)
|
||||||
|
- Secure `/backups` volume with appropriate permissions
|
||||||
|
- Use encrypted storage for offsite backups
|
||||||
|
- Only admin role can access backup endpoints
|
||||||
Reference in New Issue
Block a user