Compare commits
1 Commits
system-v5
...
4f92b6e369
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f92b6e369 |
@@ -9,12 +9,12 @@
|
|||||||
|
|
||||||
### 1. Constructores, no gestores
|
### 1. Constructores, no gestores
|
||||||
|
|
||||||
ARCHITECT (con Claude) es un **constructor de arquitecturas**, no un gestor permanente.
|
Las instancias Claude son **constructores de arquitecturas**, no gestores permanentes.
|
||||||
|
|
||||||
- ARCHITECT diseña y construye la arquitectura de cada servidor
|
- Cada instancia diseña y construye la arquitectura de un servidor
|
||||||
- Cuando la arquitectura esté madura, el servidor será **clonable e independiente**
|
- Cuando la arquitectura esté madura, el servidor será **clonable e independiente**
|
||||||
- DECK y CORP funcionan sin conexión a ARCHITECT ni a Claude
|
- Funcionará sin necesidad de su instancia Claude
|
||||||
- Son sistemas diseñados para **usar** servicios de IA (APIs externas, RunPod), no para contenerla
|
- Solo los servidores del propietario original mantienen conexión con Claude
|
||||||
|
|
||||||
### 2. Descentralización operativa
|
### 2. Descentralización operativa
|
||||||
|
|
||||||
@@ -101,18 +101,5 @@ VALORES → OBJETIVOS → IMÁGENES IA → CURACIÓN HUMANA → LO QUE SOBREVIVE
|
|||||||
Cada instancia:
|
Cada instancia:
|
||||||
- Tiene su propio bucket de almacenamiento
|
- Tiene su propio bucket de almacenamiento
|
||||||
- Puede renombrar sus agentes
|
- Puede renombrar sus agentes
|
||||||
- **Opera de forma autónoma** (no depende de ARCHITECT en runtime)
|
- Opera de forma descentralizada
|
||||||
- Tiene su propio gestor de secretos (Vaultwarden)
|
- Se conecta a servicios compartidos (GRACE, THE FACTORY, CIRCLE)
|
||||||
- Hace sus propios backups a R2
|
|
||||||
|
|
||||||
### Servicios Compartidos (Opcionales)
|
|
||||||
|
|
||||||
Las instancias **pueden** conectarse a servicios GPU compartidos:
|
|
||||||
|
|
||||||
| Servicio | Función | Requerido |
|
|
||||||
|----------|---------|-----------|
|
|
||||||
| GRACE | Extracción IA | Opcional |
|
|
||||||
| THE FACTORY | Generación | Opcional |
|
|
||||||
| CIRCLE | Colaboración | Opcional |
|
|
||||||
|
|
||||||
> **Nota:** Si los servicios compartidos no están disponibles, la instancia sigue operando. Solo las funciones de IA estarán limitadas.
|
|
||||||
|
|||||||
@@ -27,39 +27,26 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Componentes (Microservicios)
|
## Agentes
|
||||||
|
|
||||||
> **Nota:** Los componentes tienen nombres de persona pero son **microservicios backend**, no IA.
|
### Ingesta
|
||||||
> Están diseñados para consumir servicios de IA externos (APIs, RunPod), no para contenerla.
|
| Agente | Servidor | Puerto | Descripción |
|
||||||
|
|--------|----------|--------|-------------|
|
||||||
|
| **CLARA** | DECK | 5051 | Recoge información personal, log inmutable |
|
||||||
|
| **MARGARET** | CORP | 5051 | Recoge información corporativa, log inmutable |
|
||||||
|
|
||||||
### secretaria (ingesta)
|
### Orquestación
|
||||||
| Componente | Servidor | Puerto | Descripción |
|
| Agente | Servidor | Puerto | Descripción |
|
||||||
|------------|----------|--------|-------------|
|
|--------|----------|--------|-------------|
|
||||||
| **secretaria (CLARA)** | DECK | 5051 | Recoge información personal, log inmutable |
|
| **ALFRED** | DECK | 5052 | Flujos predefinidos personales |
|
||||||
| **secretaria (MARGARET)** | CORP | 5051 | Recoge información corporativa, log inmutable |
|
| **JARED** | CORP | 5052 | Flujos predefinidos corporativos (más potente) |
|
||||||
|
|
||||||
### administrativo (enriquecimiento)
|
### Procesamiento
|
||||||
| Componente | Servidor | Puerto | Descripción |
|
| Agente | Servidor | Puerto | Descripción |
|
||||||
|------------|----------|--------|-------------|
|
|--------|----------|--------|-------------|
|
||||||
| **administrativo (MASON)** | DECK | 5053 | Enriquecimiento, ventana flotante 24h |
|
| **MASON** | CORP | 5053 | Enriquecimiento, ventana flotante 24h |
|
||||||
| **administrativo (MASON)** | CORP | 5053 | Enriquecimiento, ventana flotante 24h |
|
| **FELDMAN** | CORP | 5054 | Consolidación final, blockchain, inmutable |
|
||||||
|
| **SENTINEL** | - | - | Auditoría LIGHT (5min) + DEEP (1h) [planificado] |
|
||||||
### contable (consolidación)
|
|
||||||
| Componente | Servidor | Puerto | Descripción |
|
|
||||||
|------------|----------|--------|-------------|
|
|
||||||
| **contable (FELDMAN)** | DECK | 5054 | Consolidación final, blockchain, inmutable |
|
|
||||||
| **contable (FELDMAN)** | CORP | 5054 | Consolidación final, blockchain, inmutable |
|
|
||||||
|
|
||||||
### producción (orquestación)
|
|
||||||
| Componente | Servidor | Puerto | Descripción |
|
|
||||||
|------------|----------|--------|-------------|
|
|
||||||
| **producción (ALFRED)** | DECK | 5052 | Flujos predefinidos, orden de ejecución |
|
|
||||||
| **producción (JARED)** | CORP | 5052 | Flujos predefinidos, orden de ejecución |
|
|
||||||
|
|
||||||
### auditoría (planificado)
|
|
||||||
| Componente | Servidor | Puerto | Descripción |
|
|
||||||
|------------|----------|--------|-------------|
|
|
||||||
| **SENTINEL** | - | - | Auditoría LIGHT (5min) + DEEP (1h) |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -5,48 +5,35 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Principio Fundamental
|
|
||||||
|
|
||||||
> **ARCHITECT es el constructor. DECK y CORP son instancias autónomas.**
|
|
||||||
|
|
||||||
- **ARCHITECT**: Construye, despliega, coordina. NO es dependencia runtime.
|
|
||||||
- **DECK/CORP**: Operan independientemente. Funcionan si ARCHITECT está caído.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Diagrama General
|
## Diagrama General
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||||||
│ CAPA DE CONSTRUCCIÓN (solo deploy/dev) │
|
│ CAPA DE COORDINACIÓN │
|
||||||
│ │
|
│ │
|
||||||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
│ │ ARCHITECT (69.62.126.110) │ │
|
│ │ ARCHITECT (69.62.126.110) │ │
|
||||||
│ │ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌───────────────┐ │ │
|
│ │ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌───────────────┐ │ │
|
||||||
│ │ │PostgreSQL│ │ Gitea │ │Orchestrator│ │ Infisical │ │ │
|
│ │ │PostgreSQL│ │ Gitea │ │Orchestrator│ │ Infisical │ │ │
|
||||||
│ │ │ contexto │ │ 25 repos │ │ v5 │ │ (master) │ │ │
|
│ │ │ central │ │ 25 repos │ │ v5 │ │ Secrets │ │ │
|
||||||
│ │ └──────────┘ └──────────┘ └────────────┘ └───────────────┘ │ │
|
│ │ └──────────┘ └──────────┘ └────────────┘ └───────────────┘ │ │
|
||||||
│ └─────────────────────────────────────────────────────────────────┘ │
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
||||||
│ │
|
|
||||||
│ Rol: Construcción, deployment, gestión central de secretos │
|
|
||||||
│ NO es dependencia runtime de las instancias │
|
|
||||||
└─────────────────────────────────────────────────────────────────────────┘
|
└─────────────────────────────────────────────────────────────────────────┘
|
||||||
│ │ │
|
│ │ │
|
||||||
deploy │ │ │ deploy
|
|
||||||
▼ ▼ ▼
|
▼ ▼ ▼
|
||||||
┌─────────────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||||||
│ CAPA DE INSTANCIAS (autónomas) │
|
│ CAPA DE SERVIDORES │
|
||||||
│ │
|
│ │
|
||||||
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
|
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
|
||||||
│ │ DECK │ │ CORP │ │ HST │ │
|
│ │ DECK │ │ CORP │ │ HST │ │
|
||||||
│ │ 72.62.1.113 │ │ 92.112.181.188 │ │ 72.62.2.84 │ │
|
│ │ 72.62.1.113 │ │ 92.112.181.188 │ │ 72.62.2.84 │ │
|
||||||
│ │ │ │ │ │ │ │
|
│ │ │ │ │ │ │ │
|
||||||
│ │ secretaria :5051 │ │ secretaria :5051 │ │ 973 tags │ │
|
│ │ CLARA :5051 │ │ MARGARET :5051 │ │ 973 tags │ │
|
||||||
│ │ producción :5052 │ │ producción :5052 │ │ API pública │ │
|
│ │ ALFRED :5052 │ │ JARED :5052 │ │ API pública │ │
|
||||||
│ │ admin.vo :5053 │ │ admin.vo :5053 │ │ Directus :8055 │ │
|
│ │ │ │ MASON :5053 │ │ Directus :8055 │ │
|
||||||
│ │ contable :5054 │ │ contable :5054 │ │ │ │
|
│ │ Mailcow │ │ FELDMAN :5054 │ │ │ │
|
||||||
│ │ │ │ │ │ │ │
|
│ │ Vaultwarden │ │ │ │ │ │
|
||||||
│ │ Vaultwarden │ │ Odoo │ │ │ │
|
│ │ Directus │ │ Odoo │ │ │ │
|
||||||
│ └───────────────────┘ │ Nextcloud │ └───────────────────┘ │
|
│ └───────────────────┘ │ Nextcloud │ └───────────────────┘ │
|
||||||
│ │ └───────────────────┘ │ │
|
│ │ └───────────────────┘ │ │
|
||||||
│ │ │ │ │
|
│ │ │ │ │
|
||||||
@@ -91,40 +78,40 @@ PACKET (App móvil)
|
|||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ secretaria (CLARA / MARGARET) │
|
│ CLARA (DECK) / MARGARET (CORP) │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Validar h_instancia │
|
│ 1. Validar h_instancia │
|
||||||
│ 2. Calcular h_entrada (SHA-256) │
|
│ 2. Calcular h_entrada (SHA-256) │
|
||||||
│ 3. Subir archivos a R2 │
|
│ 3. Subir archivos a R2 │
|
||||||
│ 4. Insertar en log │
|
│ 4. Insertar en clara_log/margaret_log │
|
||||||
│ 5. Estado: 'recibido' (inmutable) │
|
│ 5. Estado: 'recibido' (inmutable) │
|
||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ producción (ALFRED / JARED) │
|
│ ALFRED (DECK) / JARED (CORP) │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Definir orden de ejecución │
|
│ 1. Aplicar flujos predefinidos │
|
||||||
│ 2. Aplicar flujos predefinidos │
|
│ 2. Ejecutar reglas automáticas │
|
||||||
│ 3. Enviar a administrativo │
|
│ 3. Enviar a MASON si requiere mejora │
|
||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ administrativo (MASON) │
|
│ MASON │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Recibir de producción │
|
│ 1. Recibir de ALFRED/JARED │
|
||||||
│ 2. Ventana flotante 24h │
|
│ 2. Ventana flotante 24h │
|
||||||
│ 3. Usuario enriquece datos │
|
│ 3. Usuario enriquece datos │
|
||||||
│ 4. [Futuro] GRACE extrae información │
|
│ 4. [Futuro] GRACE extrae información │
|
||||||
│ 5. Enviar a contable cuando listo │
|
│ 5. Enviar a FELDMAN cuando listo │
|
||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ contable (FELDMAN) │
|
│ FELDMAN │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Recibir en cola │
|
│ 1. Recibir en feldman_cola │
|
||||||
│ 2. Validar reglas (M-001, M-002, M-003)│
|
│ 2. Validar reglas (M-001, M-002, M-003)│
|
||||||
│ 3. Crear milestone o bloque │
|
│ 3. Crear milestone o bloque │
|
||||||
│ 4. Calcular hash_contenido │
|
│ 4. Calcular hash_contenido │
|
||||||
@@ -134,7 +121,7 @@ PACKET (App móvil)
|
|||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ auditoría (SENTINEL) [planificado] │
|
│ SENTINEL (planificado) │
|
||||||
│ │
|
│ │
|
||||||
│ LIGHT: Cada 5 min, reglas automáticas │
|
│ LIGHT: Cada 5 min, reglas automáticas │
|
||||||
│ DEEP: Cada 1 hora, muestreo con LLM │
|
│ DEEP: Cada 1 hora, muestreo con LLM │
|
||||||
|
|||||||
@@ -1,22 +1,19 @@
|
|||||||
# secretaria (CLARA / MARGARET)
|
# CLARA y MARGARET - Agentes de Ingesta
|
||||||
|
|
||||||
**Componente:** Ingesta
|
|
||||||
**Versión:** 5.0
|
**Versión:** 5.0
|
||||||
**Fecha:** 2024-12-24
|
**Fecha:** 2024-12-24
|
||||||
|
|
||||||
> **Nota:** Este es un microservicio backend, no IA.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Resumen
|
## Resumen
|
||||||
|
|
||||||
| Aspecto | secretaria (CLARA) | secretaria (MARGARET) |
|
| Aspecto | CLARA | MARGARET |
|
||||||
|---------|-------|----------|
|
|---------|-------|----------|
|
||||||
| Servidor | DECK (72.62.1.113) | CORP (92.112.181.188) |
|
| Servidor | DECK (72.62.1.113) | CORP (92.112.181.188) |
|
||||||
| Puerto | 5051 | 5051 |
|
| Puerto | 5051 | 5051 |
|
||||||
| Dominio | Personal | Empresarial |
|
| Dominio | Personal | Empresarial |
|
||||||
| Base de datos | tzzr | corp |
|
| Base de datos | tzzr | corp |
|
||||||
| Tabla log | secretaria_log | secretaria_log |
|
| Tabla log | clara_log | margaret_log |
|
||||||
| Bucket R2 | deck | corp |
|
| Bucket R2 | deck | corp |
|
||||||
| Estado | Operativo | Operativo |
|
| Estado | Operativo | Operativo |
|
||||||
|
|
||||||
@@ -33,7 +30,7 @@ PACKET (App móvil)
|
|||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ secretaria (CLARA / MARGARET) │
|
│ CLARA (Personal) / MARGARET (Corp) │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Validar h_instancia │
|
│ 1. Validar h_instancia │
|
||||||
│ 2. Calcular h_entrada (SHA-256) │
|
│ 2. Calcular h_entrada (SHA-256) │
|
||||||
@@ -44,7 +41,7 @@ PACKET (App móvil)
|
|||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
producción (ALFRED / JARED)
|
ALFRED / JARED (siguiente paso)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,37 +1,34 @@
|
|||||||
# contable (FELDMAN)
|
# FELDMAN - Agente de Consolidación
|
||||||
|
|
||||||
**Componente:** Consolidación
|
|
||||||
**Versión:** 5.0
|
**Versión:** 5.0
|
||||||
**Fecha:** 2024-12-24
|
**Fecha:** 2024-12-24
|
||||||
|
|
||||||
> **Nota:** Este es un microservicio backend, no IA.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Resumen
|
## Resumen
|
||||||
|
|
||||||
| Aspecto | Valor |
|
| Aspecto | Valor |
|
||||||
|---------|-------|
|
|---------|-------|
|
||||||
| Servidor | DECK y CORP |
|
| Servidor | CORP (92.112.181.188) |
|
||||||
| Puerto | 5054 |
|
| Puerto | 5054 |
|
||||||
| Base de datos | tzzr / corp |
|
| Base de datos | corp |
|
||||||
| Tablas | contable_cola, contable_bloques, contable_validaciones |
|
| Tablas | feldman_cola, feldman_bloques, feldman_validaciones |
|
||||||
| Estado | Operativo |
|
| Estado | Operativo |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Rol en el Sistema
|
## Rol en el Sistema
|
||||||
|
|
||||||
contable (FELDMAN) es el "notario" del sistema: valida y consolida datos en bloques inmutables.
|
FELDMAN es el "notario" del sistema: valida y consolida datos en bloques inmutables.
|
||||||
|
|
||||||
```
|
```
|
||||||
administrativo (MASON)
|
MASON (enriquecido)
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ contable (FELDMAN) │
|
│ FELDMAN │
|
||||||
│ │
|
│ │
|
||||||
│ 1. Recibir en cola │
|
│ 1. Recibir en feldman_cola │
|
||||||
│ 2. Validar reglas (M-001, M-002, M-003)│
|
│ 2. Validar reglas (M-001, M-002, M-003)│
|
||||||
│ 3. Calcular hash_contenido │
|
│ 3. Calcular hash_contenido │
|
||||||
│ 4. Encadenar (hash_previo) │
|
│ 4. Encadenar (hash_previo) │
|
||||||
@@ -45,7 +42,7 @@ administrativo (MASON)
|
|||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
auditoría (SENTINEL) [planificado]
|
SENTINEL (auditoría futura)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -5,266 +5,205 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Arquitectura de Secretos
|
## Estado Actual: Triple Gestión
|
||||||
|
|
||||||
### Principio Fundamental
|
**PROBLEMA CRÍTICO:** Actualmente existen tres fuentes de secretos sin sincronización.
|
||||||
|
|
||||||
> **DECK y CORP son instancias autónomas. Deben operar independientemente de ARCHITECT.**
|
|
||||||
|
|
||||||
ARCHITECT es el constructor/coordinador. DECK y CORP son instancias diseñadas para trabajar solas.
|
|
||||||
|
|
||||||
### Modelo de Gestión
|
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
│ ARCHITECT │
|
│ FUENTES DE SECRETOS │
|
||||||
│ (Constructor) │
|
|
||||||
│ │
|
│ │
|
||||||
│ ┌──────────────┐ │
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||||
│ │ Infisical │ ← Gestión centralizada │
|
│ │ Infisical │ │ creds_* │ │ .env │ │
|
||||||
│ │ :8082 │ Single source of truth │
|
│ │ (central) │ │ (PostgreSQL)│ │ (archivos) │ │
|
||||||
│ └──────┬───────┘ │
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||||
│ │ │
|
│ │ │ │ │
|
||||||
└───────────────────────────┼─────────────────────────────────────┘
|
│ ▼ ▼ ▼ │
|
||||||
│
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||||
sync/push │ (en deploy o periódico)
|
│ │ ❌ SIN SINCRONIZACIÓN - Riesgo de inconsistencia │ │
|
||||||
│
|
│ └─────────────────────────────────────────────────────────┘ │
|
||||||
┌────────────────┴────────────────┐
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
▼ ▼
|
|
||||||
┌──────────────────────┐ ┌──────────────────────┐
|
|
||||||
│ DECK │ │ CORP │
|
|
||||||
│ (Instancia) │ │ (Instancia) │
|
|
||||||
│ │ │ │
|
|
||||||
│ ┌──────────────┐ │ │ ┌──────────────┐ │
|
|
||||||
│ │ Vaultwarden │ │ │ │ Vaultwarden │ │
|
|
||||||
│ │ :8085 │ │ │ │ :8081 │ │
|
|
||||||
│ └──────┬───────┘ │ │ └──────┬───────┘ │
|
|
||||||
│ │ │ │ │ │
|
|
||||||
│ ▼ │ │ ▼ │
|
|
||||||
│ CLARA, ALFRED │ │ MARGARET, JARED │
|
|
||||||
│ leen de aquí │ │ MASON, FELDMAN │
|
|
||||||
│ │ │ leen de aquí │
|
|
||||||
└──────────────────────┘ └──────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
### Gestores por Servidor
|
|
||||||
|
|
||||||
| Servidor | Gestor | Puerto | Rol |
|
|
||||||
|----------|--------|--------|-----|
|
|
||||||
| ARCHITECT | Infisical | 8082 | Gestión central, source of truth |
|
|
||||||
| DECK | Vaultwarden | 8085 | Operación autónoma DECK |
|
|
||||||
| CORP | Vaultwarden | 8081 | Operación autónoma CORP |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Flujo de Secretos
|
|
||||||
|
|
||||||
### Administración (en ARCHITECT)
|
|
||||||
|
|
||||||
```
|
|
||||||
Administrador
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌─────────────┐
|
|
||||||
│ Infisical │ ← Crear/modificar/rotar secretos aquí
|
|
||||||
│ (central) │
|
|
||||||
└─────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sincronización (ARCHITECT → Instancias)
|
|
||||||
|
|
||||||
```
|
|
||||||
Infisical (ARCHITECT)
|
|
||||||
│
|
|
||||||
│ Script de sync / deploy
|
|
||||||
│
|
|
||||||
├────────────────┬────────────────┐
|
|
||||||
▼ ▼ ▼
|
|
||||||
Vaultwarden Vaultwarden (otras instancias
|
|
||||||
DECK CORP futuras)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Operación (en cada instancia)
|
|
||||||
|
|
||||||
```
|
|
||||||
┌──────────────────────────────────────┐
|
|
||||||
│ DECK │
|
|
||||||
│ │
|
|
||||||
│ CLARA ──────► Vaultwarden ◄─────── ALFRED
|
|
||||||
│ :8085 │
|
|
||||||
│ │
|
|
||||||
│ ✅ No depende de ARCHITECT │
|
|
||||||
│ ✅ Opera si ARCHITECT está caído │
|
|
||||||
└──────────────────────────────────────┘
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Estado Actual: Problema
|
## Fuente 1: Infisical
|
||||||
|
|
||||||
**Triple gestión sin sincronización:**
|
**URL:** http://localhost:8082 (ARCHITECT)
|
||||||
|
**Estado:** Operativo
|
||||||
|
|
||||||
| Fuente | Ubicación | Estado |
|
### Configuración
|
||||||
|--------|-----------|--------|
|
|
||||||
| Infisical | ARCHITECT :8082 | Parcialmente usado |
|
|
||||||
| creds_* | PostgreSQL ARCHITECT | Activo |
|
|
||||||
| .env | /opt/*/.env en cada servidor | Activo, **permisos 644** |
|
|
||||||
|
|
||||||
**Problemas:**
|
|
||||||
- Secretos duplicados en múltiples lugares
|
|
||||||
- Sin sincronización entre fuentes
|
|
||||||
- .env legibles por todos (644)
|
|
||||||
- Vaultwarden de DECK/CORP no integrados
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Decisión D-001: Arquitectura de Secretos
|
|
||||||
|
|
||||||
### Objetivo
|
|
||||||
|
|
||||||
1. **Infisical** (ARCHITECT): Única fuente de verdad para administración
|
|
||||||
2. **Vaultwarden** (DECK/CORP): Gestores locales para operación autónoma
|
|
||||||
3. **Sync**: Mecanismo de propagación Infisical → Vaultwarden
|
|
||||||
|
|
||||||
### División de Responsabilidades
|
|
||||||
|
|
||||||
| Tipo de Secreto | Gestión en | Operación en |
|
|
||||||
|-----------------|------------|--------------|
|
|
||||||
| API keys externas (OpenAI, etc.) | Infisical | Vaultwarden local |
|
|
||||||
| R2 credentials | Infisical | Vaultwarden local |
|
|
||||||
| Gitea tokens | Infisical | Vaultwarden local |
|
|
||||||
| DB password DECK | Infisical | Vaultwarden DECK |
|
|
||||||
| DB password CORP | Infisical | Vaultwarden CORP |
|
|
||||||
| Tokens internos DECK | Infisical | Vaultwarden DECK |
|
|
||||||
| Tokens internos CORP | Infisical | Vaultwarden CORP |
|
|
||||||
|
|
||||||
### Flujo de Trabajo
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Admin modifica secreto en Infisical (ARCHITECT)
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
2. Script de sync detecta cambio
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
3. Propaga a Vaultwarden de DECK y/o CORP
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
4. Servicios locales usan Vaultwarden local
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
5. ARCHITECT puede caer → DECK/CORP siguen operando
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Plan de Migración
|
|
||||||
|
|
||||||
### Fase 1: Inventario
|
|
||||||
|
|
||||||
```
|
|
||||||
├── Catalogar todos los secretos en creds_*
|
|
||||||
├── Catalogar todos los secretos en .env
|
|
||||||
├── Identificar duplicados/inconsistencias
|
|
||||||
└── Mapear qué secretos necesita cada instancia
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fase 2: Centralización en Infisical
|
|
||||||
|
|
||||||
```
|
|
||||||
├── Migrar todos los secretos a Infisical
|
|
||||||
├── Organizar por instancia (DECK, CORP)
|
|
||||||
├── Establecer políticas de acceso
|
|
||||||
└── Documentar cada secreto
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fase 3: Configurar Vaultwarden en Instancias
|
|
||||||
|
|
||||||
```
|
|
||||||
├── DECK: Configurar Vaultwarden :8085
|
|
||||||
│ ├── Crear organización "DECK"
|
|
||||||
│ ├── Importar secretos de DECK desde Infisical
|
|
||||||
│ └── Configurar acceso para servicios
|
|
||||||
│
|
|
||||||
└── CORP: Configurar Vaultwarden :8081
|
|
||||||
├── Crear organización "CORP"
|
|
||||||
├── Importar secretos de CORP desde Infisical
|
|
||||||
└── Configurar acceso para servicios
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fase 4: Implementar Sync
|
|
||||||
|
|
||||||
```
|
|
||||||
├── Crear script de sincronización
|
|
||||||
│ └── infisical export → vaultwarden import
|
|
||||||
├── Configurar trigger (manual, cron, o webhook)
|
|
||||||
└── Probar sync en ambas direcciones
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fase 5: Actualizar Servicios
|
|
||||||
|
|
||||||
```
|
|
||||||
├── CLARA: Leer de Vaultwarden DECK
|
|
||||||
├── ALFRED: Leer de Vaultwarden DECK
|
|
||||||
├── MARGARET: Leer de Vaultwarden CORP
|
|
||||||
├── JARED: Leer de Vaultwarden CORP
|
|
||||||
├── MASON: Leer de Vaultwarden CORP
|
|
||||||
└── FELDMAN: Leer de Vaultwarden CORP
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fase 6: Deprecación
|
|
||||||
|
|
||||||
```
|
|
||||||
├── Eliminar archivos .env
|
|
||||||
├── Marcar creds_* como "solo referencia histórica"
|
|
||||||
└── Documentar proceso completo
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Implementación
|
|
||||||
|
|
||||||
### Lectura desde Vaultwarden (Python)
|
|
||||||
|
|
||||||
```python
|
|
||||||
import requests
|
|
||||||
|
|
||||||
VAULTWARDEN_URL = "http://localhost:8085" # DECK
|
|
||||||
# VAULTWARDEN_URL = "http://localhost:8081" # CORP
|
|
||||||
|
|
||||||
def get_secret(name: str) -> str:
|
|
||||||
"""Obtiene secreto de Vaultwarden local."""
|
|
||||||
# Implementar según API de Vaultwarden/Bitwarden
|
|
||||||
pass
|
|
||||||
```
|
|
||||||
|
|
||||||
### Script de Sync (Infisical → Vaultwarden)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
# Acceso a Infisical
|
||||||
# /opt/scripts/sync_secrets.sh
|
infisical login
|
||||||
|
infisical secrets --env=prod
|
||||||
|
```
|
||||||
|
|
||||||
# Exportar desde Infisical
|
### Ventajas
|
||||||
infisical export --env=deck --format=json > /tmp/deck_secrets.json
|
- Centralizado
|
||||||
infisical export --env=corp --format=json > /tmp/corp_secrets.json
|
- Versionado
|
||||||
|
- Auditable
|
||||||
|
- SDK para múltiples lenguajes
|
||||||
|
|
||||||
# Importar a Vaultwarden DECK
|
### Uso Actual
|
||||||
ssh deck 'bw import --format json /tmp/deck_secrets.json'
|
- Parcial - no todos los servicios lo usan
|
||||||
|
|
||||||
# Importar a Vaultwarden CORP
|
---
|
||||||
ssh corp 'bw import --format json /tmp/corp_secrets.json'
|
|
||||||
|
|
||||||
# Cleanup
|
## Fuente 2: Tablas creds_* (PostgreSQL)
|
||||||
rm /tmp/*_secrets.json
|
|
||||||
|
**Base de datos:** architect
|
||||||
|
**Estado:** Activo
|
||||||
|
|
||||||
|
### Tablas
|
||||||
|
|
||||||
|
| Tabla | Contenido |
|
||||||
|
|-------|-----------|
|
||||||
|
| creds_ia | APIs de IA (OpenAI, Anthropic, etc.) |
|
||||||
|
| creds_runpod | API keys de RunPod |
|
||||||
|
| creds_r2 | Credenciales Cloudflare R2 |
|
||||||
|
| creds_gitea | Tokens Gitea |
|
||||||
|
| creds_mail | Credenciales SMTP |
|
||||||
|
| creds_apis | APIs externas varias |
|
||||||
|
|
||||||
|
### Schema Típico
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE creds_ia (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
servicio VARCHAR(50) NOT NULL,
|
||||||
|
api_key TEXT NOT NULL,
|
||||||
|
descripcion TEXT,
|
||||||
|
activo BOOLEAN DEFAULT true,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Acceso
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- Consultar credenciales
|
||||||
|
sudo -u postgres psql -d architect -c "SELECT servicio, descripcion FROM creds_ia;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fuente 3: Archivos .env
|
||||||
|
|
||||||
|
**Ubicaciones:**
|
||||||
|
- /opt/clara/.env
|
||||||
|
- /opt/alfred/.env
|
||||||
|
- /opt/margaret/.env
|
||||||
|
- /opt/mason/.env
|
||||||
|
- /opt/feldman/.env
|
||||||
|
|
||||||
|
### ALERTA CRÍTICA
|
||||||
|
|
||||||
|
```
|
||||||
|
Permisos actuales: 644 (legibles por todos)
|
||||||
|
Permisos correctos: 600 (solo propietario)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Contenido Típico
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ejemplo .env
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_NAME=corp
|
||||||
|
DB_USER=margaret
|
||||||
|
DB_PASSWORD=secreto_aqui # ⚠️ Expuesto si 644
|
||||||
|
|
||||||
|
R2_ACCESS_KEY=access_key_aqui
|
||||||
|
R2_SECRET_KEY=secret_key_aqui # ⚠️ Expuesto si 644
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Decisión D-001: Migración a Infisical
|
||||||
|
|
||||||
|
### Objetivo
|
||||||
|
Infisical como **única fuente de verdad** para todos los secretos.
|
||||||
|
|
||||||
|
### Plan de Migración
|
||||||
|
|
||||||
|
```
|
||||||
|
Fase 1: Inventario
|
||||||
|
├── Catalogar todos los secretos en creds_*
|
||||||
|
├── Catalogar todos los secretos en .env
|
||||||
|
└── Identificar duplicados/inconsistencias
|
||||||
|
|
||||||
|
Fase 2: Centralización
|
||||||
|
├── Migrar todos los secretos a Infisical
|
||||||
|
├── Organizar por proyecto/ambiente
|
||||||
|
└── Establecer políticas de acceso
|
||||||
|
|
||||||
|
Fase 3: Actualización de Servicios
|
||||||
|
├── CLARA: Usar Infisical SDK
|
||||||
|
├── MARGARET: Usar Infisical SDK
|
||||||
|
├── MASON: Usar Infisical SDK
|
||||||
|
├── FELDMAN: Usar Infisical SDK
|
||||||
|
└── ALFRED/JARED: Usar Infisical SDK
|
||||||
|
|
||||||
|
Fase 4: Deprecación
|
||||||
|
├── Eliminar archivos .env
|
||||||
|
├── Marcar creds_* como "solo referencia"
|
||||||
|
└── Documentar proceso de rotación
|
||||||
|
```
|
||||||
|
|
||||||
|
### Implementación con SDK
|
||||||
|
|
||||||
|
```python
|
||||||
|
from infisical_client import InfisicalClient
|
||||||
|
|
||||||
|
client = InfisicalClient(
|
||||||
|
host="http://localhost:8082",
|
||||||
|
token=INFISICAL_TOKEN
|
||||||
|
)
|
||||||
|
|
||||||
|
# Obtener secreto
|
||||||
|
db_password = client.get_secret(
|
||||||
|
secret_name="DB_PASSWORD",
|
||||||
|
project_id="tzzr",
|
||||||
|
environment="production"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rotación de Secretos
|
||||||
|
|
||||||
|
### Política Propuesta
|
||||||
|
|
||||||
|
| Tipo | Frecuencia | Responsable |
|
||||||
|
|------|------------|-------------|
|
||||||
|
| API Keys externas | 90 días | Orchestrator |
|
||||||
|
| Contraseñas DB | 180 días | DBA |
|
||||||
|
| SSH Keys | 365 días | SysAdmin |
|
||||||
|
| Tokens Gitea | 180 días | DevOps |
|
||||||
|
|
||||||
|
### Proceso de Rotación
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Generar nuevo secreto
|
||||||
|
2. Actualizar en Infisical
|
||||||
|
3. Desplegar servicios afectados
|
||||||
|
4. Verificar funcionamiento
|
||||||
|
5. Revocar secreto anterior
|
||||||
|
6. Documentar en changelog
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Mitigación Inmediata
|
## Mitigación Inmediata
|
||||||
|
|
||||||
### Paso 1: Permisos .env (URGENTE)
|
### Paso 1: Permisos .env
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Ejecutar en todos los servidores
|
||||||
|
|
||||||
# DECK
|
# DECK
|
||||||
ssh -i ~/.ssh/tzzr root@72.62.1.113 'chmod 600 /opt/clara/.env /opt/alfred/.env'
|
ssh -i ~/.ssh/tzzr root@72.62.1.113 'chmod 600 /opt/clara/.env /opt/alfred/.env'
|
||||||
|
|
||||||
@@ -272,73 +211,82 @@ ssh -i ~/.ssh/tzzr root@72.62.1.113 'chmod 600 /opt/clara/.env /opt/alfred/.env'
|
|||||||
ssh -i ~/.ssh/tzzr root@92.112.181.188 'chmod 600 /opt/margaret/.env /opt/mason/.env /opt/feldman/.env'
|
ssh -i ~/.ssh/tzzr root@92.112.181.188 'chmod 600 /opt/margaret/.env /opt/mason/.env /opt/feldman/.env'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Paso 2: Verificar Vaultwarden
|
### Paso 2: Auditoría
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# DECK
|
# Verificar permisos
|
||||||
curl -s http://72.62.1.113:8085/api/health
|
ls -la /opt/*/.env
|
||||||
|
|
||||||
# CORP
|
# Buscar secretos expuestos
|
||||||
curl -s http://92.112.181.188:8081/api/health
|
grep -r "password\|secret\|key" /opt/*/ 2>/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Rotación de Secretos
|
## Inventario de Secretos
|
||||||
|
|
||||||
### Política
|
### APIs de IA
|
||||||
|
|
||||||
| Tipo | Frecuencia | Responsable |
|
| Servicio | Ubicación Actual | Notas |
|
||||||
|------|------------|-------------|
|
|----------|------------------|-------|
|
||||||
| API Keys externas | 90 días | Admin vía Infisical |
|
| OpenAI | creds_ia | GPT-4 |
|
||||||
| Contraseñas DB | 180 días | Admin vía Infisical |
|
| Anthropic | creds_ia | Claude |
|
||||||
| SSH Keys | 365 días | Admin vía Infisical |
|
| Replicate | creds_ia | Modelos varios |
|
||||||
| Tokens Gitea | 180 días | Admin vía Infisical |
|
| RunPod | creds_runpod | GRACE, PENNY, FACTORY |
|
||||||
|
|
||||||
### Proceso
|
### Infraestructura
|
||||||
|
|
||||||
```
|
| Servicio | Ubicación Actual | Notas |
|
||||||
1. Rotar en Infisical (ARCHITECT)
|
|----------|------------------|-------|
|
||||||
2. Ejecutar sync a Vaultwarden (DECK/CORP)
|
| PostgreSQL | .env + creds_* | Múltiples usuarios |
|
||||||
3. Verificar servicios operando
|
| R2/Cloudflare | .env + creds_r2 | Access + Secret key |
|
||||||
4. Documentar rotación
|
| Gitea | .env + creds_gitea | Read + Write tokens |
|
||||||
```
|
| SMTP | creds_mail | Mailcow |
|
||||||
|
|
||||||
|
### Servicios Externos
|
||||||
|
|
||||||
|
| Servicio | Ubicación Actual | Notas |
|
||||||
|
|----------|------------------|-------|
|
||||||
|
| Stripe | creds_apis | (si aplica) |
|
||||||
|
| Twilio | creds_apis | (si aplica) |
|
||||||
|
| AWS | creds_apis | (si aplica) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Verificación
|
## Verificación de Seguridad
|
||||||
|
|
||||||
### Checklist
|
### Checklist Diario
|
||||||
|
|
||||||
- [ ] Infisical operativo en ARCHITECT
|
- [ ] Permisos .env son 600
|
||||||
- [ ] Vaultwarden operativo en DECK (:8085)
|
- [ ] No hay secretos en logs
|
||||||
- [ ] Vaultwarden operativo en CORP (:8081)
|
- [ ] No hay secretos en commits git
|
||||||
- [ ] Sync configurado y probado
|
- [ ] Infisical accesible
|
||||||
- [ ] Servicios leen de Vaultwarden local
|
|
||||||
- [ ] .env eliminados o con permisos 600
|
|
||||||
- [ ] DECK opera si ARCHITECT cae
|
|
||||||
- [ ] CORP opera si ARCHITECT cae
|
|
||||||
|
|
||||||
### Test de Autonomía
|
### Comandos de Verificación
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Detener ARCHITECT (simulado)
|
# Verificar permisos
|
||||||
# 2. Verificar DECK sigue operando
|
find /opt -name ".env" -exec ls -la {} \;
|
||||||
curl http://72.62.1.113:5051/health # CLARA
|
|
||||||
|
|
||||||
# 3. Verificar CORP sigue operando
|
# Buscar secretos en git history
|
||||||
curl http://92.112.181.188:5051/health # MARGARET
|
git log -p | grep -i "password\|secret\|key\|token"
|
||||||
|
|
||||||
|
# Verificar Infisical
|
||||||
|
curl -s http://localhost:8082/api/v1/health
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Resumen
|
## Buenas Prácticas
|
||||||
|
|
||||||
| Componente | Rol |
|
### DO (Hacer)
|
||||||
|------------|-----|
|
- Usar Infisical para todos los secretos nuevos
|
||||||
| **Infisical (ARCHITECT)** | Gestión centralizada, source of truth |
|
- Rotar secretos según política
|
||||||
| **Vaultwarden (DECK)** | Operación autónoma instancia personal |
|
- Auditar accesos regularmente
|
||||||
| **Vaultwarden (CORP)** | Operación autónoma instancia empresarial |
|
- Cifrar secretos en reposo
|
||||||
| **Sync** | Propagación de cambios |
|
|
||||||
|
|
||||||
**Principio clave:** Las instancias (DECK, CORP) nunca dependen de ARCHITECT en runtime.
|
### DON'T (No Hacer)
|
||||||
|
- Hardcodear secretos en código
|
||||||
|
- Commitear .env a repositorios
|
||||||
|
- Compartir secretos por chat/email
|
||||||
|
- Usar el mismo secreto en múltiples servicios
|
||||||
|
|||||||
@@ -5,15 +5,6 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Principio Fundamental
|
|
||||||
|
|
||||||
> **Cada instancia es responsable de su propio backup.**
|
|
||||||
|
|
||||||
DECK y CORP son instancias autónomas. No dependen de ARCHITECT para hacer backups.
|
|
||||||
Cada servidor ejecuta su script de backup localmente y sube directamente a R2.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Estado Actual
|
## Estado Actual
|
||||||
|
|
||||||
### Backups Existentes
|
### Backups Existentes
|
||||||
@@ -29,144 +20,94 @@ Cada servidor ejecuta su script de backup localmente y sube directamente a R2.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Arquitectura de Backups
|
## Plan de Backup Propuesto
|
||||||
|
|
||||||
|
### PostgreSQL - Backup Diario
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
# /opt/scripts/backup_postgres.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DATE=$(date +%F)
|
||||||
|
BACKUP_DIR="/tmp/pg_backup"
|
||||||
|
|
||||||
|
# Cargar credenciales R2
|
||||||
|
source /home/orchestrator/orchestrator/.env
|
||||||
|
export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY"
|
||||||
|
export AWS_SECRET_ACCESS_KEY="$R2_SECRET_KEY"
|
||||||
|
|
||||||
|
R2_ENDPOINT="https://7dedae6030f5554d99d37e98a5232996.r2.cloudflarestorage.com"
|
||||||
|
|
||||||
|
mkdir -p $BACKUP_DIR
|
||||||
|
|
||||||
|
# Backup ARCHITECT
|
||||||
|
echo "Backing up ARCHITECT..."
|
||||||
|
sudo -u postgres pg_dump architect | gzip > $BACKUP_DIR/architect_$DATE.sql.gz
|
||||||
|
aws s3 cp $BACKUP_DIR/architect_$DATE.sql.gz s3://architect/backups/postgres/ \
|
||||||
|
--endpoint-url $R2_ENDPOINT
|
||||||
|
|
||||||
|
# Cleanup local
|
||||||
|
rm -rf $BACKUP_DIR
|
||||||
|
|
||||||
|
echo "Backup completado: $DATE"
|
||||||
```
|
```
|
||||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
||||||
│ ARCHITECT │ │ DECK │ │ CORP │
|
### Cron Configuration
|
||||||
│ │ │ │ │ │
|
|
||||||
│ backup.sh ───┼────►│ backup.sh ───┼────►│ backup.sh ───┼────► R2
|
```bash
|
||||||
│ (local) │ │ (local) │ │ (local) │
|
# /etc/cron.d/tzzr-backup
|
||||||
└──────────────┘ └──────────────┘ └──────────────┘
|
# Backup diario a las 3:00 AM
|
||||||
│ │
|
0 3 * * * orchestrator /opt/scripts/backup_postgres.sh >> /var/log/tzzr-backup.log 2>&1
|
||||||
▼ ▼
|
|
||||||
Sin dependencia Sin dependencia
|
|
||||||
de ARCHITECT de ARCHITECT
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Backup por Servidor (LOCAL)
|
## Backup por Servidor
|
||||||
|
|
||||||
### ARCHITECT (69.62.126.110)
|
### ARCHITECT (69.62.126.110)
|
||||||
|
|
||||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
# Base de datos: architect
|
||||||
# Ejecutar EN ARCHITECT - backup local
|
sudo -u postgres pg_dump architect | gzip > architect_$(date +%F).sql.gz
|
||||||
|
|
||||||
set -e
|
|
||||||
DATE=$(date +%F)
|
|
||||||
|
|
||||||
# Credenciales R2 (desde Vaultwarden local o .env)
|
|
||||||
source /opt/architect/.env
|
|
||||||
export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$R2_SECRET_KEY"
|
|
||||||
R2_ENDPOINT="https://7dedae6030f5554d99d37e98a5232996.r2.cloudflarestorage.com"
|
|
||||||
|
|
||||||
# Backup local
|
|
||||||
sudo -u postgres pg_dump architect | gzip > /tmp/architect_$DATE.sql.gz
|
|
||||||
|
|
||||||
# Subir a R2
|
# Subir a R2
|
||||||
aws s3 cp /tmp/architect_$DATE.sql.gz s3://architect/backups/postgres/ \
|
aws s3 cp architect_$(date +%F).sql.gz s3://architect/backups/postgres/ \
|
||||||
--endpoint-url $R2_ENDPOINT
|
--endpoint-url $R2_ENDPOINT
|
||||||
|
|
||||||
rm /tmp/architect_$DATE.sql.gz
|
|
||||||
echo "ARCHITECT backup completado: $DATE"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### DECK (72.62.1.113)
|
### DECK (72.62.1.113)
|
||||||
|
|
||||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
# Base de datos: tzzr
|
||||||
# Ejecutar EN DECK - backup local (NO depende de ARCHITECT)
|
ssh deck 'sudo -u postgres pg_dump tzzr | gzip' > deck_tzzr_$(date +%F).sql.gz
|
||||||
|
|
||||||
set -e
|
# Subir a R2
|
||||||
DATE=$(date +%F)
|
aws s3 cp deck_tzzr_$(date +%F).sql.gz s3://architect/backups/deck/ \
|
||||||
|
|
||||||
# Credenciales R2 (desde Vaultwarden DECK)
|
|
||||||
source /opt/deck/.env
|
|
||||||
export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$R2_SECRET_KEY"
|
|
||||||
R2_ENDPOINT="https://7dedae6030f5554d99d37e98a5232996.r2.cloudflarestorage.com"
|
|
||||||
|
|
||||||
# Backup local
|
|
||||||
sudo -u postgres pg_dump tzzr | gzip > /tmp/deck_tzzr_$DATE.sql.gz
|
|
||||||
|
|
||||||
# Subir a R2 (bucket propio de DECK)
|
|
||||||
aws s3 cp /tmp/deck_tzzr_$DATE.sql.gz s3://deck/backups/postgres/ \
|
|
||||||
--endpoint-url $R2_ENDPOINT
|
--endpoint-url $R2_ENDPOINT
|
||||||
|
|
||||||
rm /tmp/deck_tzzr_$DATE.sql.gz
|
|
||||||
echo "DECK backup completado: $DATE"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### CORP (92.112.181.188)
|
### CORP (92.112.181.188)
|
||||||
|
|
||||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
# Base de datos: corp
|
||||||
# Ejecutar EN CORP - backup local (NO depende de ARCHITECT)
|
ssh corp 'sudo -u postgres pg_dump corp | gzip' > corp_$(date +%F).sql.gz
|
||||||
|
|
||||||
set -e
|
# Subir a R2
|
||||||
DATE=$(date +%F)
|
aws s3 cp corp_$(date +%F).sql.gz s3://architect/backups/corp/ \
|
||||||
|
|
||||||
# Credenciales R2 (desde Vaultwarden CORP)
|
|
||||||
source /opt/corp/.env
|
|
||||||
export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$R2_SECRET_KEY"
|
|
||||||
R2_ENDPOINT="https://7dedae6030f5554d99d37e98a5232996.r2.cloudflarestorage.com"
|
|
||||||
|
|
||||||
# Backup local
|
|
||||||
sudo -u postgres pg_dump corp | gzip > /tmp/corp_$DATE.sql.gz
|
|
||||||
|
|
||||||
# Subir a R2 (bucket propio de CORP)
|
|
||||||
aws s3 cp /tmp/corp_$DATE.sql.gz s3://corp/backups/postgres/ \
|
|
||||||
--endpoint-url $R2_ENDPOINT
|
--endpoint-url $R2_ENDPOINT
|
||||||
|
|
||||||
rm /tmp/corp_$DATE.sql.gz
|
|
||||||
echo "CORP backup completado: $DATE"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### HST (72.62.2.84)
|
### HST (72.62.2.84)
|
||||||
|
|
||||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
# Base de datos: hst_images
|
||||||
# Ejecutar EN HST - backup local
|
ssh hst 'sudo -u postgres pg_dump hst_images | gzip' > hst_$(date +%F).sql.gz
|
||||||
|
|
||||||
set -e
|
# Subir a R2
|
||||||
DATE=$(date +%F)
|
aws s3 cp hst_$(date +%F).sql.gz s3://architect/backups/hst/ \
|
||||||
|
|
||||||
source /opt/hst/.env
|
|
||||||
export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$R2_SECRET_KEY"
|
|
||||||
R2_ENDPOINT="https://7dedae6030f5554d99d37e98a5232996.r2.cloudflarestorage.com"
|
|
||||||
|
|
||||||
sudo -u postgres pg_dump hst_images | gzip > /tmp/hst_$DATE.sql.gz
|
|
||||||
|
|
||||||
aws s3 cp /tmp/hst_$DATE.sql.gz s3://hst/backups/postgres/ \
|
|
||||||
--endpoint-url $R2_ENDPOINT
|
--endpoint-url $R2_ENDPOINT
|
||||||
|
|
||||||
rm /tmp/hst_$DATE.sql.gz
|
|
||||||
echo "HST backup completado: $DATE"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Cron en Cada Servidor
|
|
||||||
|
|
||||||
Cada instancia configura su propio cron:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# /etc/cron.d/tzzr-backup (en cada servidor)
|
|
||||||
# Backup diario a las 3:00 AM
|
|
||||||
0 3 * * * root /opt/scripts/backup_postgres.sh >> /var/log/backup.log 2>&1
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -216,30 +157,26 @@ docker exec gitea rm /tmp/gitea-dump-$DATE.zip
|
|||||||
|
|
||||||
## Estructura de Backups en R2
|
## Estructura de Backups en R2
|
||||||
|
|
||||||
Cada instancia usa su propio bucket:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
s3://architect/backups/
|
s3://architect/backups/
|
||||||
├── postgres/
|
├── postgres/
|
||||||
│ └── architect_2024-12-24.sql.gz
|
│ ├── architect_2024-12-24.sql.gz
|
||||||
|
│ ├── architect_2024-12-23.sql.gz
|
||||||
|
│ └── ...
|
||||||
|
├── deck/
|
||||||
|
│ ├── deck_tzzr_2024-12-24.sql.gz
|
||||||
|
│ └── ...
|
||||||
|
├── corp/
|
||||||
|
│ ├── corp_2024-12-24.sql.gz
|
||||||
|
│ └── ...
|
||||||
|
├── hst/
|
||||||
|
│ ├── hst_2024-12-24.sql.gz
|
||||||
|
│ └── ...
|
||||||
└── gitea/
|
└── gitea/
|
||||||
└── gitea-dump-2024-12-24_0300.zip
|
├── gitea-dump-2024-12-24_0300.zip
|
||||||
|
└── ...
|
||||||
s3://deck/backups/
|
|
||||||
└── postgres/
|
|
||||||
└── deck_tzzr_2024-12-24.sql.gz
|
|
||||||
|
|
||||||
s3://corp/backups/
|
|
||||||
└── postgres/
|
|
||||||
└── corp_2024-12-24.sql.gz
|
|
||||||
|
|
||||||
s3://hst/backups/
|
|
||||||
└── postgres/
|
|
||||||
└── hst_2024-12-24.sql.gz
|
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Nota:** Cada instancia es dueña de sus backups. No hay dependencia cruzada.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Retención de Backups
|
## Retención de Backups
|
||||||
|
|||||||
44
README.md
44
README.md
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
## Qué es TZZR
|
## Qué es TZZR
|
||||||
|
|
||||||
TZZR es un sistema de arquitecturas personales y empresariales. ARCHITECT (con Claude) construye y despliega servidores autónomos (DECK, CORP) que operan independientemente. Los componentes internos (CLARA, ALFRED, FELDMAN, etc.) son microservicios backend, no IA. Las instancias están diseñadas para **consumir** servicios de IA externos (APIs, RunPod), no para contenerla.
|
TZZR es un sistema de construcción de arquitecturas personales y empresariales mediante instancias Claude. Los agentes IA actúan como constructores que diseñan y edifican servidores clonables e independientes.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -25,10 +25,9 @@ TZZR es un sistema de arquitecturas personales y empresariales. ARCHITECT (con C
|
|||||||
│ DECK │ │ CORP │ │ HST │
|
│ DECK │ │ CORP │ │ HST │
|
||||||
│ 72.62.1.113 │ │ 92.112.181.188 │ │ 72.62.2.84 │
|
│ 72.62.1.113 │ │ 92.112.181.188 │ │ 72.62.2.84 │
|
||||||
│ │ │ │ │ │
|
│ │ │ │ │ │
|
||||||
│ secretaria │ │ secretaria │ │ 973 tags │
|
│ CLARA, ALFRED │ │ MARGARET, JARED │ │ 973 tags │
|
||||||
│ administrativo │ │ administrativo │ │ API pública │
|
│ Servidor │ │ MASON, FELDMAN │ │ API pública │
|
||||||
│ contable │ │ contable │ │ │
|
│ Personal │ │ Empresarial │ │ │
|
||||||
│ producción │ │ producción │ │ │
|
|
||||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
│ │
|
│ │
|
||||||
└────────┬───────────┘
|
└────────┬───────────┘
|
||||||
@@ -46,15 +45,15 @@ TZZR es un sistema de arquitecturas personales y empresariales. ARCHITECT (con C
|
|||||||
```
|
```
|
||||||
PACKET (móvil)
|
PACKET (móvil)
|
||||||
↓
|
↓
|
||||||
secretaria (CLARA/MARGARET) ← Ingesta inmutable
|
CLARA (DECK) / MARGARET (CORP) ← Ingesta inmutable
|
||||||
↓
|
↓
|
||||||
producción (ALFRED/JARED) ← Orden de ejecución
|
ALFRED / JARED ← Flujos predefinidos
|
||||||
↓
|
↓
|
||||||
administrativo (MASON) ← Enriquecimiento (24h)
|
MASON ← Enriquecimiento (24h)
|
||||||
↓
|
↓
|
||||||
contable (FELDMAN) ← Consolidación blockchain
|
FELDMAN ← Consolidación blockchain
|
||||||
↓
|
↓
|
||||||
auditoría (SENTINEL) ← Planificado
|
SENTINEL ← Auditoría (planificado)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -96,19 +95,18 @@ auditoría (SENTINEL) ← Planificado
|
|||||||
|
|
||||||
## Estado Actual
|
## Estado Actual
|
||||||
|
|
||||||
| Componente | Nombre | Servidor | Estado |
|
| Componente | Estado | Notas |
|
||||||
|------------|--------|----------|--------|
|
|------------|--------|-------|
|
||||||
| secretaria | CLARA | DECK:5051 | Operativo |
|
| CLARA | Operativo | DECK:5051 |
|
||||||
| secretaria | MARGARET | CORP:5051 | Operativo |
|
| MARGARET | Operativo | CORP:5051 |
|
||||||
| producción | ALFRED | DECK:5052 | Operativo |
|
| ALFRED | Operativo | DECK:5052 |
|
||||||
| producción | JARED | CORP:5052 | Operativo |
|
| JARED | Operativo | CORP:5052 |
|
||||||
| administrativo | MASON | DECK:5053 | Operativo |
|
| MASON | Operativo | CORP:5053 |
|
||||||
| administrativo | MASON | CORP:5053 | Operativo |
|
| FELDMAN | Operativo | CORP:5054 |
|
||||||
| contable | FELDMAN | DECK:5054 | Operativo |
|
| HST | Operativo | 973 tags |
|
||||||
| contable | FELDMAN | CORP:5054 | Operativo |
|
| SENTINEL | Planificado | Sin implementar |
|
||||||
| auditoría | SENTINEL | - | Planificado |
|
| GRACE | Bloqueado | RunPod no inicia |
|
||||||
| GPU | GRACE | RunPod | Bloqueado |
|
| NOTARIO | Planificado | Sin implementar |
|
||||||
| - | HST | 72.62.2.84 | Operativo (973 tags) |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user