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:
| Uso | Base de datos | Detalle |
|---|---|---|
| Huey Task Queue | db 0 | Cola de tareas background |
| Django Cache | db 1 | Cache general, rate limiting, WebAuthn tokens |
| Django Sessions | db 1 | Sesiones de usuario (via cache backend) |
| Django Channels | db 1 | WebSocket message layer |
Configuracion
| Entorno | Imagen | Puerto | Persistencia |
|---|---|---|---|
| Desarrollo | valkey/valkey:7.2 | localhost:6379 | Volumen Docker |
| Produccion | valkey/valkey:7.2-alpine | Interno (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:
| Datos | Tamañ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
| Problema | Causa | Solucion |
|---|---|---|
| Cache miss constante | Valkey reiniciado recientemente | Normal — se re-llena solo |
| Sesiones perdidas | FLUSHDB en db 1 o reinicio | Usuarios deben re-loguearse |
| Huey tasks no se ejecutan | Worker no conecta a db 0 | Verificar container worker: docker logs crearack_worker |
| Memoria alta | Muchas claves acumuladas | Verificar 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
| Entorno | Imagen | Puerto | Credenciales |
|---|---|---|---|
| Desarrollo | postgres:18-alpine | localhost:5432 | crearack_user / dev_password_123 |
| Produccion | postgres:18-alpine | Interno | Variables en Dokploy Environment |
| Parametro | Desarrollo | Produccion |
|---|---|---|
| Database | crearack_pro | crearack_pro |
| User | crearack_user | crearack_user |
| Password | dev_password_123 | Variable POSTGRES_PASSWORD |
| CONN_MAX_AGE | Default | 0 (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
| Problema | Causa | Solucion |
|---|---|---|
OperationalError: could not connect | Container db no esta corriendo | docker start crearack_db |
relation does not exist | Migracion no aplicada | Ejecutar python manage.py migrate |
| Disco lleno | Tablas de logs muy grandes | Limpiar core_systemlog y metrics antiguas |
| Performance lenta | Tablas sin VACUUM | docker 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)