unknownfriend00007 commited on
Commit
ef22ccb
·
verified ·
1 Parent(s): a1914ac

Update backup.sh

Browse files
Files changed (1) hide show
  1. backup.sh +10 -35
backup.sh CHANGED
@@ -1,23 +1,15 @@
1
  #!/bin/bash
2
  set -e
3
 
4
- # ============================================
5
- # CONFIGURATION
6
- # ============================================
7
  DB_PATH="/data/.flowise/database.sqlite"
8
  BACKUP_INTERVAL=${BACKUP_INTERVAL_SECONDS:-86400}
9
  NEON_CONNECTION="postgresql://${NEON_USER}@${NEON_HOST}/${NEON_DB}?sslmode=require"
10
 
11
- # Logging
12
  log() {
13
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] [BACKUP] $1"
14
  }
15
 
16
- # ============================================
17
- # BACKUP FUNCTION
18
- # ============================================
19
  backup_to_neon() {
20
- # Check prerequisites
21
  if [ ! -f "$DB_PATH" ]; then
22
  return 0
23
  fi
@@ -26,70 +18,53 @@ backup_to_neon() {
26
  return 0
27
  fi
28
 
29
- # Count current data
30
  USER_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM user;" 2>/dev/null || echo "0")
31
  ORG_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM organization;" 2>/dev/null || echo "0")
32
  CF_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM chat_flow;" 2>/dev/null || echo "0")
33
  CRED_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM credential;" 2>/dev/null || echo "0")
34
 
35
- # Skip if no meaningful data
36
  if [ "$USER_COUNT" -eq 0 ] && [ "$ORG_COUNT" -eq 0 ]; then
37
  return 0
38
  fi
39
 
40
- # Create SQL dump - FULL BACKUP (no filtering for simplicity)
41
  sqlite3 "$DB_PATH" .dump > /tmp/flowise_backup.sql 2>/dev/null || true
42
 
43
  BACKUP_SIZE=$(wc -c < /tmp/flowise_backup.sql 2>/dev/null || echo "0")
44
 
45
- # Skip if backup too small (likely failed)
46
  if [ "$BACKUP_SIZE" -lt 1000 ]; then
47
  rm -f /tmp/flowise_backup.sql 2>/dev/null || true
48
  return 0
49
  fi
50
 
51
- # Upload to Neon (silent)
52
- PGPASSWORD="$NEON_PASSWORD" psql "$NEON_CONNECTION" -q <<EOF 2>/dev/null
 
53
  CREATE TABLE IF NOT EXISTS flowise_backups (
54
  id SERIAL PRIMARY KEY,
55
  backup_date TIMESTAMP DEFAULT NOW(),
56
- sql_content TEXT,
57
  metadata JSONB
58
  );
59
-
60
- DELETE FROM flowise_backups
61
- WHERE id NOT IN (
62
- SELECT id FROM flowise_backups
63
- ORDER BY backup_date DESC
64
- LIMIT 7
65
- );
66
-
67
- INSERT INTO flowise_backups (sql_content, metadata)
68
- VALUES (
69
- \$SQL\$$(cat /tmp/flowise_backup.sql)\$SQL\$,
70
- '{"users": $USER_COUNT, "orgs": $ORG_COUNT, "flows": $CF_COUNT, "creds": $CRED_COUNT, "bytes": $BACKUP_SIZE}'::jsonb
71
  );
 
 
72
  EOF
73
 
74
  if [ $? -eq 0 ]; then
75
  BACKUP_SIZE_KB=$((BACKUP_SIZE / 1024))
76
  log "✅ Backup complete: ${BACKUP_SIZE_KB}KB | $CF_COUNT flows, $CRED_COUNT creds"
 
 
77
  fi
78
 
79
  rm -f /tmp/flowise_backup.sql 2>/dev/null || true
80
  }
81
 
82
- # ============================================
83
- # MAIN LOOP
84
- # ============================================
85
-
86
- # Initial delay (let Flowise fully initialize)
87
  sleep 120
88
-
89
- # First backup
90
  backup_to_neon
91
 
92
- # Continuous backup loop
93
  INTERVAL_HOURS=$((BACKUP_INTERVAL / 3600))
94
  log "🔄 Backup loop started (every ${INTERVAL_HOURS}h)"
95
 
 
1
  #!/bin/bash
2
  set -e
3
 
 
 
 
4
  DB_PATH="/data/.flowise/database.sqlite"
5
  BACKUP_INTERVAL=${BACKUP_INTERVAL_SECONDS:-86400}
6
  NEON_CONNECTION="postgresql://${NEON_USER}@${NEON_HOST}/${NEON_DB}?sslmode=require"
7
 
 
8
  log() {
9
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] [BACKUP] $1"
10
  }
11
 
 
 
 
12
  backup_to_neon() {
 
13
  if [ ! -f "$DB_PATH" ]; then
14
  return 0
15
  fi
 
18
  return 0
19
  fi
20
 
 
21
  USER_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM user;" 2>/dev/null || echo "0")
22
  ORG_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM organization;" 2>/dev/null || echo "0")
23
  CF_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM chat_flow;" 2>/dev/null || echo "0")
24
  CRED_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM credential;" 2>/dev/null || echo "0")
25
 
 
26
  if [ "$USER_COUNT" -eq 0 ] && [ "$ORG_COUNT" -eq 0 ]; then
27
  return 0
28
  fi
29
 
 
30
  sqlite3 "$DB_PATH" .dump > /tmp/flowise_backup.sql 2>/dev/null || true
31
 
32
  BACKUP_SIZE=$(wc -c < /tmp/flowise_backup.sql 2>/dev/null || echo "0")
33
 
 
34
  if [ "$BACKUP_SIZE" -lt 1000 ]; then
35
  rm -f /tmp/flowise_backup.sql 2>/dev/null || true
36
  return 0
37
  fi
38
 
39
+ BASE64_CONTENT=$(base64 -w 0 /tmp/flowise_backup.sql)
40
+
41
+ PGPASSWORD="$NEON_PASSWORD" psql "$NEON_CONNECTION" -v ON_ERROR_STOP=1 <<EOF 2>&1 | grep -i "error" && log "❌ Upload error" || true
42
  CREATE TABLE IF NOT EXISTS flowise_backups (
43
  id SERIAL PRIMARY KEY,
44
  backup_date TIMESTAMP DEFAULT NOW(),
45
+ sql_content_b64 TEXT,
46
  metadata JSONB
47
  );
48
+ DELETE FROM flowise_backups WHERE id NOT IN (
49
+ SELECT id FROM flowise_backups ORDER BY backup_date DESC LIMIT 7
 
 
 
 
 
 
 
 
 
 
50
  );
51
+ INSERT INTO flowise_backups (sql_content_b64, metadata)
52
+ VALUES ('$BASE64_CONTENT', '{"users": $USER_COUNT, "orgs": $ORG_COUNT, "flows": $CF_COUNT, "creds": $CRED_COUNT, "bytes": $BACKUP_SIZE}'::jsonb);
53
  EOF
54
 
55
  if [ $? -eq 0 ]; then
56
  BACKUP_SIZE_KB=$((BACKUP_SIZE / 1024))
57
  log "✅ Backup complete: ${BACKUP_SIZE_KB}KB | $CF_COUNT flows, $CRED_COUNT creds"
58
+ else
59
+ log "❌ Backup failed"
60
  fi
61
 
62
  rm -f /tmp/flowise_backup.sql 2>/dev/null || true
63
  }
64
 
 
 
 
 
 
65
  sleep 120
 
 
66
  backup_to_neon
67
 
 
68
  INTERVAL_HOURS=$((BACKUP_INTERVAL / 3600))
69
  log "🔄 Backup loop started (every ${INTERVAL_HOURS}h)"
70