73 lines
2.0 KiB
Bash
Executable File
73 lines
2.0 KiB
Bash
Executable File
#!/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
|