Document backup and restore; refresh schema and structure sections
This commit is contained in:
1 parent
03873b37e1
commit
6dcd163edb
1 file changed
+43
-6
@@ -17,6 +17,7 @@ A Python web application for organizing and managing your LEGO instruction manua
|
|||||||
- 📊 **Statistics Dashboard**: View collection statistics and insights
|
- 📊 **Statistics Dashboard**: View collection statistics and insights
|
||||||
- 🖼️ **Image Gallery**: View instruction images in an organized gallery
|
- 🖼️ **Image Gallery**: View instruction images in an organized gallery
|
||||||
- 📄 **PDF Support**: View and download PDF instructions directly
|
- 📄 **PDF Support**: View and download PDF instructions directly
|
||||||
|
- 💾 **Backup & Restore**: One-click archive of the database plus every uploaded file, ready to restore anywhere
|
||||||
|
|
||||||
## 🚀 Quick Start
|
## 🚀 Quick Start
|
||||||
|
|
||||||
@@ -90,6 +91,10 @@ BRICKSET_PASSWORD=your-password
|
|||||||
# Upload Settings
|
# Upload Settings
|
||||||
MAX_CONTENT_LENGTH=52428800 # 50MB
|
MAX_CONTENT_LENGTH=52428800 # 50MB
|
||||||
SETS_PER_PAGE=20
|
SETS_PER_PAGE=20
|
||||||
|
|
||||||
|
# Backups
|
||||||
|
BACKUP_FOLDER=backups
|
||||||
|
BACKUP_KEEP=5
|
||||||
```
|
```
|
||||||
|
|
||||||
### Brickset API Setup
|
### Brickset API Setup
|
||||||
@@ -128,9 +133,12 @@ lego-instructions-manager/
|
|||||||
├── app/
|
├── app/
|
||||||
│ ├── models/ # Database models
|
│ ├── models/ # Database models
|
||||||
│ ├── routes/ # Application routes/views
|
│ ├── routes/ # Application routes/views
|
||||||
│ ├── services/ # Business logic (API, file handling)
|
│ ├── services/ # Business logic (API, file handling, backups)
|
||||||
│ ├── templates/ # HTML templates
|
│ ├── templates/ # HTML templates
|
||||||
│ └── static/ # CSS, JS, uploaded files
|
│ ├── static/ # CSS, JS, uploaded files
|
||||||
|
│ └── cli.py # flask backup commands
|
||||||
|
├── backups/ # Backup archives (git-ignored)
|
||||||
|
├── docs/ # Documentation
|
||||||
├── migrations/ # Database migrations
|
├── migrations/ # Database migrations
|
||||||
├── tests/ # Unit tests
|
├── tests/ # Unit tests
|
||||||
├── requirements.txt # Python dependencies
|
├── requirements.txt # Python dependencies
|
||||||
@@ -167,16 +175,21 @@ flask --app run.py shell
|
|||||||
## 📊 Database Schema
|
## 📊 Database Schema
|
||||||
|
|
||||||
### User
|
### User
|
||||||
- id, username, email, password_hash, created_at
|
- id, username, email, password_hash, is_admin, created_at
|
||||||
|
|
||||||
### Set
|
### Set
|
||||||
- id, set_number, set_name, theme, year_released, piece_count
|
- id, set_number, set_name, theme, year_released, piece_count
|
||||||
- brickset_id, image_url, user_id, created_at, updated_at
|
- is_moc, moc_designer, moc_description
|
||||||
|
- brickset_id, image_url, cover_image, user_id, created_at, updated_at
|
||||||
|
|
||||||
### Instruction
|
### Instruction
|
||||||
- id, set_id, file_type, file_path, file_name, file_size
|
- id, set_id, file_type, file_path, file_name, file_size, thumbnail_path
|
||||||
- page_number, user_id, uploaded_at
|
- page_number, user_id, uploaded_at
|
||||||
|
|
||||||
|
### ExtraFile
|
||||||
|
- id, set_id, file_name, original_filename, file_path, file_type, file_size
|
||||||
|
- description, category, uploaded_at, uploaded_by
|
||||||
|
|
||||||
## 🔒 Security Notes
|
## 🔒 Security Notes
|
||||||
|
|
||||||
- Passwords are hashed using bcrypt
|
- Passwords are hashed using bcrypt
|
||||||
@@ -206,7 +219,29 @@ gunicorn -w 4 -b 0.0.0.0:8000 "run:app"
|
|||||||
|
|
||||||
4. **Set up nginx** as a reverse proxy
|
4. **Set up nginx** as a reverse proxy
|
||||||
5. **Enable HTTPS** with Let's Encrypt
|
5. **Enable HTTPS** with Let's Encrypt
|
||||||
6. **Regular backups** of database and uploads folder
|
6. **Regular backups** — see below
|
||||||
|
|
||||||
|
## 💾 Backup & Restore
|
||||||
|
|
||||||
|
Full in-place backup of the database plus every uploaded PDF, image, cover,
|
||||||
|
thumbnail and extra file — into a single verifiable `.zip`.
|
||||||
|
|
||||||
|
From the admin UI: **Admin → Backup & Restore** (`/admin/backup/`) — runs in the
|
||||||
|
background with a progress bar, shows what's missing or orphaned, and lets you
|
||||||
|
download, verify, restore or delete archives.
|
||||||
|
|
||||||
|
From the command line:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flask backup create --label pre-docker
|
||||||
|
flask backup list
|
||||||
|
flask backup verify lim-backup-....zip
|
||||||
|
flask backup restore lim-backup-....zip --mode fresh
|
||||||
|
```
|
||||||
|
|
||||||
|
Stored paths are normalised to forward slashes, so a Windows-made backup
|
||||||
|
restores cleanly onto Linux — which is how the move to Docker works.
|
||||||
|
Full runbook: [`docs/BACKUP_AND_MIGRATION.md`](docs/BACKUP_AND_MIGRATION.md).
|
||||||
|
|
||||||
## 🐛 Troubleshooting
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
@@ -252,3 +287,5 @@ For issues and questions:
|
|||||||
---
|
---
|
||||||
|
|
||||||
**Built with ❤️ for LEGO enthusiasts**
|
**Built with ❤️ for LEGO enthusiasts**
|
||||||
|
|
||||||
|
Created by: Jess Rogerson (yelling commands at Claude.AI)
|
||||||
Reference in new issue
Block a user