unknownfriend00007 commited on
Commit
16edafd
·
verified ·
1 Parent(s): 3ee55da

Upload 4 files

Browse files
Files changed (3) hide show
  1. Dockerfile +63 -63
  2. README.md +6 -10
  3. backup.sh +23 -5
Dockerfile CHANGED
@@ -1,63 +1,63 @@
1
- FROM node:20-alpine
2
- USER root
3
-
4
- # Build arguments
5
- ARG FLOWISE_PATH=/usr/local/lib/node_modules/flowise
6
- ARG BASE_PATH=/data/.flowise
7
-
8
- # Install system dependencies
9
- RUN apk add --no-cache \
10
- git python3 make g++ build-base \
11
- cairo-dev pango-dev chromium \
12
- curl jq bash \
13
- postgresql-client sqlite
14
-
15
- # Puppeteer config (for browser tools)
16
- ENV PUPPETEER_SKIP_DOWNLOAD=true
17
- ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
18
-
19
- # Install Flowise globally
20
- RUN npm install -g flowise@latest
21
-
22
- # Create data directories (ephemeral on HF but backed up via scripts)
23
- RUN mkdir -p $BASE_PATH $BASE_PATH/logs $BASE_PATH/storage $FLOWISE_PATH/uploads && \
24
- chmod -R 777 $BASE_PATH $FLOWISE_PATH
25
-
26
- WORKDIR /data
27
-
28
- # Flowise paths (SQLite + secrets + logs + blobs)
29
- ENV DATABASE_PATH=$BASE_PATH
30
- ENV SECRETKEY_PATH=$BASE_PATH
31
- ENV LOG_PATH=$BASE_PATH/logs
32
- ENV BLOB_STORAGE_PATH=$BASE_PATH/storage
33
-
34
- # Core Flowise config
35
- ENV PORT=7860
36
- ENV FLOWISE_USERNAME=""
37
- ENV FLOWISE_PASSWORD=""
38
- ENV FLOWISE_SECRETKEY_OVERWRITE=""
39
- ENV DISABLE_FLOWISE_TELEMETRY=true
40
- ENV LOG_LEVEL=info
41
-
42
- # Neon backup config (external Postgres for filtered backups)
43
- ENV NEON_HOST=""
44
- ENV NEON_DB="flowise_backup"
45
- ENV NEON_USER=""
46
- ENV NEON_PASSWORD=""
47
-
48
- # Operational settings
49
- ENV BACKUP_INTERVAL_SECONDS=86400
50
- ENV AUTO_RESTART_DAYS=7
51
- ENV HEALTH_CHECK_INTERVAL=3600
52
-
53
- # Copy scripts
54
- COPY start.sh /data/start.sh
55
- COPY backup.sh /data/backup.sh
56
- RUN chmod +x /data/start.sh /data/backup.sh
57
-
58
- EXPOSE 7860
59
-
60
- # Graceful shutdown support
61
- STOPSIGNAL SIGTERM
62
-
63
- CMD ["/data/start.sh"]
 
1
+ FROM node:20-alpine
2
+ USER root
3
+
4
+ # Build arguments
5
+ ARG FLOWISE_PATH=/usr/local/lib/node_modules/flowise
6
+ ARG BASE_PATH=/data/.flowise
7
+
8
+ # Install system dependencies
9
+ RUN apk add --no-cache \
10
+ git python3 make g++ build-base \
11
+ cairo-dev pango-dev chromium \
12
+ curl jq bash \
13
+ postgresql-client sqlite
14
+
15
+ # Puppeteer config (for browser tools)
16
+ ENV PUPPETEER_SKIP_DOWNLOAD=true
17
+ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
18
+
19
+ # Install Flowise globally
20
+ RUN npm install -g flowise@latest
21
+
22
+ # Create data directories (ephemeral on HF but backed up via scripts)
23
+ RUN mkdir -p $BASE_PATH $BASE_PATH/logs $BASE_PATH/storage $FLOWISE_PATH/uploads && \
24
+ chmod -R 777 $BASE_PATH $FLOWISE_PATH
25
+
26
+ WORKDIR /data
27
+
28
+ # Flowise paths (SQLite + secrets + logs + blobs)
29
+ ENV DATABASE_PATH=$BASE_PATH
30
+ ENV SECRETKEY_PATH=$BASE_PATH
31
+ ENV LOG_PATH=$BASE_PATH/logs
32
+ ENV BLOB_STORAGE_PATH=$BASE_PATH/storage
33
+
34
+ # Core Flowise config
35
+ ENV PORT=7860
36
+ ENV FLOWISE_USERNAME=""
37
+ ENV FLOWISE_PASSWORD=""
38
+ ENV FLOWISE_SECRETKEY_OVERWRITE=""
39
+ ENV DISABLE_FLOWISE_TELEMETRY=true
40
+ ENV LOG_LEVEL=info
41
+
42
+ # Neon backup config (external Postgres for filtered backups)
43
+ ENV NEON_HOST=""
44
+ ENV NEON_DB="flowise_backup"
45
+ ENV NEON_USER=""
46
+ ENV NEON_PASSWORD=""
47
+
48
+ # Operational settings
49
+ ENV BACKUP_INTERVAL_SECONDS=86400
50
+ ENV AUTO_RESTART_DAYS=7
51
+ ENV HEALTH_CHECK_INTERVAL=3600
52
+
53
+ # Copy scripts
54
+ COPY start.sh /data/start.sh
55
+ COPY backup.sh /data/backup.sh
56
+ RUN chmod +x /data/start.sh /data/backup.sh
57
+
58
+ EXPOSE 7860
59
+
60
+ # Graceful shutdown support
61
+ STOPSIGNAL SIGTERM
62
+
63
+ CMD ["/data/start.sh"]
README.md CHANGED
@@ -1,10 +1,6 @@
1
- ---
2
- title: Flowhybrid 2
3
- emoji: 📊
4
- colorFrom: purple
5
- colorTo: gray
6
- sdk: docker
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ title: Flowhybrid 2
2
+ emoji: 📊
3
+ colorFrom: purple
4
+ colorTo: gray
5
+ sdk: docker
6
+ pinned: false
 
 
 
 
backup.sh CHANGED
@@ -36,8 +36,12 @@ backup_to_neon() {
36
  fi
37
 
38
  # Create FILTERED SQL dump:
39
- # - Exclude chat history and other transient tables
 
40
  sqlite3 "$DB_PATH" .dump 2>/dev/null | \
 
 
 
41
  grep -v "INSERT INTO chat_message " | \
42
  grep -v "INSERT INTO chat_message_feedback" | \
43
  grep -v "INSERT INTO upsert_history" | \
@@ -50,6 +54,21 @@ backup_to_neon() {
50
 
51
  # Skip tiny/failed dumps
52
  if [ "$BACKUP_SIZE" -lt 500 ]; then
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  rm -f /tmp/flowise_filtered.sql 2>/dev/null || true
54
  return 0
55
  fi
@@ -65,14 +84,13 @@ backup_to_neon() {
65
  sql_content_b64 TEXT,
66
  metadata JSONB
67
  );
68
-
69
  DELETE FROM flowise_backups
70
  WHERE id NOT IN (
71
  SELECT id FROM flowise_backups
72
  ORDER BY backup_date DESC
73
- LIMIT 7
74
  );
75
-
76
  INSERT INTO flowise_backups (sql_content_b64, metadata)
77
  VALUES (
78
  '${BASE64_CONTENT}',
@@ -103,4 +121,4 @@ log "🔄 Backup loop started (every ${INTERVAL_HOURS}h)"
103
  while true; do
104
  sleep "$BACKUP_INTERVAL"
105
  backup_to_neon
106
- done
 
36
  fi
37
 
38
  # Create FILTERED SQL dump:
39
+ # - Exclude chat history, agentflow execution history, and other transient tables
40
+ # NOTE: 'execution' was the root cause of DB bloat (62MB / 1727 rows of agentflow logs)
41
  sqlite3 "$DB_PATH" .dump 2>/dev/null | \
42
+ grep -v "INSERT INTO \"execution\"" | \
43
+ grep -v "INSERT INTO execution " | \
44
+ grep -v "INSERT INTO execution_data" | \
45
  grep -v "INSERT INTO chat_message " | \
46
  grep -v "INSERT INTO chat_message_feedback" | \
47
  grep -v "INSERT INTO upsert_history" | \
 
54
 
55
  # Skip tiny/failed dumps
56
  if [ "$BACKUP_SIZE" -lt 500 ]; then
57
+ log "⚠️ Dump too small (${BACKUP_SIZE}B) - skipping"
58
+ rm -f /tmp/flowise_filtered.sql 2>/dev/null || true
59
+ return 0
60
+ fi
61
+
62
+ # SAFETY GUARD: Warn and skip if dump is suspiciously large (> 5MB)
63
+ # Anything over 5MB means something is leaking into the backup that shouldn't be.
64
+ # Threshold: 5MB raw = ~6.6MB base64 = safe for 3 copies within Neon's 512MB free tier.
65
+ MAX_DUMP_BYTES=5242880 # 5 MB
66
+ if [ "$BACKUP_SIZE" -gt "$MAX_DUMP_BYTES" ]; then
67
+ BACKUP_SIZE_MB=$((BACKUP_SIZE / 1048576))
68
+ log "🚨 ABORT: Dump is ${BACKUP_SIZE_MB}MB — exceeds 5MB safety limit!"
69
+ log "🚨 A table is leaking into the backup. Inspect SQLite with:"
70
+ log "🚨 sqlite3 $DB_PATH '.tables'"
71
+ log "🚨 sqlite3 $DB_PATH 'SELECT name, count(*) FROM sqlite_master WHERE type=\"table\"'"
72
  rm -f /tmp/flowise_filtered.sql 2>/dev/null || true
73
  return 0
74
  fi
 
84
  sql_content_b64 TEXT,
85
  metadata JSONB
86
  );
87
+ -- Keep only 3 copies (was 7 - each snapshot ~200KB now, 3 copies << 1MB total)
88
  DELETE FROM flowise_backups
89
  WHERE id NOT IN (
90
  SELECT id FROM flowise_backups
91
  ORDER BY backup_date DESC
92
+ LIMIT 3
93
  );
 
94
  INSERT INTO flowise_backups (sql_content_b64, metadata)
95
  VALUES (
96
  '${BASE64_CONTENT}',
 
121
  while true; do
122
  sleep "$BACKUP_INTERVAL"
123
  backup_to_neon
124
+ done