#!/bin/bash set -e echo "๐Ÿš€ Starting optimized deployment..." # Backup database echo "๐Ÿ’พ Creating database backup..." # Try to find database path from docker-compose.yml or .env DB_PATH="" # Check if docker-compose.yml exists and extract DATABASE_URL if [ -f "docker-compose.yml" ]; then DB_PATH=$(grep -oP 'DATABASE_URL=file:\K[^\s]+' docker-compose.yml | head -1) fi # Fallback to .env if not found if [ -z "$DB_PATH" ] && [ -f ".env" ]; then DB_PATH=$(grep -oP '^DATABASE_URL=file:\K.+' .env | head -1) fi # Remove any quotes and resolve path DB_PATH=$(echo "$DB_PATH" | tr -d '"' | tr -d "'") if [ -n "$DB_PATH" ]; then # Convert container path to host path if needed # /app/data/prod.db -> ./data/prod.db DB_PATH=$(echo "$DB_PATH" | sed 's|/app/|./|') if [ -f "$DB_PATH" ]; then # Create backups directory mkdir -p ./backups # Create timestamped backup BACKUP_FILE="./backups/$(basename "$DB_PATH" .db)_$(date +%Y%m%d_%H%M%S).db" cp "$DB_PATH" "$BACKUP_FILE" echo "โœ… Database backed up to: $BACKUP_FILE" # Keep only last 10 backups ls -t ./backups/*.db | tail -n +11 | xargs -r rm echo "๐Ÿงน Cleaned old backups (keeping last 10)" else echo "โš ๏ธ Database file not found at: $DB_PATH" fi else echo "โš ๏ธ Could not determine database path from config files" fi # Pull latest changes echo "๐Ÿ“ฅ Pulling latest changes from git..." git pull # Fetch all tags echo "๐Ÿท๏ธ Fetching git tags..." git fetch --tags # Build new image in background (doesn't stop running container) echo "๐Ÿ”จ Building new Docker image (this runs while app is still online)..." docker compose build # Quick restart with pre-built image echo "๐Ÿ”„ Restarting with new image (minimal downtime)..." docker compose up -d # Clean up old images echo "๐Ÿงน Cleaning up old images..." docker image prune -f echo "โœ… Deployment complete!" echo "" echo "๐Ÿ“Š Showing logs (Ctrl+C to exit)..." docker compose logs -f