124-webapp/migrate_to_production.sh
2025-11-06 13:14:19 +01:00

136 lines
5.1 KiB
Bash
Executable file

#!/bin/bash
#
# Studio EinsZwoVier - Production Migration Script
# Run this FROM the dev Mac (einszwovier.local) to migrate to production Mac (124.local)
#
# Don't exit on error - we'll handle retries
set +e
echo "════════════════════════════════════════════════════════════════"
echo " Studio EinsZwoVier - Production Migration Script"
echo "════════════════════════════════════════════════════════════════"
echo ""
echo "This will copy the entire webapp from THIS machine to admin@124.local"
echo ""
echo "Prerequisites:"
echo " - You're running this ON the dev Mac (einszwovier.local)"
echo " - You have SSH access to 124.local (configured as 'ssh 124')"
echo " - Docker Desktop is installed on production Mac (124.local)"
echo ""
read -p "Ready to proceed? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Migration cancelled."
exit 1
fi
# Variables
PROD_MAC="124" # SSH config alias for admin@124.local
DEV_PATH="/Users/aron124/webapp_124"
PROD_PATH="/Users/admin/webapp_124"
MAX_RETRIES=5
echo ""
echo "═══ Step 1: Stop services on dev Mac (locally) ═══"
cd "$DEV_PATH"
docker compose down
echo "✅ Services stopped"
echo ""
echo "═══ Step 2: Create directory structure on production Mac ═══"
ssh "$PROD_MAC" "mkdir -p $(dirname "$PROD_PATH")"
echo "✅ Directory created"
echo ""
echo "═══ Step 3: Copy all files (auto-resume enabled) ═══"
echo "Copying from: $DEV_PATH (local)"
echo "Copying to: $PROD_MAC:$PROD_PATH"
echo ""
# Rsync with auto-retry on failure
RETRY_COUNT=0
RSYNC_SUCCESS=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ] && [ $RSYNC_SUCCESS -eq 0 ]; do
if [ $RETRY_COUNT -gt 0 ]; then
echo ""
echo "⚠️ Connection interrupted. Resuming transfer (attempt $((RETRY_COUNT + 1))/$MAX_RETRIES)..."
sleep 5
fi
if command -v rsync &> /dev/null; then
# Rsync with:
# -a: archive mode
# -v: verbose
# --progress: show progress
# --partial: keep partially transferred files
# --append-verify: resume from where we left off
# --timeout=300: 5min timeout per operation
# --compress-level=0: no compression (faster for local network)
rsync -av --progress --partial --append-verify --timeout=300 --compress-level=0 \
--no-inc-recursive "$DEV_PATH/" "$PROD_MAC:$PROD_PATH/"
if [ $? -eq 0 ]; then
RSYNC_SUCCESS=1
else
RETRY_COUNT=$((RETRY_COUNT + 1))
fi
else
# Fallback to scp with keep-alive
scp -o ServerAliveInterval=60 -o ServerAliveCountMax=10 -r "$DEV_PATH" "$PROD_MAC:$(dirname "$PROD_PATH")/"
if [ $? -eq 0 ]; then
RSYNC_SUCCESS=1
else
RETRY_COUNT=$((RETRY_COUNT + 1))
fi
fi
done
if [ $RSYNC_SUCCESS -eq 0 ]; then
echo ""
echo "❌ Failed to transfer files after $MAX_RETRIES attempts."
echo "You can manually resume with:"
echo " rsync -av --progress --partial --append-verify $DEV_PATH/ $PROD_MAC:$PROD_PATH/"
exit 1
fi
echo "✅ Files copied successfully"
echo ""
echo "═══ Step 4: Fix file permissions on production Mac ═══"
ssh "$PROD_MAC" "sudo chown -R \$(whoami):staff '$PROD_PATH' && chmod -R 755 '$PROD_PATH/matrix' '$PROD_PATH/ollama' '$PROD_PATH/open-webui' '$PROD_PATH/bookstack' '$PROD_PATH/docmost' '$PROD_PATH/data' 2>/dev/null || true"
echo "✅ Permissions fixed"
echo ""
echo "═══ Step 5: Start services on production Mac ═══"
ssh "$PROD_MAC" "cd '$PROD_PATH' && docker compose up -d"
echo "✅ Services starting..."
echo ""
echo "Waiting 30 seconds for services to initialize..."
sleep 30
echo ""
echo "═══ Step 6: Check service status ═══"
ssh "$PROD_MAC" "cd '$PROD_PATH' && docker compose ps"
echo ""
echo "════════════════════════════════════════════════════════════════"
echo " Migration Complete!"
echo "════════════════════════════════════════════════════════════════"
echo ""
echo "Next steps:"
echo " 1. Verify services are healthy: ssh 124 'cd /Users/admin/webapp_124 && docker compose ps'"
echo " 2. Check logs if issues: ssh 124 'cd /Users/admin/webapp_124 && docker compose logs [service-name]'"
echo " 3. Test web interface: http://124.local"
echo " 4. Test cost calculator with a PDF upload"
echo " 5. Verify Matrix integration works"
echo ""
echo "To restart dev Mac services (this machine):"
echo " cd $DEV_PATH && docker compose up -d"
echo ""
echo "Full migration guide: $DEV_PATH/MIGRATION.md"
echo "════════════════════════════════════════════════════════════════"