3.8 KiB
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.