MongoDB, Redis y MariaDB
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
- Create Service > Database > MongoDB
- Asignar nombre (ejemplo:
logs-mongo)
Configuracion
| Campo | Descripcion |
|---|---|
| Database Name | Base de datos inicial |
| Database User | Usuario administrador |
| Database Password | Contrasena |
| Docker Image | Default: 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.
- Create Service > Database > Redis
- Asignar nombre (ejemplo:
cache-redis)
Configuracion
Redis tiene una configuracion mas simple que las bases de datos relacionales:
| Campo | Descripcion |
|---|---|
| Database Password | Contrasena de acceso (opcional pero recomendado) |
| Docker Image | Default: 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.
- Create Service > Database > MariaDB
- Asignar nombre (ejemplo:
app-mariadb)
Configuracion
| Campo | Descripcion |
|---|---|
| Database Name | Nombre de la base |
| Database User | Usuario principal |
| Database Password | Contrasena |
| Database Root Password | Contrasena root |
| Docker Image | Default: 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
- Verifica que la imagen respete las mismas variables de entorno (
POSTGRES_USER,MYSQL_ROOT_PASSWORD, etc.) - Si la imagen usa variables diferentes, configuralas manualmente en la pestana Environment
- Usa tags fijos, no
latest, para evitar cambios inesperados
Configurar volumenes persistentes
Dokploy crea volumenes Docker automaticamente para cada base de datos. Los datos sobreviven reinicios y redespliegues.
Ubicacion de datos por motor
| Motor | Path 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
| Motor | Memoria minima | Memoria recomendada |
|---|---|---|
| PostgreSQL | 128m | 256m - 1g |
| MySQL | 256m | 512m - 1g |
| MongoDB | 256m | 512m - 2g |
| Redis | 64m | 128m - 512m |
| MariaDB | 256m | 512m - 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:
volatile-lru: solo elimina claves con TTLallkeys-random: eliminacion aleatorianoeviction: retorna error cuando se llena (util para colas)
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 —>