fix(arch): Enforce instance autonomy principle across docs
Updates to ensure DECK/CORP are documented as autonomous instances: - overview.md: Clarify ARCHITECT is for build/deploy only, not runtime - filosofia.md: Mark shared services (GRACE, etc.) as optional - backup-recovery.md: Each instance does its own local backup to its own R2 bucket Key principle: Instances never depend on ARCHITECT at runtime. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,15 @@
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
|
||||
### Backups Existentes
|
||||
@@ -20,94 +29,144 @@
|
||||
|
||||
---
|
||||
|
||||
## Plan de Backup Propuesto
|
||||
## Arquitectura de Backups
|
||||
|
||||
### 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"
|
||||
```
|
||||
|
||||
### Cron Configuration
|
||||
|
||||
```bash
|
||||
# /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
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ ARCHITECT │ │ DECK │ │ CORP │
|
||||
│ │ │ │ │ │
|
||||
│ backup.sh ───┼────►│ backup.sh ───┼────►│ backup.sh ───┼────► R2
|
||||
│ (local) │ │ (local) │ │ (local) │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
Sin dependencia Sin dependencia
|
||||
de ARCHITECT de ARCHITECT
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Backup por Servidor
|
||||
## Backup por Servidor (LOCAL)
|
||||
|
||||
### ARCHITECT (69.62.126.110)
|
||||
|
||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
||||
|
||||
```bash
|
||||
# Base de datos: architect
|
||||
sudo -u postgres pg_dump architect | gzip > architect_$(date +%F).sql.gz
|
||||
#!/bin/bash
|
||||
# Ejecutar EN ARCHITECT - backup local
|
||||
|
||||
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
|
||||
aws s3 cp architect_$(date +%F).sql.gz s3://architect/backups/postgres/ \
|
||||
aws s3 cp /tmp/architect_$DATE.sql.gz s3://architect/backups/postgres/ \
|
||||
--endpoint-url $R2_ENDPOINT
|
||||
|
||||
rm /tmp/architect_$DATE.sql.gz
|
||||
echo "ARCHITECT backup completado: $DATE"
|
||||
```
|
||||
|
||||
### DECK (72.62.1.113)
|
||||
|
||||
```bash
|
||||
# Base de datos: tzzr
|
||||
ssh deck 'sudo -u postgres pg_dump tzzr | gzip' > deck_tzzr_$(date +%F).sql.gz
|
||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
||||
|
||||
# Subir a R2
|
||||
aws s3 cp deck_tzzr_$(date +%F).sql.gz s3://architect/backups/deck/ \
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Ejecutar EN DECK - backup local (NO depende de ARCHITECT)
|
||||
|
||||
set -e
|
||||
DATE=$(date +%F)
|
||||
|
||||
# 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
|
||||
|
||||
rm /tmp/deck_tzzr_$DATE.sql.gz
|
||||
echo "DECK backup completado: $DATE"
|
||||
```
|
||||
|
||||
### CORP (92.112.181.188)
|
||||
|
||||
```bash
|
||||
# Base de datos: corp
|
||||
ssh corp 'sudo -u postgres pg_dump corp | gzip' > corp_$(date +%F).sql.gz
|
||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
||||
|
||||
# Subir a R2
|
||||
aws s3 cp corp_$(date +%F).sql.gz s3://architect/backups/corp/ \
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Ejecutar EN CORP - backup local (NO depende de ARCHITECT)
|
||||
|
||||
set -e
|
||||
DATE=$(date +%F)
|
||||
|
||||
# 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
|
||||
|
||||
rm /tmp/corp_$DATE.sql.gz
|
||||
echo "CORP backup completado: $DATE"
|
||||
```
|
||||
|
||||
### HST (72.62.2.84)
|
||||
|
||||
```bash
|
||||
# Base de datos: hst_images
|
||||
ssh hst 'sudo -u postgres pg_dump hst_images | gzip' > hst_$(date +%F).sql.gz
|
||||
**Ubicación script:** `/opt/scripts/backup_postgres.sh`
|
||||
|
||||
# Subir a R2
|
||||
aws s3 cp hst_$(date +%F).sql.gz s3://architect/backups/hst/ \
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Ejecutar EN HST - backup local
|
||||
|
||||
set -e
|
||||
DATE=$(date +%F)
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
@@ -157,26 +216,30 @@ docker exec gitea rm /tmp/gitea-dump-$DATE.zip
|
||||
|
||||
## Estructura de Backups en R2
|
||||
|
||||
Cada instancia usa su propio bucket:
|
||||
|
||||
```
|
||||
s3://architect/backups/
|
||||
├── postgres/
|
||||
│ ├── 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
|
||||
│ └── ...
|
||||
│ └── architect_2024-12-24.sql.gz
|
||||
└── 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
|
||||
|
||||
Reference in New Issue
Block a user