Files

3.8 KiB

DH Inspección V2 — Despliegue A1

Estos comandos se ejecutan únicamente en dhv2.korexlabs.com.

1. Verificación previa

cd /var/www/dhv2.korexlabs.com

docker compose ps
docker compose config >/dev/null && echo "Compose actual OK"
curl -fsS http://127.0.0.1:3101/api/v3/health

2. Backup previo

cd /var/www/dhv2.korexlabs.com

PHASEA1_STAMP="$(date +%Y%m%d_%H%M%S)"
PHASEA1_BACKUP_DIR="/var/www/dh-backup/dhv2-pre-phase-a1-${PHASEA1_STAMP}"

mkdir -p "$PHASEA1_BACKUP_DIR"

docker compose exec -T db sh -lc \
  'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc' \
  > "$PHASEA1_BACKUP_DIR/database.dump"

tar -czf "$PHASEA1_BACKUP_DIR/source.tar.gz" \
  --exclude='./api-v3/node_modules' \
  --exclude='./api-v3/dist' \
  --exclude='./web-v2/node_modules' \
  --exclude='./web-v2/dist' \
  .

install -m 600 .env "$PHASEA1_BACKUP_DIR/.env"
cp /etc/nginx/sites-available/dhv2.korexlabs.com \
  "$PHASEA1_BACKUP_DIR/nginx-site.conf"

cd "$PHASEA1_BACKUP_DIR"
sha256sum database.dump source.tar.gz .env nginx-site.conf > SHA256SUMS

Conservar el valor mostrado por:

echo "$PHASEA1_BACKUP_DIR"

3. Reemplazo de archivos

Subir DH_V2_FASE_A1_SOURCE.zip a:

/var/www/dhv2.korexlabs.com

Después:

cd /var/www/dhv2.korexlabs.com
unzip -oq DH_V2_FASE_A1_SOURCE.zip
chmod 600 .env
docker compose config >/dev/null && echo "Compose A1 OK"

4. Build y migraciones

cd /var/www/dhv2.korexlabs.com

docker compose --profile tools build api migrate
docker compose up -d db
docker compose --profile tools run --rm migrate
docker compose --profile tools run --rm migrate npm run migration:show
docker compose up -d --no-deps api

La migración debe informar cinco migraciones aplicadas y luego:

Pending migrations: no

5. Verificación de esquema y seeds

cd /var/www/dhv2.korexlabs.com

docker compose exec -T db sh -lc \
  'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -v ON_ERROR_STOP=1' <<'SQL'
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
  AND table_name IN (
    'users', 'roles', 'permissions', 'user_roles',
    'role_permissions', 'auth_sessions', 'audit_events'
  )
ORDER BY table_name;

SELECT
  (SELECT count(*) FROM roles) AS roles,
  (SELECT count(*) FROM permissions) AS permissions,
  (SELECT count(*) FROM role_permissions) AS role_permissions;

SELECT role.code, array_agg(permission.code ORDER BY permission.code) AS permissions
FROM roles role
LEFT JOIN role_permissions mapping ON mapping.role_id = role.id
LEFT JOIN permissions permission ON permission.id = mapping.permission_id
GROUP BY role.code
ORDER BY role.code;
SQL

Valores iniciales esperados:

roles = 5
permissions = 9
role_permissions = 21

6. Verificación del usuario runtime

cd /var/www/dhv2.korexlabs.com

docker compose exec -T db sh -lc \
  'PGPASSWORD="$APP_DB_PASSWORD" psql -U "$APP_DB_USER" -d "$POSTGRES_DB" -v ON_ERROR_STOP=1 -c "SELECT count(*) FROM roles"'

Este comando debe funcionar sin convertir a dhv2_app en owner o superusuario.

7. Verificación final

cd /var/www/dhv2.korexlabs.com

docker compose ps
docker compose logs --tail=100 api
curl -fsS http://127.0.0.1:3101/api/v3/health
curl -fsS https://dhv2.korexlabs.com/api/v3/health

8. Rollback seguro del código

Si el build o el arranque de la API falla, se puede restaurar el código anterior sin eliminar las tablas nuevas:

cd /var/www/dhv2.korexlabs.com

tar -xzf "$PHASEA1_BACKUP_DIR/source.tar.gz" \
  -C /var/www/dhv2.korexlabs.com

install -m 600 "$PHASEA1_BACKUP_DIR/.env" \
  /var/www/dhv2.korexlabs.com/.env

docker compose build api
docker compose up -d --no-deps api
curl -fsS http://127.0.0.1:3101/api/v3/health

No revertir migraciones ni restaurar la base si ya se crearon usuarios o sesiones. Ese rollback de datos debe decidirse usando el backup previo.