mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 09:34:46 +08:00
- flywheel: módulo lib/agent-engine/flywheel/live.ts (runFlywheelOnce + loop FLYWHEEL_INTERVAL_MS default 6h; 0=off); script vira wrapper; gate humano intacto - scripts/backup-db.sh: pg_dump custom format + retenção — TESTADO contra o banco real (dump 3.1M) - docker-compose.prod.yml: worker com WAHA_API_BASE_URL=http://waha:3000 - .env.example: seção completa do agent engine - docs/deploy-selfhost/README.md: instalação VPS de ponta a ponta + troubleshooting Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CsMA4LDfgNarXsqEoLJmyV
32 lines
1.1 KiB
Bash
Executable File
32 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Backup do Postgres (Supabase) do DeskcommCRM — schema public completo
|
|
# (CRM + harness do agente). Roda no host ou num cron da VPS:
|
|
# 0 3 * * * /path/repo/scripts/backup-db.sh /var/backups/deskcomm
|
|
# Requer: pg_dump no PATH (major compatível) e SUPABASE_DB_URL no .env/.env.local.
|
|
set -euo pipefail
|
|
|
|
DIR="${1:-./backups}"
|
|
RETENTION_DAYS="${RETENTION_DAYS:-14}"
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
URL="${SUPABASE_DB_URL:-}"
|
|
if [ -z "$URL" ]; then
|
|
for f in "$ROOT/.env.local" "$ROOT/.env"; do
|
|
if [ -f "$f" ]; then
|
|
URL=$(grep -E '^SUPABASE_DB_URL=' "$f" | head -1 | cut -d= -f2- || true)
|
|
[ -n "$URL" ] && break
|
|
fi
|
|
done
|
|
fi
|
|
[ -n "$URL" ] || { echo "FATAL: SUPABASE_DB_URL ausente (env ou .env/.env.local)" >&2; exit 1; }
|
|
|
|
mkdir -p "$DIR"
|
|
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
|
|
OUT="$DIR/deskcomm-$STAMP.dump"
|
|
pg_dump "$URL" --format=custom --schema=public --no-owner --no-privileges --file="$OUT"
|
|
echo "backup ok: $OUT ($(du -h "$OUT" | cut -f1))"
|
|
|
|
# retenção: apaga dumps mais velhos que RETENTION_DAYS
|
|
find "$DIR" -name 'deskcomm-*.dump' -mtime +"$RETENTION_DAYS" -delete
|
|
echo "retenção aplicada (${RETENTION_DAYS}d)"
|