200 lines
5.2 KiB
Markdown
200 lines
5.2 KiB
Markdown
# IGNY8 Application Packaging & Backup System
|
|
|
|
## Overview
|
|
|
|
This system creates portable, clean packages of the IGNY8 application containing only source code (no dependencies or generated artifacts).
|
|
|
|
## Components
|
|
|
|
### 1. Packaging Script
|
|
**Location**: `/data/app/igny8/scripts/package_app.sh`
|
|
|
|
**What it does**:
|
|
- Creates compressed archive of application source code
|
|
- Excludes: `node_modules/`, `.venv/`, `dist/`, `*.sql`, `*.log`, build artifacts
|
|
- Includes: Source code, Docker configs, documentation
|
|
- Generates SHA256 checksum for verification
|
|
- Auto-cleans packages older than 7 days
|
|
- Package size: ~44 MB (compressed)
|
|
|
|
**Manual Usage**:
|
|
```bash
|
|
/data/app/igny8/scripts/package_app.sh
|
|
```
|
|
|
|
### 2. Automated Backup Tasks
|
|
**Location**: `/data/app/igny8/backend/igny8_core/tasks/backup.py`
|
|
|
|
**Celery Tasks**:
|
|
|
|
1. **`backup.create_daily_app_package`**
|
|
- Runs daily at 00:00 UTC
|
|
- Creates full application package
|
|
- Logs success/failure
|
|
- Returns status dict
|
|
|
|
2. **`backup.cleanup_old_packages`**
|
|
- Runs weekly (Monday at 01:00 UTC)
|
|
- Removes packages older than 30 days
|
|
- Keeps recent backups safe
|
|
|
|
### 3. Celery Beat Schedule
|
|
**Location**: `/data/app/igny8/backend/igny8_core/celery.py`
|
|
|
|
Configured schedules:
|
|
```python
|
|
'daily-app-package-backup': {
|
|
'task': 'backup.create_daily_app_package',
|
|
'schedule': crontab(hour=0, minute=0), # Daily at midnight
|
|
},
|
|
'weekly-package-cleanup': {
|
|
'task': 'backup.cleanup_old_packages',
|
|
'schedule': crontab(hour=1, minute=0, day_of_week=1), # Monday 01:00
|
|
},
|
|
```
|
|
|
|
## Backup Storage
|
|
|
|
**Location**: `/data/backups/igny8/`
|
|
|
|
**Files created**:
|
|
```
|
|
/data/backups/igny8/
|
|
├── igny8-app-20251210_161527.tar.gz # Compressed package
|
|
├── igny8-app-20251210_161527.tar.gz.sha256 # Checksum file
|
|
├── igny8-app-20251211_000000.tar.gz
|
|
├── igny8-app-20251211_000000.tar.gz.sha256
|
|
└── ... (7-30 days of backups retained)
|
|
```
|
|
|
|
## Package Contents
|
|
|
|
### ✅ INCLUDED (Source code only - ~56 MB uncompressed):
|
|
- `backend/igny8_core/` - Django application
|
|
- `backend/manage.py`, `requirements.txt`
|
|
- `frontend/src/`, `frontend/public/`
|
|
- `frontend/package.json`, config files
|
|
- `docs/`, `README.md`
|
|
- Dockerfiles, docker-compose files
|
|
|
|
### ❌ EXCLUDED (Auto-generated - will be rebuilt):
|
|
- `backend/.venv/` - Python virtual environment
|
|
- `frontend/node_modules/` - NPM dependencies
|
|
- `frontend/dist/` - Build output
|
|
- `*.sql`, `*.sqlite3` - Database files
|
|
- `logs/` - Runtime logs
|
|
- `celerybeat-schedule` - Celery state
|
|
- `staticfiles/` - Collected static files
|
|
- `__pycache__/`, `*.pyc` - Python cache
|
|
|
|
## Restoration Process
|
|
|
|
To restore from a package on a new server:
|
|
|
|
```bash
|
|
# 1. Extract package
|
|
cd /data/app
|
|
tar -xzf /path/to/igny8-app-YYYYMMDD_HHMMSS.tar.gz
|
|
|
|
# 2. Verify checksum (optional but recommended)
|
|
sha256sum -c igny8-app-YYYYMMDD_HHMMSS.tar.gz.sha256
|
|
|
|
# 3. Follow INSTALLATION.md to:
|
|
# - Build Docker images (installs all dependencies)
|
|
# - Start services
|
|
# - Run migrations
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
**Check backup status**:
|
|
```bash
|
|
# List recent backups
|
|
ls -lh /data/backups/igny8/
|
|
|
|
# View Celery Beat schedule
|
|
docker exec igny8_celery_beat celery -A igny8_core inspect scheduled
|
|
|
|
# View Celery logs
|
|
docker logs igny8_celery_beat
|
|
docker logs igny8_celery_worker
|
|
```
|
|
|
|
**Verify backup worked**:
|
|
```bash
|
|
# Check if backup ran
|
|
ls -lt /data/backups/igny8/ | head -5
|
|
|
|
# Verify package integrity
|
|
cd /data/backups/igny8/
|
|
sha256sum -c igny8-app-*.tar.gz.sha256
|
|
```
|
|
|
|
## Retention Policy
|
|
|
|
- **Daily backups**: Kept for 7 days in packaging script
|
|
- **Long-term backups**: Kept for 30 days by cleanup task
|
|
- **Manual backups**: Never auto-deleted (run script manually with different output dir)
|
|
|
|
## Troubleshooting
|
|
|
|
**Backup didn't run at midnight**:
|
|
```bash
|
|
# Check Celery Beat is running
|
|
docker ps | grep celery_beat
|
|
|
|
# Check Beat logs
|
|
docker logs igny8_celery_beat
|
|
|
|
# Manually trigger backup
|
|
docker exec igny8_celery_worker celery -A igny8_core call backup.create_daily_app_package
|
|
```
|
|
|
|
**Insufficient disk space**:
|
|
```bash
|
|
# Check disk usage
|
|
df -h /data
|
|
|
|
# Clean old backups manually
|
|
find /data/backups/igny8/ -name "*.tar.gz" -mtime +30 -delete
|
|
```
|
|
|
|
**Package too large**:
|
|
- Check no large files accidentally included
|
|
- Verify `.git` folder is excluded
|
|
- Ensure `node_modules`, `.venv` excluded
|
|
|
|
## Security Notes
|
|
|
|
1. **Packages contain source code** - store securely
|
|
2. **No secrets in package** - `.env` is excluded
|
|
3. **Checksum verification** - always verify SHA256 before restoring
|
|
4. **Backup the backups** - Consider copying to remote storage
|
|
|
|
## Quick Reference
|
|
|
|
| Action | Command |
|
|
|--------|---------|
|
|
| Create backup now | `/data/app/igny8/scripts/package_app.sh` |
|
|
| List backups | `ls -lh /data/backups/igny8/` |
|
|
| Verify package | `sha256sum -c package.tar.gz.sha256` |
|
|
| Extract package | `tar -xzf package.tar.gz` |
|
|
| Check schedule | `docker exec igny8_celery_beat celery -A igny8_core inspect scheduled` |
|
|
| View logs | `docker logs igny8_celery_beat` |
|
|
|
|
## Configuration
|
|
|
|
To change backup schedule, edit `/data/app/igny8/backend/igny8_core/celery.py`:
|
|
|
|
```python
|
|
'daily-app-package-backup': {
|
|
'task': 'backup.create_daily_app_package',
|
|
'schedule': crontab(hour=0, minute=0), # Change time here
|
|
},
|
|
```
|
|
|
|
Then restart Celery:
|
|
```bash
|
|
docker restart igny8_celery_beat igny8_celery_worker
|
|
```
|