← Back

20261002_144526_localhost_

success   localhost · 2026-10-02 14:45:26Z

Phases

1.Preflight
2.Backup
3.Pull
4.Recreate
5.Verify

Session Log

Session: 20261002_144526_localhost_ Target: root@localhost Mode: deploy Started: 2026-10-02T14:45:26Z --- [2026-10-02T14:45:26Z] === Phase 1: Preflight === [2026-10-02T14:45:26Z] INFO: Checking SSH key: /home/khaled_bebo/.ssh/acrow_operator_key [2026-10-02T14:45:26Z] INFO: Verifying remote prerequisites... [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: set -e command -v docker >/dev/null || { echo 'FAIL: docker not installed'; exit 10; } docker info >/dev/null 2>&1 || { echo 'FAIL: docker daemon not running'; exit 11; } docker compose version >/dev/null 2>&1 || { echo 'FAIL: docker compose v2 not available'; exit 12; } test -d /opt/acrow-stack || { echo 'FAIL: /opt/acrow-stack missing'; exit 13; } test -f /opt/acrow-stack/docker-compose.yml || { echo 'FAIL: docker-compose.yml missing'; exit 14; } docker ps --filter name=acrow-api --format '{{.Status}}' | grep -q Up || { echo 'FAIL: acrow-api not running'; exit 15; } docker ps --filter name=acrow-ui-container --format '{{.Status}}' | grep -q Up || { echo 'FAIL: acrow-ui-container not running'; exit 15; } USED_PCT=$(df /opt --output=pcent | tail -1 | tr -d ' %') [ "$USED_PCT" -lt 90 ] || { echo "FAIL: /opt is ${USED_PCT}% full"; exit 16; } mkdir -p /opt/acrow/backups echo "OK: prerequisites verified (disk ${USED_PCT}% used)" [2026-10-02T14:45:26Z] [dry-run] ssh: set -e command -v docker >/dev/null || { echo 'FAIL: docker not installed'; exit 10; } docker info >/dev/null 2>&1 || { echo 'FAIL: docker daemon not running'; exit 11; } docker compose version >/dev/null 2>&1 || { echo 'FAIL: docker compose v2 not available'; exit 12; } test -d /opt/acrow-stack || { echo 'FAIL: /opt/acrow-stack missing'; exit 13; } test -f /opt/acrow-stack/docker-compose.yml || { echo 'FAIL: docker-compose.yml missing'; exit 14; } docker ps --filter name=acrow-api --format '{{.Status}}' | grep -q Up || { echo 'FAIL: acrow-api not running'; exit 15; } docker ps --filter name=acrow-ui-container --format '{{.Status}}' | grep -q Up || { echo 'FAIL: acrow-ui-container not running'; exit 15; } USED_PCT=$(df /opt --output=pcent | tail -1 | tr -d ' %') [ "$USED_PCT" -lt 90 ] || { echo "FAIL: /opt is ${USED_PCT}% full"; exit 16; } mkdir -p /opt/acrow/backups echo "OK: prerequisites verified (disk ${USED_PCT}% used)" [2026-10-02T14:45:26Z] OK: Docker 24+, compose v2, stack present, disk OK [2026-10-02T14:45:26Z] INFO: Refreshing GHCR auth on target... [2026-10-02T14:45:26Z] OK: GHCR token refreshed [2026-10-02T14:45:26Z] OK: Phase 1 complete [2026-10-02T14:45:26Z] === Phase 2: Backup === [2026-10-02T14:45:26Z] INFO: Creating backup dir: /opt/acrow/backups/pre-update-20261002_144526 [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: set -e mkdir -p '/opt/acrow/backups/pre-update-20261002_144526' cd /opt/acrow-stack cp docker-compose.yml '/opt/acrow/backups/pre-update-20261002_144526/' cp .env '/opt/acrow/backups/pre-update-20261002_144526/' [ -d nginx-override ] && cp -r nginx-override '/opt/acrow/backups/pre-update-20261002_144526/' || true echo ' -> compose, env, nginx-override copied' [2026-10-02T14:45:26Z] [dry-run] ssh: set -e mkdir -p '/opt/acrow/backups/pre-update-20261002_144526' cd /opt/acrow-stack cp docker-compose.yml '/opt/acrow/backups/pre-update-20261002_144526/' cp .env '/opt/acrow/backups/pre-update-20261002_144526/' [ -d nginx-override ] && cp -r nginx-override '/opt/acrow/backups/pre-update-20261002_144526/' || true echo ' -> compose, env, nginx-override copied' [2026-10-02T14:45:26Z] OK: Config backed up [2026-10-02T14:45:26Z] INFO: Dumping database... [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: set -e docker exec acrow-postgres pg_dump -U acrowadmin -F c -f /tmp/acrow.dump acrowdb docker cp acrow-postgres:/tmp/acrow.dump '/opt/acrow/backups/pre-update-20261002_144526/acrowdb.dump' docker exec acrow-postgres rm -f /tmp/acrow.dump SZ=$(stat -c%s '/opt/acrow/backups/pre-update-20261002_144526/acrowdb.dump') echo " -> DB dump: $SZ bytes" [2026-10-02T14:45:26Z] [dry-run] ssh: set -e docker exec acrow-postgres pg_dump -U acrowadmin -F c -f /tmp/acrow.dump acrowdb docker cp acrow-postgres:/tmp/acrow.dump '/opt/acrow/backups/pre-update-20261002_144526/acrowdb.dump' docker exec acrow-postgres rm -f /tmp/acrow.dump SZ=$(stat -c%s '/opt/acrow/backups/pre-update-20261002_144526/acrowdb.dump') echo " -> DB dump: $SZ bytes" [2026-10-02T14:45:26Z] OK: Database backed up [2026-10-02T14:45:26Z] INFO: Recording image IDs... [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: set -e docker inspect acrow-api --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_144526/api-image-id.txt' docker inspect acrow-ui-container --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_144526/ui-image-id.txt' echo ' -> image IDs recorded' [2026-10-02T14:45:26Z] [dry-run] ssh: set -e docker inspect acrow-api --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_144526/api-image-id.txt' docker inspect acrow-ui-container --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_144526/ui-image-id.txt' echo ' -> image IDs recorded' [2026-10-02T14:45:26Z] OK: Image IDs recorded [2026-10-02T14:45:26Z] OK: Phase 2 complete [2026-10-02T14:45:26Z] === Phase 3: Pull === [2026-10-02T14:45:26Z] INFO: Pulling latest images (1–2 min)... [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: cd /opt/acrow-stack && docker compose pull acrow-api acrow-ui [2026-10-02T14:45:26Z] [dry-run] ssh: cd /opt/acrow-stack && docker compose pull acrow-api acrow-ui [2026-10-02T14:45:26Z] OK: Phase 3 complete [2026-10-02T14:45:26Z] === Phase 4: Recreate === [2026-10-02T14:45:26Z] INFO: Recreating acrow-api and acrow-ui... [2026-10-02T14:45:26Z] INFO: [dry-run] ssh root@localhost: cd /opt/acrow-stack && docker compose up -d --force-recreate acrow-api acrow-ui [2026-10-02T14:45:26Z] [dry-run] ssh: cd /opt/acrow-stack && docker compose up -d --force-recreate acrow-api acrow-ui [2026-10-02T14:45:26Z] OK: Phase 4 skipped (dry-run) [2026-10-02T14:45:26Z] === Phase 5: Verify === [2026-10-02T14:45:26Z] OK: Phase 5 skipped (dry-run) [2026-10-02T14:45:26Z] session ended: 20261002_144526_localhost_