💾 Backup System - Gunei ERP (Enterprise Architecture)
Sistema de backups para GCP Cloud SQL con backups automáticos gestionados por GCP, verificación de integridad y soporte multi-ambiente.
Versión 2.3 - GCP Cloud SQL + Multi-Ambiente
📋 Tabla de Contenidos
- Quick Reference
- Descripción General
- Arquitectura de Backups
- Schedule Automático
- Scripts de Backup
- Proceso de Restore
- Gestión por Ambiente
- Políticas de Retención
- Monitoreo de Backups
- Troubleshooting
⚡ Quick Reference
Comandos Más Usados
# === BACKUP (GCP Cloud SQL - Automáticos) ===
# Los backups automáticos son gestionados por GCP Cloud SQL
# Ver en: https://console.cloud.google.com/sql/instances/gunei-erp/backups
# === BACKUP MANUAL (Export via Proxy) ===
# Backup staging (desde backend container)
docker exec gunei-backend-staging pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp-dev | gzip > backup_staging_$(date +%Y%m%d).sql.gz
# Backup production (desde backend container)
docker exec gunei-backend-production pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp | gzip > backup_production_$(date +%Y%m%d).sql.gz
# === RESTORE ===
# Restore staging (via proxy)
gunzip -c backup_staging.sql.gz | docker exec -i gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev
# Restore production (via proxy)
gunzip -c backup_production.sql.gz | docker exec -i gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp
# === VERIFICACIÓN ===
# Ver backups en GCP Console
# https://console.cloud.google.com/sql/instances/gunei-erp/backups
Conexión a GCP Cloud SQL (via Proxy)
# Desde backend containers (via cloud-sql-proxy:5450)
docker exec -it gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev
docker exec -it gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp
# Test de conexión
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT 1;"
Ubicaciones Clave
| Recurso | Path/URL |
|---|---|
| Scripts | /root/scripts/ |
| GCP Backups | https://console.cloud.google.com/sql/instances/gunei-erp/backups |
| Cloud SQL Proxy | /opt/infrastructure/cloud-sql-proxy/ |
| Backups locales (manual) | /root/backups/ |
Timezone
Todos los timestamps de backups usan hora Argentina:
TZ=America/Argentina/Buenos_Aires
Nomenclatura de archivos:
backup_staging_YYYYMMDD_HHMMSS.sql.gz # Hora Argentina
backup_production_YYYYMMDD_HHMMSS.sql.gz # Hora Argentina
Verificación:
# Ver timezone desde backend container
docker exec gunei-backend-staging date
docker exec gunei-backend-production date
# Ver timestamp de backups locales (si se usan)
ls -lh /root/backups/ | head -5
Implicaciones:
- GCP Cloud SQL usa UTC internamente
- Backups manuales locales usan hora Argentina del VPS
- Logs de backup con timestamps en hora local
🎯 Descripción General
Objetivos
- Backups automáticos gestionados por GCP Cloud SQL
- Point-in-time recovery disponible en GCP
- Proceso de restore documentado por ambiente
- Disaster recovery para staging y production
- Backups manuales opcionales via proxy
Características
- GCP Managed: Backups automáticos diarios gestionados por Google Cloud
- Multi-Ambiente: Databases separadas
erp-dev(staging) yerp(production) - Point-in-time recovery: Disponible en GCP Console
- Retención: Configurable en GCP Console
- Alta disponibilidad: Failover automático gestionado por GCP
Arquitectura
GCP Cloud SQL (banco-gal:southamerica-east1:gunei-erp)
├── erp-dev (Staging)
│ └── Backups automáticos GCP
└── erp (Production)
└── Backups automáticos GCP
VPS (Contabo)
└── cloud-sql-proxy (Puerto 5450)
└── Conexión encriptada a GCP Cloud SQL
Backups manuales (opcional):
/root/backups/
├── backup_staging_YYYYMMDD.sql.gz
└── backup_production_YYYYMMDD.sql.gz
🏗️ Arquitectura de Backups
GCP Cloud SQL
GCP Cloud SQL (banco-gal:southamerica-east1:gunei-erp)
├── erp-dev (Staging)
│ ├── Usuario: dba_dev
│ └── Backups: GCP automáticos
└── erp (Production)
├── Usuario: dba_dev
└── Backups: GCP automáticos
Flujo de Backup (GCP Managed)
GCP Cloud SQL (Automático)
↓
Backups diarios automáticos
↓
Almacenamiento en GCP
↓
Retención según configuración GCP
↓
Point-in-time recovery disponible
Flujo de Backup Manual (Opcional via Proxy)
Comando manual o cron
↓
pg_dump via cloud-sql-proxy
↓
Compress (gzip)
↓
Almacenar en /root/backups/
Databases y Usuarios
| Ambiente | Database | Usuario | Acceso via |
|---|---|---|---|
| Staging | erp-dev | dba_dev | cloud-sql-proxy:5450 |
| Production | erp | dba_dev | cloud-sql-proxy:5450 |
⏰ Backups Automáticos (GCP)
GCP Cloud SQL Backups
Los backups automáticos son gestionados completamente por GCP Cloud SQL:
- Frecuencia: Diaria (configurable en GCP Console)
- Retención: Configurable en GCP Console (default: 7 días)
- Point-in-time recovery: Habilitado
- Almacenamiento: GCP managed (no consume espacio VPS)
Configuración en GCP Console
https://console.cloud.google.com/sql/instances/gunei-erp/backups
Opciones disponibles:
- Backup window (hora del backup)
- Retención de backups automáticos
- Point-in-time recovery window
- Backup location (región)
Backups Manuales Opcionales (VPS)
Si necesitás backups locales adicionales en el VPS:
# Opcional: Script para backup manual local
# Cron (si se requiere)
0 2 * * * /root/scripts/backup-local.sh >> /var/log/gunei-backups.log 2>&1
Este script haría dump via proxy y almacenaría en /root/backups/.
🔧 Scripts de Backup
Backup Manual (via Cloud SQL Proxy)
Para backups manuales locales adicionales a los backups automáticos de GCP:
#!/bin/bash
# /root/scripts/backup-local.sh
# Backup manual via Cloud SQL Proxy
BACKUP_DIR="/root/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/gunei-backups.log"
mkdir -p "$BACKUP_DIR"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
backup_environment() {
ENV=$1
if [ "$ENV" = "staging" ]; then
DB_NAME="erp-dev"
CONTAINER="gunei-backend-staging"
elif [ "$ENV" = "production" ]; then
DB_NAME="erp"
CONTAINER="gunei-backend-production"
else
log "[ERROR] Invalid environment: $ENV"
return 1
fi
# Verificar que el container existe
if ! docker ps | grep -q "$CONTAINER"; then
log "[WARNING] Container $CONTAINER not running, skipping $ENV"
return 0
fi
BACKUP_FILE="${BACKUP_DIR}/backup_${ENV}_${TIMESTAMP}.sql.gz"
log "[INFO] Starting backup of $DB_NAME ($ENV) via cloud-sql-proxy"
# Backup via proxy
docker exec "$CONTAINER" pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev "$DB_NAME" | gzip > "$BACKUP_FILE"
if [ $? -ne 0 ]; then
log "[ERROR] Backup failed for $ENV"
return 1
fi
SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
log "[INFO] Backup completed: $ENV ($SIZE)"
return 0
}
# Main
log "[INFO] === Local Backup Started (via Cloud SQL Proxy) ==="
if [ -n "$1" ]; then
backup_environment "$1"
else
backup_environment "staging"
backup_environment "production"
fi
log "[INFO] === Local Backup Completed ==="
Uso:
# Backup de ambos ambientes
/root/scripts/backup-local.sh
# Solo staging
/root/scripts/backup-local.sh staging
# Solo production
/root/scripts/backup-local.sh production
Output:
/root/backups/backup_staging_20260112_020000.sql.gz
/root/backups/backup_production_20260112_020000.sql.gz
Restore desde Backup GCP
Opción 1: Restore desde GCP Console (Recomendado)
Para restaurar desde un backup automático de GCP:
- Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
- Seleccionar el backup deseado
- Click en "Restore"
- Elegir si restaurar a la misma instancia o crear una nueva
Opción 2: Point-in-time Recovery
- Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
- Click en "Create clone"
- Seleccionar fecha y hora específica
- Crear instancia clonada
Restore desde Backup Local (via Proxy)
Para restaurar desde un dump local:
#!/bin/bash
# Restore desde backup local via Cloud SQL Proxy
BACKUP_FILE=$1
ENVIRONMENT=$2
if [ -z "$BACKUP_FILE" ] || [ -z "$ENVIRONMENT" ]; then
echo "Usage: $0 <backup-file> <environment>"
echo "Example: $0 /root/backups/backup_staging_20260112.sql.gz staging"
exit 1
fi
if [ "$ENVIRONMENT" = "staging" ]; then
DB_NAME="erp-dev"
CONTAINER="gunei-backend-staging"
elif [ "$ENVIRONMENT" = "production" ]; then
DB_NAME="erp"
CONTAINER="gunei-backend-production"
else
echo "[ERROR] Invalid environment: $ENVIRONMENT"
exit 1
fi
echo "[INFO] Restoring to $DB_NAME ($ENVIRONMENT) via cloud-sql-proxy"
# Descomprimir y restaurar
gunzip -c "$BACKUP_FILE" | docker exec -i "$CONTAINER" psql -h cloud-sql-proxy -p 5450 -U dba_dev -d "$DB_NAME"
if [ $? -eq 0 ]; then
echo "[INFO] Restore completed successfully"
else
echo "[ERROR] Restore failed"
exit 1
fi
Uso:
/root/scripts/restore-local.sh /root/backups/backup_staging_20260112.sql.gz staging
Verificación de Backups
GCP Backups (Automáticos):
- La verificación es gestionada por GCP
- Ver estado en: https://console.cloud.google.com/sql/instances/gunei-erp/backups
- Alertas configurables en GCP Cloud Monitoring
Backups Locales (Si se usan):
# Verificar integridad de backup local
gunzip -t /root/backups/backup_staging_20260112.sql.gz
echo $? # 0 = OK
# Test de restore en database temporal (requiere crear DB temporal primero)
gunzip -c backup.sql.gz | head -100 # Ver contenido
Limpieza de Backups Locales
Si usás backups locales manuales, limpieza manual:
# Eliminar backups de más de 30 días
find /root/backups -name "*.sql.gz" -mtime +30 -delete
# Ver espacio usado
du -sh /root/backups/
Nota: Los backups automáticos de GCP tienen su propia política de retención configurada en GCP Console.
🔄 Proceso de Restore
Escenario 1: Restore desde GCP Console (Recomendado)
Situación: Necesitamos restaurar a un punto anterior
Opción A - Restore completo:
- Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
- Seleccionar el backup deseado
- Click en "Restore"
- Elegir restaurar a la misma instancia
Opción B - Point-in-time recovery:
- Ir a GCP Console > Cloud SQL > gunei-erp
- Click en "Create clone"
- Seleccionar fecha y hora específica
- Crear instancia clonada para verificar datos antes de migrar
Escenario 2: Restore de Staging desde Backup Local
Situación: Tenemos un dump local y necesitamos restaurar staging
# 1. Verificar backup local disponible
ls -lh /root/backups/backup_staging_*.sql.gz | head -n 5
# 2. Detener backend staging
cd /opt/apps/gunei-erp/backend/staging
docker compose stop backend
# 3. Backup de seguridad de DB actual (via proxy)
docker exec gunei-backend-staging pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp-dev > /tmp/erp-dev-before-restore.sql
# 4. Restore desde backup local (via proxy)
gunzip -c /root/backups/backup_staging_20260112.sql.gz | docker exec -i gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev
# 5. Verificar restore
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT COUNT(*) FROM users;"
# 6. Reiniciar backend staging
docker compose start backend
# 7. Verificar aplicación
curl https://staging-erpback.gunei.xyz/status
docker logs gunei-backend-staging --tail 20
Escenario 3: Restore de Production desde Backup Local (Crítico)
Situación: Disaster recovery usando dump local
# ⚠️ PREFERIR RESTORE DESDE GCP CONSOLE SI ES POSIBLE
# 1. Verificar backup local
ls -lh /root/backups/backup_production_*.sql.gz | head -n 5
# 2. Detener backend production
cd /opt/apps/gunei-erp/backend/production
docker compose stop backend
# 3. Backup de seguridad (via proxy)
docker exec gunei-backend-production pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp > /tmp/erp-before-restore.sql
# 4. Restore (via proxy)
gunzip -c /root/backups/backup_production_20260112.sql.gz | docker exec -i gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp
# 5. Verificar
docker exec gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp -c "SELECT COUNT(*) FROM users;"
# 6. Reiniciar backend production
docker compose start backend
# 7. Verificar aplicación
curl https://erpback.gunei.xyz/status
docker logs gunei-backend-production --tail 20
Escenario 4: Copiar Staging a Production
Situación: Migrar datos de staging a production
# ⚠️ CUIDADO: Esto SOBRESCRIBE production con datos de staging
# 1. Crear backup de production actual (safety)
docker exec gunei-backend-production pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp | gzip > /root/backups/backup_production_before_migration.sql.gz
# 2. Crear dump de staging
docker exec gunei-backend-staging pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp-dev > /tmp/staging_to_prod.sql
# 3. Detener backend production
cd /opt/apps/gunei-erp/backend/production
docker compose stop backend
# 4. Restore staging a production (via proxy)
docker exec -i gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp < /tmp/staging_to_prod.sql
rm /tmp/staging_to_prod.sql
# 5. Verificar
docker exec gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp -c "SELECT COUNT(*) FROM users;"
# 6. Reiniciar backend production
docker compose start backend
Escenario 5: Restore Selectivo (Solo Ciertas Tablas)
Situación: Recuperar solo tabla clientes de un backup
# 1. Descomprimir backup
gunzip -c /root/backups/backup_staging_20260112.sql.gz > /tmp/backup_staging.sql
# 2. Extraer solo tabla clientes
grep -A 1000 "CREATE TABLE clientes" /tmp/backup_staging.sql > /tmp/clientes_only.sql
# 3. Restore solo esa tabla (via proxy)
docker exec -i gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev < /tmp/clientes_only.sql
# 4. Verificar
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT COUNT(*) FROM clientes;"
# 5. Limpiar
rm /tmp/backup_staging.sql /tmp/clientes_only.sql
🌍 Gestión por Ambiente
Estructura de Backups
GCP Cloud SQL (Automáticos - Principal):
GCP Cloud SQL Instance: gunei-erp
├── erp-dev (Staging)
│ └── Backups automáticos gestionados por GCP
└── erp (Production)
└── Backups automáticos gestionados por GCP
Ver en: https://console.cloud.google.com/sql/instances/gunei-erp/backups
VPS Local (Manuales - Opcional):
/root/backups/
├── backup_staging_20260112_020000.sql.gz
├── backup_staging_20260111_020000.sql.gz
├── backup_production_20260112_020000.sql.gz
├── backup_production_20260111_020000.sql.gz
└── ...
Tamaños Típicos por Ambiente
Staging (erp-dev):
- Base de datos: ~150 MB
- Backup comprimido (local): ~40 MB
Production (erp):
- Base de datos: ~200 MB (esperado)
- Backup comprimido (local): ~55 MB
Nota: Los backups automáticos de GCP no consumen espacio en el VPS.
Comandos por Ambiente
Ver backups en GCP:
# Abrir en browser
https://console.cloud.google.com/sql/instances/gunei-erp/backups
Listar backups locales (si se usan):
ls -lh /root/backups/backup_staging_*.sql.gz
ls -lh /root/backups/backup_production_*.sql.gz
Ver último backup local de cada ambiente:
# Staging
ls -t /root/backups/backup_staging_*.sql.gz | head -n 1
# Production
ls -t /root/backups/backup_production_*.sql.gz | head -n 1
Estadísticas de backups locales:
echo "=== Local Backup Statistics ==="
echo "Staging backups: $(ls /root/backups/backup_staging_*.sql.gz 2>/dev/null | wc -l)"
echo "Production backups: $(ls /root/backups/backup_production_*.sql.gz 2>/dev/null | wc -l)"
echo "Total size: $(du -sh /root/backups/ 2>/dev/null | cut -f1)"
📊 Políticas de Retención
GCP Cloud SQL (Backups Automáticos)
La retención de backups automáticos se configura en GCP Console:
https://console.cloud.google.com/sql/instances/gunei-erp/edit
Configuración típica:
- Retención de backups automáticos: 7-30 días (configurable)
- Point-in-time recovery: Últimos 7 días
- Backup window: Configurable según horario de menor carga
Backups Locales (Manuales)
Si se mantienen backups locales en /root/backups/, limpieza manual:
# Eliminar backups de más de 30 días
find /root/backups -name "*.sql.gz" -mtime +30 -delete
# Ver espacio usado
du -sh /root/backups/
Recomendación
- Confiar en GCP para backups automáticos y point-in-time recovery
- Backups locales opcionales solo si se requiere copia adicional fuera de GCP
- No duplicar esfuerzo - GCP ya gestiona retención automáticamente
📈 Monitoreo de Backups
GCP Cloud SQL (Principal)
Ver backups en GCP Console:
https://console.cloud.google.com/sql/instances/gunei-erp/backups
Verificar estado via gcloud CLI (si está instalado):
gcloud sql backups list --instance=gunei-erp --project=banco-gal
Alertas:
- Configurar alertas en GCP Cloud Monitoring para fallos de backup
- https://console.cloud.google.com/monitoring
Verificar Conectividad al Proxy
# Test conexión staging
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT 1;"
# Test conexión production
docker exec gunei-backend-production psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp -c "SELECT 1;"
# Ver logs del proxy
docker logs cloud-sql-proxy --tail 50
Verificar Backups Locales (Si se usan)
# Listar backups locales recientes
ls -lht /root/backups/ | head -n 10
# Ver logs de backups manuales
tail -n 50 /var/log/gunei-backups.log
# Ver errores
grep ERROR /var/log/gunei-backups.log | tail -n 20
Dashboard Simple
echo "=== Gunei ERP - Backup Status ==="
echo ""
echo "GCP Cloud SQL Backups:"
echo " Ver en: https://console.cloud.google.com/sql/instances/gunei-erp/backups"
echo ""
echo "Cloud SQL Proxy Status:"
docker ps --filter name=cloud-sql-proxy --format " Container: {{.Names}} | Status: {{.Status}}"
echo ""
echo "Local Backups (si existen):"
echo " Staging: $(ls /root/backups/backup_staging_*.sql.gz 2>/dev/null | wc -l) archivos"
echo " Production: $(ls /root/backups/backup_production_*.sql.gz 2>/dev/null | wc -l) archivos"
echo " Total size: $(du -sh /root/backups/ 2>/dev/null | cut -f1)"
🚨 Troubleshooting
Cloud SQL Proxy No Conecta
Síntoma: Backend no puede conectar a la base de datos
Diagnóstico:
# Ver estado del proxy
docker ps --filter name=cloud-sql-proxy
# Ver logs del proxy
docker logs cloud-sql-proxy --tail 50
# Test de conexión
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT 1;"
Solución:
# 1. Reiniciar proxy
cd /opt/infrastructure/cloud-sql-proxy
docker compose restart
# 2. Verificar credenciales GCP
ls -la /opt/infrastructure/cloud-sql-proxy/credentials/
# 3. Verificar red Docker
docker network inspect gunei-network
Backup Local Falla (pg_dump)
Síntoma: Error al hacer dump manual via proxy
Diagnóstico:
# Test de conexión
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT 1;"
# Ver logs
tail -n 50 /var/log/gunei-backups.log
Solución:
# Verificar que el proxy está funcionando
docker logs cloud-sql-proxy --tail 20
# Reiniciar si es necesario
docker restart cloud-sql-proxy
# Re-intentar backup
docker exec gunei-backend-staging pg_dump -h cloud-sql-proxy -p 5450 -U dba_dev erp-dev | gzip > /root/backups/backup_staging_$(date +%Y%m%d).sql.gz
Disco Lleno por Backups Locales
Síntoma:
[ERROR] pg_dump failed: No space left on device
Solución:
# Ver uso de disco
du -sh /root/backups/
# Limpiar backups antiguos
find /root/backups -name "*.sql.gz" -mtime +30 -delete
# Re-intentar backup
/root/scripts/backup-local.sh
GCP Backup Automático Falla
Diagnóstico:
- Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
- Ver estado del último backup
- Revisar Cloud Monitoring para alertas
Solución:
- Los backups automáticos de GCP raramente fallan
- Si hay problemas, contactar soporte de GCP o revisar configuración de la instancia
Restore Falla - Permisos
Síntoma: Error de permisos al restaurar
Solución:
# El usuario dba_dev debería tener todos los permisos necesarios
# Si hay problemas, verificar en GCP Console:
# https://console.cloud.google.com/sql/instances/gunei-erp/users
# Test de permisos
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "\dt"
Backup Manual Muy Lento
Síntoma: pg_dump via proxy tarda mucho
Causas posibles:
- Database grande
- Conexión lenta al proxy
- Tráfico concurrente
Solución:
# Ver tamaño de la database
docker exec gunei-backend-staging psql -h cloud-sql-proxy -p 5450 -U dba_dev -d erp-dev -c "SELECT pg_size_pretty(pg_database_size('erp-dev'));"
# Ejecutar en horario de menor carga
# O confiar en backups automáticos de GCP (más eficientes)
🔐 Seguridad de Backups
GCP Cloud SQL
- Backups automáticos encriptados at-rest por GCP
- Acceso controlado via IAM de GCP
- Credenciales del proxy en
/opt/infrastructure/cloud-sql-proxy/credentials/
Backups Locales (Si se usan)
# Directorio de backups locales
chmod 700 /root/backups/
# Backups (solo root puede leer/escribir)
find /root/backups/ -name "*.gz" -exec chmod 600 {} \;
# Credenciales del proxy (restringir acceso)
chmod 600 /opt/infrastructure/cloud-sql-proxy/credentials/*.json
📈 Mejoras Futuras
Corto Plazo
- [ ] Configurar alertas en GCP Cloud Monitoring para backups
- [ ] Script automático de backup local como copia adicional
Mediano Plazo
- [ ] Replicación de backups locales a S3 o GCS
- [ ] Backup de archivos (uploads, certs) del VPS
Largo Plazo
- [ ] Read replica en GCP para alta disponibilidad
- [ ] Automated DR testing
📚 Referencias
GCP Cloud SQL
- Instancia:
banco-gal:southamerica-east1:gunei-erp - Console: https://console.cloud.google.com/sql/instances/gunei-erp
- Backups: https://console.cloud.google.com/sql/instances/gunei-erp/backups
Cloud SQL Proxy
- Contenedor:
cloud-sql-proxy - Puerto: 5450 (interno en red Docker)
- Ubicación:
/opt/infrastructure/cloud-sql-proxy/ - Credenciales:
/opt/infrastructure/cloud-sql-proxy/credentials/
Databases
| Ambiente | Database | Usuario | Conexión |
|---|---|---|---|
| Staging | erp-dev | dba_dev | cloud-sql-proxy:5450 |
| Production | erp | dba_dev | cloud-sql-proxy:5450 |
Scripts Opcionales
/root/scripts/backup-local.sh: Backup manual via proxy/root/backups/: Directorio de backups locales
Última actualización: 29 Enero 2026 Versión: 2.3.0 Responsable: Mikle SLA: RPO 24 horas (GCP automático), RTO 15 minutos
Cambios en v2.3:
- ✅ Migración a GCP Cloud SQL via Cloud SQL Proxy
- ✅ Backups automáticos gestionados por GCP
- ✅ Nueva conexión:
cloud-sql-proxy:5450 - ✅ Databases:
erp-dev(staging),erp(production) - ✅ Usuario único:
dba_dev - ✅ Simplificación de scripts y procesos
Cambios en v2.2:
- ✅ URL de production actualizada (erpback.gunei.xyz)