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.

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:

RutaContenido
/etc/mongod.confConfiguración del servidor (YAML)
/var/lib/mongodbDirectorio de datos
/var/log/mongodb/mongod.logLog 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

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

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().