Files
igny8/docs/BACKUP-SYSTEM.md
IGNY8 VPS (Salman) 6997702b12 flower celery
2025-12-10 17:46:37 +00:00

5.2 KiB

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:

/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:

'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:

# 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:

# 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:

# 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:

# 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:

# 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:

'daily-app-package-backup': {
    'task': 'backup.create_daily_app_package',
    'schedule': crontab(hour=0, minute=0),  # Change time here
},

Then restart Celery:

docker restart igny8_celery_beat igny8_celery_worker