Saltar a contenido

PDF-004A Staging Postgres Stack Preflight Plan

Fecha local: 2026-06-19

Estado: PREFLIGHT + PLAN OPERATIVO + CANDIDATES / NOT EXECUTED / NO SECRETS / PDF-004B PENDING GO

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

Fuente de verdad: docs/tenants/alpuntodeventa/business-observer/production/PDF-004A-STAGING-POSTGRES-STACK-PREFLIGHT-PLAN.md

1. Objetivo

Preparar la implementacion completa de un PostgreSQL staging-vps real para Business Observer, separado de openclaw-postgres-sandbox, sin crearlo todavia.

Esta tarea deja plan operativo y archivos candidatos versionados. No crea contenedores, volumenes, redes, DB, roles, schemas ni tablas. No ejecuta SQL, no ejecuta docker compose up, no imprime secretos y no habilita PDF-004B sin un gate separado.

2. Safe point

Control Valor
workspace C:\APV\openclawai
rama observada main
HEAD/origin observado al iniciar ba941b6562de20e8a65c830aef2c6b2fa8573b73
ultimo estado publicado PDF-003F-B BLOCKED / NO-GO por falta de target staging real
decision SAFE POINT PASS / PREFLIGHT READ-ONLY + CANDIDATES ONLY

3. Decision de implementacion

Decision candidata:

text crear un stack PostgreSQL dedicado para Business Observer staging en /opt/stacks/business-observer-staging

Identidad propuesta:

Componente Nombre
service/container openclaw-business-observer-postgres-staging
DB openclaw_business_observer_staging
schema business_observer
owner role logico openclaw_bo_staging_owner
writer role logico openclaw_bo_staging_writer
reader role logico openclaw_bo_staging_reader
reporting role logico openclaw_bo_staging_reporting_ro

El stack propuesto no reemplaza ni reutiliza openclaw-postgres-sandbox.

4. Preflight VPS read-only observado

Comandos remotos ejecutados solo en modo lectura via ssh openclaw-vps. No se inspeccionaron variables de entorno, no se abrio psql, no se ejecuto SQL y no se imprimieron secretos.

Control Observado
hostname srv977009
uptime up 2 weeks, 4 days, 11 hours, 9 minutes
disco / 96G total, 28G usado, 69G libre, 29%
memoria 7.8Gi total, 1.9Gi usada, 5.9Gi disponible
swap 4.0Gi total, 768Ki usada
Docker client/server 29.5.2

Contenedores relevantes observados:

Contenedor Estado Dictamen
openclaw-postgres-sandbox Up 11 days (healthy) existe, pero NO SE USARA COMO STAGING REAL
openclaw-business-observer-postgres-staging ausente sin colision
openclaw-postgrest-sandbox Up 11 days fuera de alcance
observabilidad, OpenClaw, NPM, Portainer, portal activos fuera de alcance, no tocados

Redes Docker observadas:

text bridge host knowledge-portal_default nginx-proxy-manager_default none obs-observability-internal openclaw_openclaw_internal pg-sandbox-internal portainer2_default proxy-network

Volumenes Docker observados:

text obs_alertmanager_data obs_grafana_data obs_prometheus_data obs_thanos_compactor_data obs_thanos_objectstore_data obs_thanos_storegateway_data pg_sandbox_data portainer_data portainer_data_new <dos volumenes anonimos Docker existentes>

Rutas observadas:

Ruta Estado
/opt/stacks/business-observer-staging ABSENT
/opt/stacks/business-observer ABSENT
/opt/stacks/openclaw EXISTS
/opt/stacks/observability EXISTS

Puertos escuchando en host:

text 0.0.0.0:22 0.0.0.0:80 0.0.0.0:81 0.0.0.0:443 127.0.0.1:3000 127.0.0.1:8085 127.0.0.1:65529 127.0.0.53:53 127.0.0.54:53

No se observo publicacion host de 5432 para el sandbox. El candidate de staging conserva la misma politica: sin puerto publicado al host.

5. Colisiones detectadas

Item Propuesto Estado
container openclaw-business-observer-postgres-staging NO EXISTE
volume openclaw_bo_postgres_staging_data NO EXISTE
network openclaw-bo-staging-internal NO EXISTE
stack path /opt/stacks/business-observer-staging NO EXISTE
host port 5432 no publicado sin colision requerida

Dictamen:

text COLISIONES CRITICAS = NO OBSERVADAS SANDBOX EXISTE = SI, PERO QUEDA EXCLUIDO PDF-004B = PENDING GO, NO EJECUTAR TODAVIA

6. Archivos candidatos versionados

Archivo Estado Impacto
infra/business-observer/staging/postgres/docker-compose.business-observer-staging.candidate.yml CANDIDATE / NOT EXECUTED / NO SECRETS define container, imagen, volumen, red interna, healthcheck y secrets file externo
infra/business-observer/staging/postgres/.env.business-observer-staging.example NO SECRETS / TEMPLATE ONLY documenta placeholders y nombres logicos sin credenciales reales

El compose candidate:

  • usa postgres:16.14-alpine;
  • define volumen dedicado openclaw_bo_postgres_staging_data;
  • define red interna dedicada openclaw-bo-staging-internal;
  • no publica puertos al host;
  • deja el bootstrap catalog en postgres durante PDF-004B, para no crear todavia openclaw_business_observer_staging;
  • usa POSTGRES_PASSWORD_FILE apuntando a un secret file fuera de Git;
  • monta ./backups:/backups:ro solo como punto no sensible candidato;
  • incluye healthcheck con pg_isready;
  • usa restart: unless-stopped;
  • queda marcado como CANDIDATE / NOT EXECUTED.

7. Politica de secretos fuera de Git

Secretos reales prohibidos en Git:

  • passwords;
  • connection strings;
  • tokens;
  • roles LOGIN sensibles;
  • contenidos de archivos en /opt/stacks/business-observer-staging/secrets/*;
  • .env.business-observer-staging real del VPS.

El repo solo versiona:

  • nombres logicos;
  • rutas propuestas;
  • templates;
  • candidates sin valores sensibles;
  • criterios de ejecucion y validacion.

8. Backup/restore baseline pendiente

Antes de cualquier PDF-004B con ejecucion real debe quedar cerrado:

  1. crear directorio operativo de backups fuera de Git;
  2. crear o validar secret file fuera de Git;
  3. definir backup previo de la DB staging correcta;
  4. ejecutar backup real solo en tarea autorizada;
  5. ejecutar restore drill real en destino separado;
  6. registrar evidencia PASS/FAIL, tamanio, checksum y duracion.

El runbook candidato vigente sigue siendo PDF-003E. Este PDF-004A no ejecuto pg_dump, pg_restore ni SQL.

9. Observabilidad minima pendiente

Pendiente para PDF-004B o gate posterior:

  • health container visible por Docker;
  • alerta o check de disponibilidad Postgres;
  • backup age;
  • restore drill age;
  • uso de volumen;
  • logs basicos del contenedor;
  • evidencia de que no hay puerto PostgreSQL publicado al host;
  • fingerprint posterior a provisioning.

10. Criterios GO para PDF-004B

PDF-004B puede pasar a GO solo si todo esto queda aprobado en una tarea separada:

  1. confirmar safe point Git limpio;
  2. confirmar ventana de cambio y responsable operativo;
  3. crear secretos fuera de Git en VPS sin imprimirlos;
  4. validar que el compose candidate sigue sin secretos reales;
  5. validar que no existe colision nueva de container, volumen, red o path;
  6. validar que openclaw-postgres-sandbox no sera tocado;
  7. aprobar explicitamente la creacion del stack;
  8. definir evidencia post-provisioning esperada;
  9. mantener PDF-004 DDL bloqueado hasta fingerprint, backup y restore.

11. Criterios NO-GO

Debe seguir NO-GO si ocurre cualquiera de estos puntos:

  • aparece un contenedor, volumen, red o path con naming incompatible;
  • falta secret file fuera de Git;
  • el candidate contiene password, token o connection string real;
  • se requiere publicar 5432 al host sin justificacion aprobada;
  • alguien intenta usar openclaw-postgres-sandbox como staging real;
  • falta responsable operativo o ventana de cambio;
  • falta baseline de backup/restore;
  • no se puede ejecutar observabilidad minima;
  • se propone tocar La Directa, SGC, O4, sync diaria o prod.

12. Rollback/cleanup candidate

Si una tarea futura provisiona el stack y falla antes de contener datos utiles, el cleanup candidato debe tratarse en tarea separada y puede incluir, con autorizacion explicita:

text docker compose down docker volume rm openclaw_bo_postgres_staging_data docker network rm openclaw-bo-staging-internal

Reglas:

  • no ejecutar cleanup desde PDF-004A;
  • no tocar pg_sandbox_data;
  • no tocar openclaw-postgres-sandbox;
  • no borrar backups ni secretos sin orden explicita;
  • si ya existieran datos o backup real, preferir restore/retencion antes que eliminacion.

13. Bloqueos preservados

Siguen bloqueados:

  • PDF-004 DDL;
  • PDF-004B provisioning hasta GO separado;
  • produccion final;
  • sync diaria y scheduler;
  • cualquier carga SGC;
  • runtime O4;
  • La Directa;
  • openclaw-postgres-sandbox;
  • push y deploy portal.

14. Confirmacion de no cambios runtime

Confirmado:

  • no se creo contenedor;
  • no se creo volumen;
  • no se creo red;
  • no se creo DB;
  • no se crearon roles;
  • no se creo schema;
  • no se ejecutaron tablas;
  • no se ejecuto SQL;
  • no se ejecuto docker compose up;
  • no se imprimieron secretos.

15. Conclusion

text PDF-004A PASS AS PREFLIGHT + IMPLEMENTATION PLAN STAGING POSTGRES STACK = CANDIDATE ONLY TARGET PATH = /opt/stacks/business-observer-staging CONTAINER = openclaw-business-observer-postgres-staging VOLUME = openclaw_bo_postgres_staging_data NETWORK = openclaw-bo-staging-internal HOST PORT 5432 = NOT PUBLISHED openclaw-postgres-sandbox = EXISTS / NOT USED AS REAL STAGING COLLISIONS = NONE OBSERVED FOR PROPOSED NAMES SECRETS = OUT OF GIT BACKUP/RESTORE BASELINE = PENDING OBSERVABILITY MINIMA = PENDING PDF-004B = PENDING GO PDF-004 DDL = NO-GO PRODUCTION + DAILY SYNC = BLOCKED