← Back

20261002_151146_localhost_

success   localhost · 2026-10-02 15:11:46Z

Phases

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

Session Log

Session: 20261002_151146_localhost_ Target: root@localhost Mode: deploy Started: 2026-10-02T15:11:46Z --- [2026-10-02T15:11:46Z] === Phase 1: Preflight === [2026-10-02T15:11:46Z] INFO: Checking SSH key: /home/khaled_bebo/.ssh/acrow_operator_key [2026-10-02T15:11:46Z] INFO: Testing SSH connection... [2026-10-02T15:11:47Z] OK: SSH reachable [2026-10-02T15:11:47Z] INFO: Verifying remote prerequisites... [2026-10-02T15:11:47Z] REMOTE: 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)" OK: prerequisites verified (disk 1% used) [2026-10-02T15:11:48Z] OK: Docker 24+, compose v2, stack present, disk OK [2026-10-02T15:11:48Z] INFO: Refreshing GHCR auth on target... Login Succeeded [2026-10-02T15:11:49Z] OK: GHCR token refreshed [2026-10-02T15:11:50Z] OK: Current API: sha256:e0f7638a26f8… [2026-10-02T15:11:50Z] OK: Current UI: sha256:0836c3845697… [2026-10-02T15:11:50Z] OK: Phase 1 complete [2026-10-02T15:11:50Z] === Phase 2: Backup === [2026-10-02T15:11:50Z] INFO: Creating backup dir: /opt/acrow/backups/pre-update-20261002_151150 [2026-10-02T15:11:50Z] REMOTE: set -e mkdir -p '/opt/acrow/backups/pre-update-20261002_151150' cd /opt/acrow-stack cp docker-compose.yml '/opt/acrow/backups/pre-update-20261002_151150/' cp .env '/opt/acrow/backups/pre-update-20261002_151150/' [ -d nginx-override ] && cp -r nginx-override '/opt/acrow/backups/pre-update-20261002_151150/' || true echo ' -> compose, env, nginx-override copied' -> compose, env, nginx-override copied [2026-10-02T15:11:50Z] OK: Config backed up [2026-10-02T15:11:50Z] INFO: Dumping database... [2026-10-02T15:11:50Z] REMOTE: 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_151150/acrowdb.dump' docker exec acrow-postgres rm -f /tmp/acrow.dump SZ=$(stat -c%s '/opt/acrow/backups/pre-update-20261002_151150/acrowdb.dump') echo " -> DB dump: $SZ bytes" -> DB dump: 621189 bytes [2026-10-02T15:11:51Z] OK: Database backed up [2026-10-02T15:11:51Z] INFO: Recording image IDs... [2026-10-02T15:11:51Z] REMOTE: set -e docker inspect acrow-api --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_151150/api-image-id.txt' docker inspect acrow-ui-container --format '{{.Image}}' > '/opt/acrow/backups/pre-update-20261002_151150/ui-image-id.txt' echo ' -> image IDs recorded' -> image IDs recorded [2026-10-02T15:11:51Z] OK: Image IDs recorded [2026-10-02T15:11:51Z] OK: Phase 2 complete [2026-10-02T15:11:51Z] === Phase 3: Pull === [2026-10-02T15:11:51Z] INFO: Pulling latest images (1–2 min)... [2026-10-02T15:11:51Z] REMOTE: cd /opt/acrow-stack && docker compose pull acrow-api acrow-ui Image ghcr.io/trinnova-eg/acrow-abp--ui:latest Pulling Image ghcr.io/trinnova-eg/acrow-abp--api:latest Pulling Image ghcr.io/trinnova-eg/acrow-abp--api:latest Pulled Image ghcr.io/trinnova-eg/acrow-abp--ui:latest Pulled [2026-10-02T15:11:54Z] OK: New API: sha256:e0f7638a26f8… [2026-10-02T15:11:54Z] OK: New UI: sha256:0836c3845697… [2026-10-02T15:11:54Z] OK: Phase 3 complete [2026-10-02T15:11:54Z] === Phase 4: Recreate === [2026-10-02T15:11:54Z] INFO: Recreating acrow-api and acrow-ui... [2026-10-02T15:11:54Z] REMOTE: cd /opt/acrow-stack && docker compose up -d --force-recreate acrow-api acrow-ui Container acrow-postgres Running Container acrow-api Recreate Container acrow-api Recreated Container acrow-ui-container Recreate Container acrow-ui-container Recreated Container acrow-postgres Waiting Container acrow-postgres Healthy Container acrow-api Starting Container acrow-api Started Container acrow-ui-container Starting Container acrow-ui-container Started [2026-10-02T15:11:58Z] INFO: Waiting for API health (up to 90s)... curl: (56) Recv failure: Connection reset by peer curl: (56) Recv failure: Connection reset by peer [2026-10-02T15:12:03Z] OK: API responding (200) after 6s [2026-10-02T15:12:03Z] REMOTE: cd /opt/acrow-stack && docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS acrow-api ghcr.io/trinnova-eg/acrow-abp--api:latest "dotnet Opex.Server.…" acrow-api 9 seconds ago Up 6 seconds (health: starting) 0.0.0.0:5001->5000/tcp, [::]:5001->5000/tcp acrow-postgres postgres:16 "docker-entrypoint.s…" acrow-postgres 27 minutes ago Up 27 minutes (healthy) 127.0.0.1:5433->5432/tcp acrow-ui-container ghcr.io/trinnova-eg/acrow-abp--ui:latest "/docker-entrypoint.…" acrow-ui 8 seconds ago Up 5 seconds 0.0.0.0:8181->80/tcp, [::]:8181->80/tcp [2026-10-02T15:12:04Z] OK: Phase 4 complete [2026-10-02T15:12:04Z] === Phase 5: Verify === [2026-10-02T15:12:05Z] OK: API 5001/health -> 200 [2026-10-02T15:12:05Z] OK: UI 8081/ -> 200 [2026-10-02T15:12:05Z] OK: PROXY 8081/api/login -> 400 [2026-10-02T15:12:05Z] OK: JWT__ValidIssuer = acrow-api [2026-10-02T15:12:05Z] OK: Phase 5 complete [2026-10-02T15:12:05Z] session ended: 20261002_151146_localhost_