MongoDB es una base de datos NoSQL orientada a documentos que guarda los datos en formato BSON, parecido a JSON, y permite cambiar el esquema sin migraciones. En este tutorial instalarás MongoDB 8.0 Community Edition desde el repositorio oficial en Ubuntu 24.04, crearás un usuario administrador, activarás la autenticación, abrirás el acceso solo a los servidores de tu aplicación y programarás copias de seguridad diarias con mongodump.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS de 64 bits (x86_64 o arm64), por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - Al menos 2 GB de RAM. MongoDB usa por defecto la mitad de la RAM menos 1 GB para su caché (WiredTiger), así que con menos memoria funcionará, pero con poco margen.
- UFW activo con el acceso SSH permitido.
NotaUbuntu no incluye MongoDB en sus repositorios por motivos de licencia. No instales el paquete
mongodbde repositorios antiguos ni imágenes de terceros: usa siempre el repositorio derepo.mongodb.org.
Paso 1: Añadir el repositorio oficial de MongoDB
Instala las herramientas necesarias para descargar y verificar la clave del repositorio:
sudo apt update
sudo apt install gnupg curl
Descarga la clave pública de MongoDB 8.0 y guárdala en /etc/apt/keyrings:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg --dearmor -o /etc/apt/keyrings/mongodb-server-8.0.gpg
Añade el repositorio para Ubuntu 24.04 (noble), firmado con esa clave:
echo "deb [ arch=amd64,arm64 signed-by=/etc/apt/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
Actualiza el índice de paquetes y comprueba que apt ve la versión del repositorio de MongoDB:
sudo apt update
apt policy mongodb-org
mongodb-org:
Installed: (none)
Candidate: 8.0.x
Version table:
8.0.x 500
500 https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0/multiverse amd64 Packages
Paso 2: Instalar MongoDB y arrancar el servicio
El metapaquete mongodb-org instala el servidor (mongod), la shell mongosh y las herramientas de base de datos (mongodump, mongorestore):
sudo apt install mongodb-org
El paquete no arranca el servicio automáticamente. Actívalo y arráncalo con systemd:
sudo systemctl enable --now mongod
Comprueba que está en ejecución:
sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; preset: enabled)
Active: active (running) since ...
Docs: https://docs.mongodb.org/manual
Main PID: 4211 (mongod)
Conéctate con mongosh y lanza un ping para confirmar que el servidor responde:
mongosh --eval 'db.runCommand({ ping: 1 })'
{ ok: 1 }
Los archivos que vas a usar en el resto de la guía son:
| Ruta | Contenido |
|---|---|
/etc/mongod.conf | Configuración del servidor (YAML) |
/var/lib/mongodb | Directorio de datos |
/var/log/mongodb/mongod.log | Log del servidor |
Paso 3: Crear el usuario administrador
Recién instalado, MongoDB acepta conexiones locales sin contraseña. Antes de activar la autenticación tienes que crear un usuario administrador; si la activas primero, te quedarás sin forma de gestionar usuarios.
Abre la shell:
mongosh
Cambia a la base de datos admin y crea el usuario. passwordPrompt() pide la contraseña de forma interactiva para que no quede en el historial de la shell:
use admin
db.createUser({
user: "admin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
})
Enter password
************{ ok: 1 }
Sal de la shell con exit.
Paso 4: Activar la autenticación
Edita el archivo de configuración:
sudo nano /etc/mongod.conf
Busca la sección #security: (comentada por defecto) y sustitúyela por este bloque. Respeta la indentación de dos espacios, porque el archivo es YAML:
security:
authorization: enabled
Reinicia MongoDB para aplicar el cambio:
sudo systemctl restart mongod
Comprueba que ahora las operaciones sin credenciales se rechazan:
mongosh --quiet --eval 'db.getSiblingDB("admin").getUsers()'
MongoServerError: Command usersInfo requires authentication
Conéctate de nuevo, esta vez como administrador. -p sin valor hace que mongosh pida la contraseña:
mongosh -u admin -p --authenticationDatabase admin
Dentro de la shell, db.runCommand({ connectionStatus: 1 }) debe mostrar el usuario admin en authenticatedUsers.
Paso 5: Crear un usuario para tu aplicación
La aplicación no debe usar el usuario administrador. Crea uno con permisos de lectura y escritura solo sobre su base de datos. Estando conectado como admin, ejecuta (sustituye miapp por el nombre de tu base de datos):
use miapp
db.createUser({
user: "miapp_user",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "miapp" } ]
})
Comprueba que el usuario funciona insertando y leyendo un documento:
mongosh "mongodb://[email protected]:27017/miapp?authSource=miapp" --eval 'db.test.insertOne({ ok: true }); db.test.countDocuments()'
1
La cadena de conexión que usará tu aplicación tiene esta forma:
mongodb://miapp_user:tu_contraseña@your_server_ip:27017/miapp?authSource=miapp
Paso 6: Permitir conexiones remotas de forma controlada
Por defecto mongod solo escucha en 127.0.0.1. Si tu aplicación corre en el mismo servidor, no cambies nada y pasa al paso 7.
Si la aplicación está en otro servidor, añade la IP privada o pública de este servidor a bindIp en /etc/mongod.conf:
sudo nano /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1,your_server_ip
Reinicia el servicio y comprueba en qué direcciones escucha:
sudo systemctl restart mongod
sudo ss -tlnp | grep 27017
LISTEN 0 4096 your_server_ip:27017 0.0.0.0:* users:(("mongod",pid=4630,fd=15))
LISTEN 0 4096 127.0.0.1:27017 0.0.0.0:* users:(("mongod",pid=4630,fd=14))
Abre el puerto 27017 solo para la IP de tu servidor de aplicación (app_server_ip), nunca para todo Internet:
sudo ufw allow from app_server_ip to any port 27017 proto tcp
sudo ufw status
Advertenciauna instancia de MongoDB expuesta en Internet con
bindIp: 0.0.0.0y sin autenticación es uno de los orígenes más habituales de filtraciones de datos. Mantén siempre la autenticación activa y el puerto filtrado por IP. Si el tráfico pasa por redes que no controlas, configura también TLS.
Desde el servidor de aplicación, prueba la conexión con mongosh o con el driver de tu lenguaje usando la cadena del paso anterior.
Paso 7: Programar copias de seguridad con mongodump
mongodump exporta las bases de datos a un archivo comprimido que luego puedes restaurar con mongorestore. Crea un usuario dedicado con el rol integrado backup. Conéctate como administrador y ejecuta:
use admin
db.createUser({
user: "backup",
pwd: passwordPrompt(),
roles: [ { role: "backup", db: "admin" } ]
})
Guarda la contraseña en un archivo de configuración legible solo por root, para no ponerla en la línea de comandos (donde la vería cualquier usuario con ps):
sudo install -m 0700 -d /var/backups/mongodb
sudo nano /etc/mongodump.yaml
password: tu_contraseña_de_backup
sudo chmod 600 /etc/mongodump.yaml
Crea el script de copia:
sudo nano /usr/local/bin/mongodb-backup
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/var/backups/mongodb"
RETENTION_DAYS=7
STAMP="$(date +%F_%H%M)"
mongodump \
--uri="mongodb://[email protected]:27017/?authSource=admin" \
--config=/etc/mongodump.yaml \
--archive="${BACKUP_DIR}/mongodb_${STAMP}.archive.gz" \
--gzip
find "${BACKUP_DIR}" -name 'mongodb_*.archive.gz' -mtime +"${RETENTION_DAYS}" -delete
Hazlo ejecutable y pruébalo:
sudo chmod 750 /usr/local/bin/mongodb-backup
sudo /usr/local/bin/mongodb-backup
sudo ls -lh /var/backups/mongodb
-rw-r--r-- 1 root root 1.2K ... mongodb_2026-09-25_0300.archive.gz
Prográmalo cada día a las 03:00 con cron:
echo '0 3 * * * root /usr/local/bin/mongodb-backup' | sudo tee /etc/cron.d/mongodb-backup
Para restaurar una copia sobre el servidor (por ejemplo, en un entorno de pruebas), usa el usuario administrador:
mongorestore -u admin -p --authenticationDatabase admin --gzip --archive=/var/backups/mongodb/mongodb_2026-09-25_0300.archive.gz
Importanteuna copia que solo vive en el mismo servidor no te protege si el disco falla. Copia los archivos a otro almacenamiento (otro servidor, almacenamiento de objetos) y prueba la restauración de vez en cuando.
Solución de problemas
mongod no arranca y el estado muestra status=14. Suele ser un problema de permisos, normalmente tras lanzar mongod a mano como root. Revisa el log y corrige el propietario de los archivos:
sudo tail -n 50 /var/log/mongodb/mongod.log
sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
sudo rm -f /tmp/mongodb-27017.sock
sudo systemctl start mongod
mongod no arranca después de editar /etc/mongod.conf. Casi siempre es un error de indentación YAML (tabuladores o espacios de más). journalctl -u mongod -n 50 muestra la línea que falla.
Authentication failed desde la aplicación. Comprueba que authSource apunta a la base de datos donde creaste el usuario (miapp en el paso 5, admin para el administrador).
Conexión remota rechazada o con timeout. Verifica que ss -tlnp muestra la IP correcta en el puerto 27017 y que sudo ufw status permite la IP de origen.
Conclusión
Tienes MongoDB 8.0 instalado desde el repositorio oficial, con autenticación obligatoria, un usuario con permisos mínimos para tu aplicación, el puerto limitado a las IP que lo necesitan y copias diarias con rotación. Como siguientes pasos, puedes configurar TLS en la sección net.tls de mongod.conf, montar un replica set de tres nodos para tener alta disponibilidad, y crear índices sobre los campos que más consultas, revisando los planes con explain().
