MongoDB, Redis y MariaDB

Por: Artiko
dokploymongodbredismariadb

MongoDB, Redis y MariaDB

Ademas de PostgreSQL y MySQL, Dokploy soporta MongoDB, Redis y MariaDB como servicios de base de datos nativos. Cada uno corre en un contenedor aislado con su propia configuracion.

Crear instancia MongoDB

  1. Create Service > Database > MongoDB
  2. Asignar nombre (ejemplo: logs-mongo)

Configuracion

CampoDescripcion
Database NameBase de datos inicial
Database UserUsuario administrador
Database PasswordContrasena
Docker ImageDefault: mongo:7

Versiones recomendadas:

mongo:6
mongo:7
mongo:8

Conectar desde una aplicacion

La cadena de conexion para MongoDB sigue este formato:

MONGO_URL=mongodb://usuario:contrasena@nombre-contenedor:27017/nombre_db?authSource=admin

El parametro authSource=admin es necesario porque MongoDB autentica contra la base admin por defecto.

Terminal de MongoDB

Accede a la pestana Terminal y ejecuta:

mongosh -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD

Comandos basicos:

// Listar bases de datos
show dbs

// Seleccionar base de datos
use nombre_db

// Listar colecciones
show collections

// Contar documentos en una coleccion
db.nombre_coleccion.countDocuments()

// Ver estadisticas de la base
db.stats()

// Ver tamano de una coleccion
db.nombre_coleccion.stats().storageSize

Crear instancia Redis

Redis se usa principalmente como cache, store de sesiones y broker de colas de mensajes.

  1. Create Service > Database > Redis
  2. Asignar nombre (ejemplo: cache-redis)

Configuracion

Redis tiene una configuracion mas simple que las bases de datos relacionales:

CampoDescripcion
Database PasswordContrasena de acceso (opcional pero recomendado)
Docker ImageDefault: redis:7

No tiene campos de usuario ni nombre de base de datos. Redis usa bases numericas (0-15) por defecto.

Cadena de conexion

# Con contrasena
REDIS_URL=redis://:contrasena@nombre-contenedor:6379/0

# Sin contrasena
REDIS_URL=redis://nombre-contenedor:6379/0

El numero final (/0) indica la base de datos numerica. Usa /1, /2, etc. para separar datos logicamente.

Casos de uso tipicos

Cache de aplicacion:

CACHE_REDIS_URL=redis://:pass@cache-redis:6379/0

Colas de trabajo (BullMQ, Sidekiq, Celery):

QUEUE_REDIS_URL=redis://:pass@cache-redis:6379/1

Sesiones:

SESSION_REDIS_URL=redis://:pass@cache-redis:6379/2

Terminal de Redis

redis-cli -a $REDIS_PASSWORD

Comandos utiles:

# Verificar conexion
PING

# Ver todas las claves
KEYS *

# Ver informacion del servidor
INFO

# Memoria usada
INFO memory

# Numero de claves por base
INFO keyspace

# Limpiar base actual
FLUSHDB

# Limpiar todas las bases
FLUSHALL

Crear instancia MariaDB

MariaDB es un fork de MySQL con compatibilidad directa. La configuracion en Dokploy es practicamente identica a MySQL.

  1. Create Service > Database > MariaDB
  2. Asignar nombre (ejemplo: app-mariadb)

Configuracion

CampoDescripcion
Database NameNombre de la base
Database UserUsuario principal
Database PasswordContrasena
Database Root PasswordContrasena root
Docker ImageDefault: mariadb:11

Versiones disponibles:

mariadb:10.11
mariadb:11
mariadb:11.4

Cadena de conexion

MariaDB usa el mismo protocolo que MySQL:

DATABASE_URL=mysql://usuario:contrasena@nombre-contenedor:3306/nombre_db

Los drivers de MySQL (mysql2, pymysql, go-sql-driver/mysql) funcionan sin cambios con MariaDB.

Usar imagenes Docker custom para bases de datos

Dokploy permite reemplazar la imagen por defecto con cualquier imagen compatible.

PostGIS (PostgreSQL con extensiones geograficas)

En el campo Docker Image de una base PostgreSQL:

postgis/postgis:16-3.4

TimescaleDB (PostgreSQL para series temporales)

timescale/timescaledb:latest-pg16

Redis con modulos (RedisStack)

redis/redis-stack-server:latest

RedisStack incluye RedisJSON, RediSearch y RedisTimeSeries.

Percona Server (MySQL compatible con mejoras de rendimiento)

percona:8.0

Consideraciones al usar imagenes custom

Configurar volumenes persistentes

Dokploy crea volumenes Docker automaticamente para cada base de datos. Los datos sobreviven reinicios y redespliegues.

Ubicacion de datos por motor

MotorPath interno del contenedor
PostgreSQL/var/lib/postgresql/data
MySQL/var/lib/mysql
MongoDB/data/db
Redis/data
MariaDB/var/lib/mysql

Verificar volumenes desde el servidor

Conéctate al VPS por SSH y lista los volumenes:

docker volume ls | grep dokploy

Para ver el tamano de un volumen:

docker system df -v | grep nombre-volumen

Backup manual del volumen

# Detener el contenedor primero
docker stop nombre-contenedor

# Copiar el volumen
docker run --rm -v nombre-volumen:/data -v $(pwd):/backup alpine \
  tar czf /backup/backup-db.tar.gz -C /data .

# Reiniciar el contenedor
docker start nombre-contenedor

Este metodo es alternativo al sistema de backups integrado (capitulo 12).

Limites de recursos por base de datos

Cada base de datos en Dokploy puede tener limites de CPU y memoria independientes.

Configurar desde el panel

En la base de datos, pestana Advanced > seccion Resources:

Memory Limit:       512m
Memory Reservation: 256m
CPU Limit:          1.0
CPU Reservation:    0.25

Recomendaciones por motor

MotorMemoria minimaMemoria recomendada
PostgreSQL128m256m - 1g
MySQL256m512m - 1g
MongoDB256m512m - 2g
Redis64m128m - 512m
MariaDB256m512m - 1g

Configurar maxmemory en Redis

Redis necesita un limite interno ademas del limite de Docker. En la pestana Environment agrega:

REDIS_EXTRA_FLAGS=--maxmemory 256mb --maxmemory-policy allkeys-lru

La politica allkeys-lru elimina las claves menos usadas cuando se alcanza el limite. Otras politicas disponibles:

Verificar uso actual

Desde la terminal del contenedor:

# PostgreSQL
psql -U $POSTGRES_USER -c "SHOW shared_buffers;"

# MySQL / MariaDB
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

# Redis
redis-cli -a $REDIS_PASSWORD INFO memory | grep used_memory_human

# MongoDB
mongosh --eval "db.serverStatus().mem"

Siguiente: Capitulo 12: Backups y Restauracion —>