CreaRack-SL

Cache y Base de Datos — Valkey + PostgreSQL

Cache y Base de Datos — Valkey + PostgreSQL


Valkey (Cache Redis-compatible)

Que es

Valkey es un fork open-source de Redis. CreaRack Pro lo usa para:

UsoBase de datosDetalle
Huey Task Queuedb 0Cola de tareas background
Django Cachedb 1Cache general, rate limiting, WebAuthn tokens
Django Sessionsdb 1Sesiones de usuario (via cache backend)
Django Channelsdb 1WebSocket message layer

Configuracion

EntornoImagenPuertoPersistencia
Desarrollovalkey/valkey:7.2localhost:6379Volumen Docker
Produccionvalkey/valkey:7.2-alpineInterno (no expuesto)AOF (appendonly yes) + max 512MB LRU

Conectar con redis-cli

# Desarrollo (desde el host)
docker exec -it crearack_cache valkey-cli

# Produccion (desde SSH)
docker exec -it $(docker ps -q --filter name=cache) valkey-cli

Comandos utiles

# Dentro de valkey-cli:

# Ver info general
INFO

# Ver memoria usada
INFO memory

# Estadisticas de claves
DBSIZE

# Ver claves en db 1 (cache/sessions)
SELECT 1
KEYS *

# Ver claves en db 0 (Huey tasks)
SELECT 0
KEYS *

# Limpiar cache (db 1) — invalida sesiones y cache
SELECT 1
FLUSHDB

# Limpiar tareas pendientes (db 0) — elimina tareas en cola
SELECT 0
FLUSHDB

# Ver TTL de una clave
TTL <clave>

# Monitor en tiempo real (todas las operaciones)
MONITOR
# Ctrl+C para salir

Cuanto espacio ocupa

Valkey es muy eficiente en memoria. En un deploy tipico:

DatosTamaño estimado
Sessions (50 usuarios)~500 KB
Cache (rate limits, tokens)~1 MB
Channels (WebSocket)~100 KB
Huey tasks queue~100 KB
Total tipico~2 MB

En produccion hay un limite de 512MB con politica LRU (least recently used).

Troubleshooting

ProblemaCausaSolucion
Cache miss constanteValkey reiniciado recientementeNormal — se re-llena solo
Sesiones perdidasFLUSHDB en db 1 o reinicioUsuarios deben re-loguearse
Huey tasks no se ejecutanWorker no conecta a db 0Verificar container worker: docker logs crearack_worker
Memoria altaMuchas claves acumuladasVerificar con INFO memory, aplicar FLUSHDB si necesario

PostgreSQL

Que es

PostgreSQL es la base de datos principal. Almacena todo: usuarios, racks, dispositivos, blueprints, logs, perfiles de dispositivos, etc.

Configuracion

EntornoImagenPuertoCredenciales
Desarrollopostgres:18-alpinelocalhost:5432crearack_user / dev_password_123
Produccionpostgres:18-alpineInternoVariables en Dokploy Environment
ParametroDesarrolloProduccion
Databasecrearack_procrearack_pro
Usercrearack_usercrearack_user
Passworddev_password_123Variable POSTGRES_PASSWORD
CONN_MAX_AGEDefault0 (requerido por Daphne ASGI)

Conectar con psql

# Desarrollo
docker exec -it crearack_db psql -U crearack_user -d crearack_pro

# Produccion (desde SSH)
docker exec -it $(docker ps -q --filter name=db) psql -U crearack_user -d crearack_pro

Consultas utiles

-- Ver tablas
\dt

-- Contar registros por tabla
SELECT schemaname, relname, n_live_tup
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;

-- Usuarios registrados
SELECT id, username, email, role, is_active FROM core_user;

-- Organizaciones
SELECT id, name, is_active, max_racks FROM core_organization;

-- Tamaño de la base de datos
SELECT pg_size_pretty(pg_database_size('crearack_pro'));

-- Tamaño por tabla
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

-- Ultimos logs del sistema
SELECT timestamp, level, category, action
FROM core_systemlog
ORDER BY timestamp DESC LIMIT 20;

Backup

# Desarrollo — backup completo
docker exec crearack_db pg_dump -U crearack_user crearack_pro > backup_$(date +%Y%m%d).sql

# Produccion — backup completo (desde SSH)
docker exec $(docker ps -q --filter name=db) pg_dump -U crearack_user crearack_pro > /home/edu/backup_$(date +%Y%m%d).sql

Restore

# Desarrollo
docker exec -i crearack_db psql -U crearack_user crearack_pro < backup_20260219.sql

# Produccion (desde SSH)
docker exec -i $(docker ps -q --filter name=db) psql -U crearack_user crearack_pro < /home/edu/backup_20260219.sql

Nota: El restore sobreescribe datos existentes. Para un restore limpio, primero borrar y recrear la base de datos.

Restore limpio (drop + create)

# CUIDADO: Esto borra toda la base de datos

# 1. Parar la app
docker stop crearack_web crearack_worker

# 2. Borrar y recrear la DB
docker exec $(docker ps -q --filter name=db) psql -U crearack_user -d postgres -c "DROP DATABASE crearack_pro;"
docker exec $(docker ps -q --filter name=db) psql -U crearack_user -d postgres -c "CREATE DATABASE crearack_pro OWNER crearack_user;"

# 3. Restaurar
docker exec -i $(docker ps -q --filter name=db) psql -U crearack_user crearack_pro < backup.sql

# 4. Reiniciar la app
docker start crearack_web crearack_worker

Backup automatizado (script)

Crear en el servidor /home/edu/backup-crearack.sh:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/home/edu/backups
mkdir -p $BACKUP_DIR

docker exec $(docker ps -q --filter name=db) pg_dump -U crearack_user crearack_pro > $BACKUP_DIR/crearack_$DATE.sql

# Eliminar backups de mas de 7 dias
find $BACKUP_DIR -name "crearack_*.sql" -mtime +7 -delete

echo "Backup completado: crearack_$DATE.sql"
# Hacerlo ejecutable
chmod +x /home/edu/backup-crearack.sh

# Programar backup diario a las 3:00 AM
crontab -e
# Añadir: 0 3 * * * /home/edu/backup-crearack.sh

Migraciones

Las migraciones se ejecutan dentro del contenedor web:

# Desarrollo
docker exec crearack_web python manage.py migrate

# Produccion (desde SSH)
docker exec -it $(docker ps -q --filter name=web) bash
cd /app && python manage.py migrate

Troubleshooting

ProblemaCausaSolucion
OperationalError: could not connectContainer db no esta corriendodocker start crearack_db
relation does not existMigracion no aplicadaEjecutar python manage.py migrate
Disco llenoTablas de logs muy grandesLimpiar core_systemlog y metrics antiguas
Performance lentaTablas sin VACUUMdocker exec crearack_db psql -U crearack_user crearack_pro -c "VACUUM ANALYZE;"

Maintained by: CreaRack Team

Véase también

  • [[crearack-tech—backend—database-architecture]] — arquitectura de base de datos
  • [[crearack-tech—admin—backup-restore]] — backup y restore multi-tenant vía ZIP
  • [[crearack-tech—admin—dokploy-guide]] — guía operativa de Dokploy
  • [[decision—20260315—postgres-18-pgbouncer]] — Postgres 18 + pgbouncer
  • [[decision—20260201—conn-max-age-daphne]] — CONN_MAX_AGE=0 con Daphne ASGI
  • [[crearack-tech—architecture—valkey-persistence]] — persistencia de Valkey (Redis)