mirror of
https://github.com/acedanger/shell.git
synced 2025-12-06 01:10:12 -08:00
feat: Enhance backup script documentation and workflow for shared storage integration
This commit is contained in:
@@ -15,7 +15,7 @@ Complete backup script for Immich installation that creates backups of:
|
||||
|
||||
- `.env` file in the parent directory (`/home/acedanger/shell/.env`) with:
|
||||
- `DB_USERNAME` - PostgreSQL username
|
||||
- `DB_DATABASE_NAME` - Database name
|
||||
- `DB_DATABASE_NAME` - Database name
|
||||
- `UPLOAD_LOCATION` - Path to Immich upload directory
|
||||
- Docker containers: `immich_postgres` and `immich_server`
|
||||
|
||||
@@ -56,16 +56,31 @@ Complete backup script for Immich installation that creates backups of:
|
||||
|
||||
**Backup Location:**
|
||||
|
||||
- Database: `../immich_backups/immich_db_backup_YYYYMMDD_HHMMSS.sql.gz`
|
||||
- Uploads: `../immich_backups/immich_uploads_YYYYMMDD_HHMMSS.tar.gz`
|
||||
**Primary Storage:** `/mnt/share/media/backups/immich/` (shared storage)
|
||||
|
||||
- Database: `immich_db_backup_YYYYMMDD_HHMMSS.sql.gz`
|
||||
- Uploads: `immich_uploads_YYYYMMDD_HHMMSS.tar.gz`
|
||||
|
||||
**Temporary Location:** `../immich_backups/` (cleaned up after copy to shared storage)
|
||||
|
||||
**Backup Workflow:**
|
||||
|
||||
1. **Create local backups** in temporary directory (`../immich_backups/`)
|
||||
2. **Copy to shared storage** (`/mnt/share/media/backups/immich/`)
|
||||
3. **Upload to Backblaze B2** (if configured)
|
||||
4. **Delete local copies** (shared storage copies retained)
|
||||
|
||||
**Features:**
|
||||
|
||||
- **Smart backup workflow**: Creates → Copies to shared storage → Uploads to B2 → Cleans up locally
|
||||
- Command-line options for flexible operation (--help, --dry-run, --no-upload, --verbose)
|
||||
- Dry-run mode to preview operations without executing
|
||||
- Option to skip B2 upload for local-only backups
|
||||
- **Shared storage integration**: Automatically copies backups to `/mnt/share/media/backups/immich/`
|
||||
- **Local cleanup**: Removes temporary files after successful copy to shared storage
|
||||
- Automatic container pausing/resuming during backup
|
||||
- Comprehensive error handling and cleanup
|
||||
- **Graceful degradation**: Retains local backups if shared storage copy fails
|
||||
- Backup validation and health checks
|
||||
- Automatic compression
|
||||
- Old backup cleanup (configurable)
|
||||
@@ -130,6 +145,12 @@ Would create:
|
||||
- Database backup: /home/acedanger/shell/immich_backups/immich_db_backup_20250527_140000.sql.gz
|
||||
- Upload backup: /home/acedanger/shell/immich_backups/immich_uploads_20250527_140000.tar.gz
|
||||
|
||||
Workflow:
|
||||
1. Create local backups
|
||||
2. Copy to shared storage: /mnt/share/media/backups/immich/
|
||||
3. Upload to B2 (if configured)
|
||||
4. Delete local backups (keep shared copies)
|
||||
|
||||
Container Status Check:
|
||||
✓ immich_server: Running (would pause during backup)
|
||||
✓ immich_postgres: Running
|
||||
@@ -139,6 +160,10 @@ B2 Upload Configuration:
|
||||
✓ B2 configured - would upload to bucket: my-immich-backups
|
||||
✓ B2 CLI found at: /home/acedanger/shell/immich/b2-linux
|
||||
|
||||
Shared Storage Check:
|
||||
✓ Shared storage accessible: /mnt/share/media/backups
|
||||
✓ Shared storage writable - would copy backups before B2 upload
|
||||
|
||||
=== DRY RUN COMPLETE - No files were created or modified ===
|
||||
```
|
||||
|
||||
@@ -283,12 +308,39 @@ WEBHOOK_URL="https://notify.peterwood.rocks/lab"
|
||||
BACKUP_RETENTION_DAYS=30
|
||||
```
|
||||
|
||||
## Shared Storage Configuration
|
||||
|
||||
The backup script automatically uses shared storage at `/mnt/share/media/backups/immich/` for permanent backup storage. This provides:
|
||||
|
||||
- **Centralized storage**: All backups stored in one accessible location
|
||||
- **Network accessibility**: Backups available across your network
|
||||
- **Space efficiency**: Temporary local files are cleaned up after copying
|
||||
|
||||
**Requirements:**
|
||||
|
||||
- `/mnt/share/media/backups/` directory must be accessible and writable
|
||||
- Sufficient disk space for backup files (database + uploads archive)
|
||||
|
||||
**Fallback behavior:**
|
||||
|
||||
- If shared storage is inaccessible, backups remain in local temporary directory
|
||||
- Script logs warnings but continues operation
|
||||
- B2 upload still functions from local files if configured
|
||||
|
||||
## Backup Strategy
|
||||
|
||||
Based on Immich's official backup recommendations:
|
||||
**Workflow Process:**
|
||||
|
||||
1. **Local Creation**: Backups created in temporary directory (`../immich_backups/`)
|
||||
2. **Shared Storage Copy**: Files copied to `/mnt/share/media/backups/immich/`
|
||||
3. **B2 Upload**: Local files uploaded to Backblaze B2 (if configured)
|
||||
4. **Local Cleanup**: Temporary files deleted after successful copy to shared storage
|
||||
|
||||
**Backup Content** (based on Immich's official recommendations):
|
||||
|
||||
1. **Database Backup**: Uses `pg_dumpall` with `--clean` and `--if-exists` flags
|
||||
2. **Upload Directory**: Complete archive of upload location including:
|
||||
|
||||
- upload/ - Original photos and videos
|
||||
- profile/ - User profile images
|
||||
- thumbs/ - Generated thumbnails
|
||||
@@ -296,6 +348,12 @@ Based on Immich's official backup recommendations:
|
||||
- library/ - Library metadata
|
||||
- backups/ - Existing backup files (excluded from new backups)
|
||||
|
||||
**Safety Features:**
|
||||
|
||||
- **Graceful degradation**: If shared storage fails, keeps local backups
|
||||
- **Error isolation**: B2 upload failure doesn't affect local or shared storage
|
||||
- **Container safety**: Immich server paused during backup to ensure consistency
|
||||
|
||||
## Notifications 🔔
|
||||
|
||||
The backup script sends notifications to your webhook URL with:
|
||||
@@ -310,6 +368,7 @@ Example notification:
|
||||
```text
|
||||
📦 Database: immich_db_backup_20250526_215913.sql.gz (150MB)
|
||||
📁 Uploads: immich_uploads_20250526_215913.tar.gz (25GB)
|
||||
💾 Stored in: /mnt/share/media/backups/immich (local files cleaned up)
|
||||
☁️ Successfully uploaded to B2 bucket: my-immich-backups
|
||||
```
|
||||
|
||||
@@ -346,16 +405,35 @@ The B2 CLI tool (`b2-linux`) is included in this directory and doesn't require s
|
||||
|
||||
For complete restore instructions, see: <https://immich.app/docs/administration/backup-and-restore/>
|
||||
|
||||
**Backup File Locations:**
|
||||
|
||||
- **Primary**: `/mnt/share/media/backups/immich/` (shared storage)
|
||||
- **Fallback**: `../immich_backups/` (if shared storage copy failed)
|
||||
- **Cloud**: Backblaze B2 bucket (if B2 upload was configured)
|
||||
|
||||
**Restore Steps:**
|
||||
|
||||
1. **Database Restore:**
|
||||
|
||||
```bash
|
||||
docker exec -i immich_postgres psql -U postgres < immich_db_backup.sql
|
||||
# From shared storage (primary location)
|
||||
docker exec -i immich_postgres psql -U postgres < /mnt/share/media/backups/immich/immich_db_backup_YYYYMMDD_HHMMSS.sql
|
||||
|
||||
# OR from B2 download
|
||||
./b2-linux download-file-by-name your-bucket immich-backups/immich_db_backup_YYYYMMDD_HHMMSS.sql.gz
|
||||
gunzip immich_db_backup_YYYYMMDD_HHMMSS.sql.gz
|
||||
docker exec -i immich_postgres psql -U postgres < immich_db_backup_YYYYMMDD_HHMMSS.sql
|
||||
```
|
||||
|
||||
2. **Upload Directory Restore:**
|
||||
|
||||
```bash
|
||||
tar -xzf immich_uploads_backup.tar.gz -C /target/location
|
||||
# From shared storage (primary location)
|
||||
tar -xzf /mnt/share/media/backups/immich/immich_uploads_YYYYMMDD_HHMMSS.tar.gz -C /target/location
|
||||
|
||||
# OR from B2 download
|
||||
./b2-linux download-file-by-name your-bucket immich-backups/immich_uploads_YYYYMMDD_HHMMSS.tar.gz
|
||||
tar -xzf immich_uploads_YYYYMMDD_HHMMSS.tar.gz -C /target/location
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
Reference in New Issue
Block a user