[object Object]

← back to Homesonspec

TK-10001: harden deploy-kamatera.sh — pre-drop pg_dump backup (recoverable full-mirror) + WORKER_HEALTH_PORT=9966 in remote .env (worker was defaulting to 9976, colliding with admin)

66c7ded30ec569d92f7c2c5c9845cc152c352414 · 2026-08-11 11:56:18 -0700 · Steve

Files touched

Diff

commit 66c7ded30ec569d92f7c2c5c9845cc152c352414
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Aug 11 11:56:18 2026 -0700

    TK-10001: harden deploy-kamatera.sh — pre-drop pg_dump backup (recoverable full-mirror) + WORKER_HEALTH_PORT=9966 in remote .env (worker was defaulting to 9976, colliding with admin)
---
 deploy-kamatera.sh | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/deploy-kamatera.sh b/deploy-kamatera.sh
index 4df50b9e..fb221eed 100755
--- a/deploy-kamatera.sh
+++ b/deploy-kamatera.sh
@@ -24,7 +24,17 @@ chmod 600 "$EK"
 DBPW=$(grep '^HOMESONSPEC_DB_PW='      "$EK" | tail -1 | cut -d= -f2)
 ADMIN_AUTH=$(grep '^HOMESONSPEC_ADMIN_AUTH=' "$EK" | tail -1 | cut -d= -f2-)
 
-echo "──────── 2/6  Postgres role + CLEAN db ────────"
+echo "──────── 2/6  BACKUP existing Kamatera DB, then role + CLEAN db ────────"
+# SAFETY (TK-10001 hardening): back up the live homesonspec DB BEFORE the DROP so the
+# full-mirror overwrite is recoverable. Aborts if a DB exists but its dump is suspiciously
+# small. On a first deploy (no DB yet) it skips gracefully.
+ssh $KH "if sudo -u postgres psql -tAc \"SELECT 1 FROM pg_database WHERE datname='homesonspec'\" | grep -q 1; then
+  mkdir -p /root/backups; TS=\$(date +%Y%m%d-%H%M%S); F=/root/backups/homesonspec-pre-deploy-\$TS.sql.gz
+  sudo -u postgres pg_dump -d homesonspec | gzip > \$F
+  SZ=\$(stat -c%s \$F 2>/dev/null || echo 0); echo \"  backup → \$F (\$SZ bytes)\"
+  if [ \"\$SZ\" -lt 10000 ]; then echo '  ✗ backup suspiciously small — ABORT before DROP.'; exit 1; fi
+  echo '  ✓ pre-drop backup verified (rollback: gunzip <\$F | sudo -u postgres psql -d homesonspec)'
+else echo '  (no existing homesonspec DB — first deploy, nothing to back up)'; fi"
 # Drop+recreate for a faithful mirror (restoring onto an existing DB duplicates rows / fails PKs).
 ssh $KH "sudo -u postgres psql -v ON_ERROR_STOP=1 \
   -c \"DO \\\$\\\$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='homesonspec') THEN CREATE ROLE homesonspec LOGIN PASSWORD '$DBPW'; ELSE ALTER ROLE homesonspec PASSWORD '$DBPW'; END IF; END \\\$\\\$;\" \
@@ -53,6 +63,7 @@ DATABASE_URL=postgresql://homesonspec:$DBPW@localhost/homesonspec
 BASIC_AUTH=$ADMIN_AUTH
 BUILDER_IMAGES_ENABLED=1
 SNAPSHOT_DIR=$REMOTE/var/snapshots
+WORKER_HEALTH_PORT=9966
 NODE_ENV=production
 EOF
 ln -sf $REMOTE/.env $REMOTE/apps/web/.env

← d4ac2fbd TK-10001: build M/I Homes + Smith Douglas adapters (national  ·  back to Homesonspec  ·  TK-10001: pipeline/verify scripts load root .env via tsx --e 4ee4bf92 →