Skip to content
On this page

💾 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

Comandos Más Usados

bash
# === 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)

bash
# 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

RecursoPath/URL
Scripts/root/scripts/
GCP Backupshttps://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:

yaml
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:

bash
# 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) y erp (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

AmbienteDatabaseUsuarioAcceso via
Stagingerp-devdba_devcloud-sql-proxy:5450
Productionerpdba_devcloud-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:

bash
# 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:

bash
#!/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:

bash
# 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:

bash
/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:

  1. Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
  2. Seleccionar el backup deseado
  3. Click en "Restore"
  4. Elegir si restaurar a la misma instancia o crear una nueva

Opción 2: Point-in-time Recovery

  1. Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
  2. Click en "Create clone"
  3. Seleccionar fecha y hora específica
  4. Crear instancia clonada

Restore desde Backup Local (via Proxy)

Para restaurar desde un dump local:

bash
#!/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:

bash
/root/scripts/restore-local.sh /root/backups/backup_staging_20260112.sql.gz staging

Verificación de Backups

GCP Backups (Automáticos):

Backups Locales (Si se usan):

bash
# 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:

bash
# 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:

  1. Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
  2. Seleccionar el backup deseado
  3. Click en "Restore"
  4. Elegir restaurar a la misma instancia

Opción B - Point-in-time recovery:

  1. Ir a GCP Console > Cloud SQL > gunei-erp
  2. Click en "Create clone"
  3. Seleccionar fecha y hora específica
  4. 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

bash
# 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

bash
# ⚠️ 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

bash
# ⚠️ 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

bash
# 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:

bash
# Abrir en browser
https://console.cloud.google.com/sql/instances/gunei-erp/backups

Listar backups locales (si se usan):

bash
ls -lh /root/backups/backup_staging_*.sql.gz
ls -lh /root/backups/backup_production_*.sql.gz

Ver último backup local de cada ambiente:

bash
# 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:

bash
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:

bash
# 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):

bash
gcloud sql backups list --instance=gunei-erp --project=banco-gal

Alertas:

Verificar Conectividad al Proxy

bash
# 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)

bash
# 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

bash
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:

bash
# 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:

bash
# 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:

bash
# 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:

bash
# 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:

bash
# 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:

  1. Ir a: https://console.cloud.google.com/sql/instances/gunei-erp/backups
  2. Ver estado del último backup
  3. 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:

bash
# 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:

bash
# 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)

bash
# 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

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

AmbienteDatabaseUsuarioConexión
Stagingerp-devdba_devcloud-sql-proxy:5450
Productionerpdba_devcloud-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)