bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de MongoDB

calendar_month Jul 24, 2026 schedule 22 min de lectura visibility 20 vistas
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de MongoDB en un VPS: configuración básica y seguridad

TL;DR

En esta guía detallada, configuraremos paso a paso un servidor MongoDB seguro en un Servidor Privado Virtual (VPS) con Ubuntu Server 24.04 LTS. Aprenderá a instalar la versión actual de MongoDB (7.0), configurarla para un funcionamiento seguro con autenticación y TLS, configurar un firewall y crear una estrategia de copia de seguridad efectiva, garantizando una base de datos confiable y de alto rendimiento para sus aplicaciones.

  • Instalación de MongoDB 7.0 en Ubuntu 24.04 LTS desde el repositorio oficial.
  • Protección básica del servidor: claves SSH, usuario sudo, UFW, Fail2Ban.
  • Configuración de MongoDB con autenticación habilitada y creación de usuarios.
  • Configuración del firewall para restringir el acceso al puerto de MongoDB.
  • Uso de TLS/SSL para cifrar las conexiones a la base de datos.
  • Desarrollo de una estrategia de copia de seguridad utilizando mongodump y restic.
  • Resolución de problemas comunes y respuestas a preguntas frecuentes.

Qué configuramos y por qué

En esta guía, nos centraremos en la instalación y configuración de MongoDB en su propio Servidor Privado Virtual (VPS). MongoDB es una popular base de datos NoSQL orientada a documentos, ideal para aplicaciones web modernas que requieren un esquema flexible, alto rendimiento y escalabilidad. A diferencia de las bases de datos relacionales tradicionales, MongoDB almacena los datos en formato BSON (JSON binario), lo que la hace muy conveniente para trabajar con datos no estructurados o semiestructurados.

Al finalizar este tutorial, tendrá una instancia de MongoDB completamente configurada y protegida, lista para aceptar conexiones de sus aplicaciones. Podrá administrar la base de datos, crear usuarios con diferentes permisos de acceso y estar seguro de la seguridad de los datos almacenados.

¿Por qué elegir MongoDB autoalojado en un VPS en lugar de soluciones en la nube? El autoalojamiento proporciona control total sobre la configuración del servidor, la optimización del rendimiento y los costos. Para muchos proyectos, especialmente en las etapas iniciales o con requisitos específicos de seguridad y ubicación de datos, un VPS propio puede ser significativamente más económico que los servicios gestionados en la nube, como MongoDB Atlas, AWS DocumentDB o Azure Cosmos DB. También es una excelente manera de comprender profundamente el funcionamiento de la base de datos y la infraestructura.

Qué configuración de VPS se necesita para esta tarea

La elección de la configuración de VPS adecuada es fundamental para el rendimiento y la estabilidad de su base de datos MongoDB. Los requisitos pueden variar mucho según el volumen de datos, la intensidad de las consultas y el número de conexiones simultáneas. Nos centramos en tareas típicas, como la implementación de GitLab, Mattermost, un servidor de Minecraft o un nodo de criptomoneda, donde MongoDB puede utilizarse como parte de la pila.

Requisitos mínimos para cargas de trabajo pequeñas (desarrollo, entornos de prueba, proyectos personales):

  • CPU: 2 núcleos. Para MongoDB, no solo es importante el número de núcleos, sino también su rendimiento.
  • RAM: 4 GB. MongoDB utiliza activamente la memoria RAM para el almacenamiento en caché de datos (WiredTiger Cache), lo que mejora significativamente la velocidad de operación. Menos de 4 GB puede llevar a un uso intensivo del disco y una reducción del rendimiento.
  • Disco: 50 GB NVMe SSD. La velocidad del subsistema de disco es uno de los factores más importantes para MongoDB. Los NVMe SSD proporcionan tasas de IOPS (operaciones de entrada/salida por segundo) significativamente más altas en comparación con los SSD o HDD normales.
  • Red: 1 Gbit/s. Para la mayoría de las tareas, esto es suficiente.

Plan de VPS recomendado para cargas de trabajo moderadas (aplicaciones de producción pequeñas, proyectos medianos):

Para tareas más serias, donde se espera un trabajo activo con datos y varios usuarios simultáneos, se recomienda la siguiente configuración:

  • CPU: 4 núcleos.
  • RAM: 8-16 GB. Cuantos más datos se almacenen en caché en la RAM, más rápidas serán las consultas.
  • Disco: 160-320 GB NVMe SSD. El volumen del disco debe ser suficiente para los datos actuales y su crecimiento durante varios años, así como para las copias de seguridad.
  • Red: 1 Gbit/s.

Un VPS con las características indicadas se puede alquilar a un proveedor de confianza que ofrezca NVMe SSD y rendimiento garantizado.

Cuándo se necesita un servidor dedicado y no un VPS

Se debe considerar un servidor dedicado si:

  • Volúmenes de datos muy grandes: Cientos de gigabytes o terabytes de datos que requieren el máximo rendimiento del subsistema de disco.
  • Altos requisitos de IOPS: Operaciones intensivas de lectura/escritura que pueden estar limitadas en un VPS debido al uso compartido de recursos.
  • Máxima aislamiento y seguridad: Control total sobre el hardware, sin "vecinos" en el mismo servidor físico.
  • Hardware especializado: Necesidad de controladores RAID específicos, tarjetas de red de alto rendimiento o GPU para tareas específicas.

Para la mayoría de los proyectos medianos, un VPS con buenos NVMe SSD será suficiente. Si planea implementar un GitLab grande, un SaaS de alta carga o un nodo de criptomoneda exigente, un servidor dedicado adecuado puede ser una opción más justificada.

Ubicación: en qué influye

La elección de la ubicación del VPS influye en:

  • Latencia: Cuanto más cerca esté el servidor de sus usuarios o del servidor de la aplicación que se conectará a MongoDB, menor será la latencia.
  • Cumplimiento legal: En algunos casos, se requiere almacenar datos en una jurisdicción específica (por ejemplo, GDPR en Europa).
  • Costo: Los precios de los VPS pueden variar según el centro de datos y la región.

Siempre elija una ubicación que minimice la distancia entre la base de datos y la aplicación principal.

Preparación del servidor

Antes de instalar MongoDB, es necesario realizar una configuración mínima de un VPS nuevo. Esto garantizará la seguridad básica y la facilidad de administración. Utilizaremos Ubuntu Server 24.04 LTS como el sistema operativo más común y compatible.

1. Conexión por SSH y actualización del sistema

Conéctese a su VPS como usuario root (o el usuario proporcionado por el proveedor) a través de SSH. Luego, actualice todos los paquetes a las últimas versiones.


ssh root@ВАШ_IP_АДРЕС_VPS
sudo apt update && sudo apt upgrade -y
    

Este comando actualiza la lista de paquetes disponibles e instala todas las actualizaciones del sistema.

2. Creación de un nuevo usuario con permisos sudo

Trabajar como usuario root no es seguro. Cree un nuevo usuario y concédale permisos sudo.


adduser ваш_пользователь
    

Siga las instrucciones para establecer una contraseña y completar la información del usuario. Luego, agregue el usuario al grupo sudo:


usermod -aG sudo ваш_пользователь
    

Ahora puede salir de la sesión root y conectarse con el nuevo usuario:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС_VPS
    

Todos los comandos posteriores que requieran permisos de administrador, ejecútelos con el prefijo sudo.

3. Configuración de claves SSH (recomendado)

Para mejorar la seguridad, se recomienda utilizar claves SSH en lugar de contraseñas. Si aún no tiene un par de claves, créelas en su máquina local:


ssh-keygen -t rsa -b 4096
    

Luego, copie la clave pública a su VPS:


ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС_VPS
    

Después de copiar la clave con éxito, edite el archivo de configuración SSH en el servidor para deshabilitar la autenticación por contraseña y prohibir el inicio de sesión para root.


sudo nano /etc/ssh/sshd_config
    

Encuentre y cambie (o agregue) las siguientes líneas:


# Prohibir el inicio de sesión para root
PermitRootLogin no

# Deshabilitar la autenticación por contraseña (después de verificar el inicio de sesión con clave)
PasswordAuthentication no

# Asegúrese de que la autenticación por clave esté permitida
PubkeyAuthentication yes
    

Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Reinicie el servicio SSH:


sudo systemctl restart sshd
    

IMPORTANTE: Antes de cerrar la sesión SSH actual, abra una nueva ventana de terminal e intente conectarse al servidor utilizando el nuevo usuario y la clave SSH. Asegúrese de que puede iniciar sesión. Si no, corrija los errores antes de cerrar la sesión actual, de lo contrario, podría perder el acceso al servidor.

4. Configuración del firewall (UFW)

UFW (Uncomplicated Firewall) es una herramienta conveniente para administrar el firewall. Por defecto, bloquea todas las conexiones entrantes. Primero, permita SSH, luego habilite UFW.


sudo ufw allow OpenSSH         # Permitir conexiones SSH
sudo ufw enable                # Habilitar UFW. Confirme 'y'
sudo ufw status                # Verificar el estado de UFW
    

Por ahora, el puerto de MongoDB (27017) está cerrado. Lo abriremos más tarde, después de la instalación y configuración básica.

5. Instalación de Fail2Ban

Fail2Ban escanea los registros del servidor en busca de actividad sospechosa (por ejemplo, múltiples intentos fallidos de inicio de sesión SSH) y bloquea temporalmente las direcciones IP de los atacantes.


sudo apt install -y fail2ban   # Instalar Fail2Ban
sudo systemctl enable fail2ban # Habilitar el inicio automático al arrancar
sudo systemctl start fail2ban  # Iniciar el servicio
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Crear una copia local para la configuración
    

Abra /etc/fail2ban/jail.local y asegúrese de que la sección [sshd] esté activa (enabled = true). También puede configurar bantime (tiempo de bloqueo) y findtime (período para detectar intentos).


sudo nano /etc/fail2ban/jail.local
    

Encuentre la sección [DEFAULT] y, si lo desea, cambie:


bantime = 1d                 # Bloquear por 1 día
findtime = 10m               # Si en 10 minutos...
maxretry = 5                 # ...hubo 5 intentos fallidos
    

Reinicie Fail2Ban para aplicar los cambios:


sudo systemctl restart fail2ban
    

Ahora su servidor tiene protección básica, y estamos listos para instalar MongoDB.

Instalación de software — paso a paso

Instalaremos MongoDB versión 7.0, que es la actual y estable para 2026, en Ubuntu Server 24.04 LTS. La instalación se realizará desde el repositorio oficial de MongoDB, lo que garantiza la obtención de actualizaciones y parches de seguridad.

1. Importar la clave GPG pública de MongoDB

Para verificar la integridad de los paquetes de MongoDB, es necesario importar la clave GPG pública.


sudo apt install -y gnupg curl # Instalar las utilidades gnupg y curl, si aún no están instaladas
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
   sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg # Importar la clave y guardarla en el keyring
    

Este comando descarga la clave y la guarda en el directorio /usr/share/keyrings/, haciéndola disponible para APT.

2. Añadir el repositorio de MongoDB a la lista de fuentes de APT

Ahora es necesario añadir la URL del repositorio oficial de MongoDB a la lista de fuentes de paquetes de su sistema. Esto permitirá a APT encontrar e instalar los paquetes de MongoDB.


echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
    

Este comando añade una nueva línea al archivo /etc/apt/sources.list.d/mongodb-org-7.0.list, indicando a APT dónde buscar los paquetes de MongoDB 7.0 para su arquitectura (amd64 o arm64) y versión de Ubuntu ($(lsb_release -cs) determinará automáticamente el nombre clave de su versión de Ubuntu, por ejemplo, noble para 24.04 LTS).

3. Actualizar el índice de paquetes de APT

Después de añadir un nuevo repositorio, es necesario actualizar el índice de paquetes para que APT conozca los paquetes de MongoDB disponibles.


sudo apt update # Actualizar la lista de paquetes disponibles
    

Debería ver información sobre los paquetes del repositorio de MongoDB en la salida de este comando.

4. Instalación de los paquetes de MongoDB

Ahora que el repositorio está configurado, puede instalar MongoDB y las utilidades relacionadas. El paquete mongodb-org incluye el servidor MongoDB (mongod), el cliente de línea de comandos (mongosh), así como utilidades para trabajar con la base de datos (mongodump, mongorestore, mongoimport, mongoexport).


sudo apt install -y mongodb-org # Instalar todos los componentes de MongoDB
    

Este comando instalará MongoDB 7.0 y todas las dependencias necesarias.

5. Iniciar y habilitar el servicio MongoDB

Después de la instalación, es necesario iniciar el servicio mongod y configurarlo para que se inicie automáticamente con cada arranque del servidor.


sudo systemctl start mongod    # Iniciar el servicio MongoDB
sudo systemctl enable mongod   # Habilitar el inicio automático de MongoDB al arrancar el sistema
    

Ahora MongoDB debería estar en funcionamiento y listo para trabajar.

6. Verificar el estado del servicio MongoDB

Asegúrese de que el servicio MongoDB funciona correctamente.


sudo systemctl status mongod   # Verificar el estado del servicio MongoDB
    

Debería ver una salida que indique que el servicio mongod está activo (active (running)).

7. Verificar la conexión a MongoDB a través de mongosh

Conéctese a la base de datos local de MongoDB utilizando el cliente de línea de comandos mongosh.


mongosh # Conectarse a la instancia local de MongoDB
    

Si ve el prompt test> o >, significa que MongoDB se ha instalado y funciona correctamente. Escriba exit para salir del cliente.

Configuración

Después de la instalación, MongoDB funciona por defecto sin autenticación y acepta conexiones solo desde localhost (127.0.0.1). Para un entorno de producción, esto es inaceptable. Configuraremos la autenticación, restringiremos el acceso a la red y, opcionalmente, habilitaremos TLS/SSL para cifrar las conexiones.

1. Configuración del archivo de configuración de MongoDB (mongod.conf)

El archivo de configuración principal de MongoDB se encuentra en /etc/mongod.conf. Ábralo para editar:


sudo nano /etc/mongod.conf
    
Habilitar la autenticación

Este es el paso más importante para la seguridad. Busque la sección security y añada o descomente la línea authorization: enabled:


# /etc/mongod.conf
...
security:
  authorization: enabled
...
    
Configuración del acceso a la red (bindIp)

Por defecto, bindIp está configurado en 127.0.0.1, lo que significa que MongoDB solo acepta conexiones desde la máquina local. Si su aplicación está en el mismo VPS, esto es seguro. Sin embargo, si la aplicación está en otro servidor o desea acceder a MongoDB de forma remota, deberá cambiar bindIp. ¡NUNCA configure bindIp: 0.0.0.0 sin una configuración adecuada del firewall y la autenticación!

Si planea acceder desde una dirección IP específica, indíquela:


# /etc/mongod.conf
...
net:
  port: 27017
  bindIp: 127.0.0.1,SU_IP_DE_APLICACION # Añada la IP de su aplicación u otro servidor
...
    

Si está seguro de que su firewall UFW está configurado de forma muy estricta, puede especificar temporalmente 0.0.0.0, pero esto debe hacerse solo después de configurar UFW, como se describe a continuación.

Guardar y reiniciar MongoDB

Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Luego, reinicie el servicio MongoDB:


sudo systemctl restart mongod
    

Ahora MongoDB requiere autenticación para todas las conexiones.

2. Creación de un usuario administrativo

Después de habilitar la autenticación, no podrá conectarse a MongoDB sin credenciales. Por lo tanto, es necesario crear un usuario administrativo. Para ello, conéctese a mongosh, pero ya con autenticación. Dado que la autenticación acaba de ser habilitada, puede conectarse como localhost sin credenciales una vez para crear el primer usuario.


mongosh --port 27017 --authenticationDatabase admin # Nos conectamos a la base de datos admin
    

Dentro de mongosh, ejecute los siguientes comandos:


use admin
db.createUser(
   {
     user: "mongoAdmin",
     pwd: passwordPrompt(), // Ingrese la contraseña cuando se le solicite
     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
   }
)
exit
    

Ahora puede conectarse a MongoDB utilizando el usuario creado:


mongosh --port 27017 --authenticationDatabase admin -u mongoAdmin -p # Se le pedirá que ingrese la contraseña
    

Después de iniciar sesión correctamente, verá el prompt admin> o >.

3. Creación de un usuario para la aplicación

Para cada aplicación que utiliza MongoDB, se recomienda crear un usuario separado con los permisos mínimos necesarios.


use your_app_db # Cambiar a la base de datos de su aplicación (la creará si no existe)
db.createUser(
   {
     user: "appUser",
     pwd: passwordPrompt(), // Ingrese la contraseña cuando se le solicite
     roles: [ { role: "readWrite", db: "your_app_db" } ] // Otorgar permisos solo de lectura/escritura en la BD específica
   }
)
exit
    

Esto garantiza que, incluso si las credenciales de la aplicación se ven comprometidas, el atacante no obtendrá acceso completo a todas las bases de datos.

4. Configuración del firewall (UFW) para MongoDB

Ahora que MongoDB está protegido con autenticación, se puede abrir el puerto 27017, pero solo para las direcciones IP permitidas.


sudo ufw allow from SU_IP_DE_APLICACION to any port 27017 # Permitir acceso solo desde la dirección IP de su aplicación
sudo ufw status # Verificar el estado de UFW
    

Si desea permitir el acceso desde varias direcciones IP, repita el comando ufw allow para cada una de ellas. Si su aplicación está en el mismo servidor, no necesita abrir el puerto 27017 al exterior; bindIp: 127.0.0.1 es suficiente.

5. Configuración de TLS/SSL para cifrado de conexiones (opcional, pero recomendado)

Para garantizar la confidencialidad e integridad de los datos durante la transmisión entre el cliente y el servidor MongoDB, se recomienda utilizar TLS/SSL. Esto es especialmente importante si MongoDB es accesible desde fuera de la red local.

Para configurar TLS, necesitará certificados. Puede usar certificados autofirmados para pruebas o certificados corporativos internos. Para servidores públicos, se recomienda usar certificados de una autoridad de certificación (CA) de confianza, como Let's Encrypt.

Creación de un certificado autofirmado (para ejemplo)

Para generar un certificado y una clave autofirmados en un solo archivo .pem:


sudo mkdir -p /etc/ssl/mongodb
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -keyout /etc/ssl/mongodb/mongodb.key -out /etc/ssl/mongodb/mongodb.crt
sudo cat /etc/ssl/mongodb/mongodb.key /etc/ssl/mongodb/mongodb.crt | sudo tee /etc/ssl/mongodb/mongodb.pem
sudo chown -R mongodb:mongodb /etc/ssl/mongodb/
sudo chmod -R 600 /etc/ssl/mongodb/*
    

Cuando se le solicite información (Common Name, Organization, etc.), ingrese los datos correspondientes.

Configuración de MongoDB para usar TLS

Edite /etc/mongod.conf de nuevo:


sudo nano /etc/mongod.conf
    

Añada o modifique la sección net.ssl:


# /etc/mongod.conf
...
net:
  port: 27017
  bindIp: 127.0.0.1,SU_IP_DE_APLICACION
  ssl:
    mode: requireTLS # Todas las conexiones deben usar TLS
    PEMKeyFile: /etc/ssl/mongodb/mongodb.pem
    CAFile: /etc/ssl/mongodb/mongodb.pem # Si usa autofirmado, CAFile puede ser el mismo
    allowConnectionsWithoutCertificates: false # Requerir certificados de cliente (se puede establecer en true si no son necesarios)
...
    

Guarde los cambios y reinicie MongoDB:


sudo systemctl restart mongod
    

Ahora, para conectarse a MongoDB, deberá especificar los parámetros TLS en el cliente mongosh o en el controlador de su aplicación:


mongosh --host SU_IP_DEL_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p --tls --tlsCAFile /etc/ssl/mongodb/mongodb.pem --tlsAllowInvalidHostnames # --tlsAllowInvalidHostnames solo para autofirmados
    

Para certificados de producción de Let's Encrypt u otras CA, deberá especificar la ruta a su certificado y, si es necesario, a la cadena de CA.

6. Verificación del funcionamiento

Asegúrese de que MongoDB esté funcionando, aceptando conexiones y que la autenticación esté habilitada:

  • Verificación del estado del servicio:
    
    sudo systemctl status mongod
                

    Debería ser active (running).

  • Verificación de puertos abiertos:
    
    sudo netstat -tuln | grep 27017
                

    La salida debería mostrar que el puerto 27017 está escuchando en las direcciones IP que especificó (por ejemplo, 127.0.0.1:27017 o 0.0.0.0:27017, si está configurado).

  • Prueba de conexión con autenticación:
    
    mongosh --host SU_IP_DEL_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p --tls --tlsCAFile /etc/ssl/mongodb/mongodb.pem # Con TLS
                

    Sin TLS, si no lo configuró:

    
    mongosh --host SU_IP_DEL_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p
                

    El inicio de sesión exitoso confirma el funcionamiento correcto.

Copias de seguridad y mantenimiento

La copia de seguridad es un aspecto críticamente importante de cualquier sistema, especialmente de una base de datos. La pérdida de datos puede tener consecuencias catastróficas. Analizaremos qué se debe respaldar, cómo hacerlo con la ayuda de mongodump y restic, y dónde guardar las copias de seguridad.

1. Qué respaldar

  • Datos de MongoDB: Esto es lo más importante. Las propias bases de datos, colecciones, índices.
  • Archivo de configuración de MongoDB: /etc/mongod.conf. Contiene configuraciones importantes del servidor.
  • Certificados y claves SSL/TLS: Si utiliza TLS, asegúrese de que los archivos .pem, .key, .crt también se respalden.
  • Scripts de copia de seguridad: Si crea sus propios scripts, también deben guardarse.

2. Script simple de copia de seguridad automática (mongodump + restic)

Para crear copias de seguridad de MongoDB, utilizaremos la utilidad mongodump, que crea un volcado binario de datos. Para un almacenamiento seguro y eficiente de las copias de seguridad, utilizaremos restic, una herramienta moderna de copia de seguridad que admite la deduplicación, el cifrado y varios tipos de almacenamiento.

Instalación de restic

sudo apt install -y restic # Instalación de restic
    
Creación de un script de copia de seguridad

Cree el archivo /usr/local/bin/backup_mongodb.sh:


sudo nano /usr/local/bin/backup_mongodb.sh
    

Inserte el siguiente código, reemplazando los marcadores de posición con sus valores:


#!/bin/bash

# Parámetros de MongoDB
MONGO_USER="mongoAdmin"
MONGO_PASS="TU_CONTRASEÑA_DE_ADMIN" # En producción, es mejor usar .env o variables de entorno
MONGO_AUTH_DB="admin"
MONGO_HOST="127.0.0.1" # O la IP desde la que se permite el acceso
MONGO_PORT="27017"

# Parámetros de la copia de seguridad
BACKUP_DIR="/var/backups/mongodb_tmp"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
LOG_FILE="/var/log/mongodb_backup.log"

# Parámetros de Restic
# IMPORTANTE: En lugar de especificar la contraseña directamente, use la variable de entorno RESTIC_PASSWORD
# o un archivo con la contraseña, protegido por permisos.
# export RESTIC_PASSWORD="TU_RESTIC_PASSWORD"
RESTIC_REPO="s3:s3.amazonaws.com/TU_BUCKET_S3/mongodb_backups" # Ejemplo S3. Puede ser minio, B2, SFTP, etc.
# export AWS_ACCESS_KEY_ID="TU_AWS_KEY_ID"
# export AWS_SECRET_ACCESS_KEY="TU_AWS_SECRET_KEY"

# Creación de un directorio temporal para el volcado
mkdir -p $BACKUP_DIR/$TIMESTAMP || { echo "No se pudo crear el directorio $BACKUP_DIR/$TIMESTAMP" >> $LOG_FILE; exit 1; }

echo "[$TIMESTAMP] Copia de seguridad de MongoDB iniciada..." >> $LOG_FILE

# Creación del volcado de MongoDB
mongodump --host $MONGO_HOST --port $MONGO_PORT --authenticationDatabase $MONGO_AUTH_DB \
          -u $MONGO_USER -p "$MONGO_PASS" --out $BACKUP_DIR/$TIMESTAMP >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Error al crear el volcado de MongoDB." >> $LOG_FILE
    rm -rf $BACKUP_DIR/$TIMESTAMP # Eliminar volcado fallido
    exit 1
fi

echo "[$TIMESTAMP] Volcado de MongoDB creado con éxito. Tamaño: $(du -sh $BACKUP_DIR/$TIMESTAMP | awk '{print $1}')" >> $LOG_FILE

# Inicialización del repositorio restic, si aún no existe
# restic init --repo $RESTIC_REPO # Ejecutar manualmente una vez

# Creación de la copia de seguridad con restic
echo "[$TIMESTAMP] Cargando copia de seguridad en el repositorio Restic..." >> $LOG_FILE
restic backup $BACKUP_DIR/$TIMESTAMP \
              --repo $RESTIC_REPO \
              --host $(hostname) \
              --tag "mongodb-daily" \
              --verbose >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Error al cargar la copia de seguridad de Restic." >> $LOG_FILE
    exit 1
fi

echo "[$TIMESTAMP] Copia de seguridad de Restic completada con éxito." >> $LOG_FILE

# Limpieza de instantáneas antiguas (política de retención)
echo "[$TIMESTAMP] Limpiando copias de seguridad antiguas (keep-daily 7, keep-weekly 4, keep-monthly 6)..." >> $LOG_FILE
restic forget --repo $RESTIC_REPO \
              --prune \
              --tag "mongodb-daily" \
              --keep-daily 7 \
              --keep-weekly 4 \
              --keep-monthly 6 \
              --verbose >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Error al limpiar las copias de seguridad antiguas de Restic." >> $LOG_FILE
    exit 1
fi

echo "[$TIMESTAMP] Limpieza de copias de seguridad antiguas completada." >> $LOG_FILE

# Eliminación de archivos de volcado temporales
rm -rf $BACKUP_DIR/$TIMESTAMP
echo "[$TIMESTAMP] Directorio temporal $BACKUP_DIR/$TIMESTAMP eliminado." >> $LOG_FILE

echo "[$TIMESTAMP] Copia de seguridad completada. Verificando repositorio:" >> $LOG_FILE
restic check --repo $RESTIC_REPO >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Error al verificar el repositorio de Restic." >> $LOG_FILE
    exit 1
fi
echo "[$TIMESTAMP] Repositorio de Restic verificado." >> $LOG_FILE
    

Haga el script ejecutable:


sudo chmod +x /usr/local/bin/backup_mongodb.sh
    
Inicialización del repositorio de Restic

Antes de usar el script por primera vez, debe inicializar el repositorio de restic. Asegúrese de tener configuradas las variables de entorno para el acceso a S3 (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) y la variable RESTIC_PASSWORD.


# Establezca las variables de entorno para la sesión actual
export AWS_ACCESS_KEY_ID="TU_AWS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="TU_AWS_SECRET_KEY"
export RESTIC_PASSWORD="TU_RESTIC_PASSWORD"

# Inicialización del repositorio (se ejecuta UNA vez)
restic init --repo s3:s3.amazonaws.com/TU_BUCKET_S3/mongodb_backups
    

Si utiliza otro tipo de repositorio (por ejemplo, SFTP), reemplace s3:s3.amazonaws.com/... con la ruta correspondiente.

3. Dónde almacenar las copias de seguridad

Nunca almacene las copias de seguridad en el mismo servidor que los datos originales. En caso de fallo del servidor, perderá tanto los datos como las copias de seguridad.

  • Servicio externo compatible con S3: Almacenamientos en la nube como Amazon S3, DigitalOcean Spaces, Backblaze B2, o MinIO en su propio servidor, son excelentes opciones. Son fiables, escalables y relativamente económicos.
  • VPS separado: Puede configurar un segundo VPS, menos potente, exclusivamente para el almacenamiento de copias de seguridad.
  • Servidor SFTP remoto: Si tiene acceso a otro servidor a través de SFTP, restic es compatible con este protocolo.

4. Configuración de Cron para el inicio automático de la copia de seguridad

Para que el script se ejecute automáticamente, agréguelo a la programación de cron.


sudo crontab -e
    

Agregue la siguiente línea para una copia de seguridad diaria a las 03:00 de la madrugada. Asegúrese de que las variables de entorno para restic estén disponibles en el contexto de la tarea cron. Lo mejor es escribirlas en el propio script o en un archivo separado que el script "source"ará.


0 3 * * * /usr/local/bin/backup_mongodb.sh >> /var/log/mongodb_backup_cron.log 2>&1
    

Esta entrada ejecutará el script diariamente a las 3 de la madrugada y redirigirá toda la salida al archivo /var/log/mongodb_backup_cron.log.

5. Actualizaciones: rolling vs ventana de mantenimiento

  • Actualizaciones del SO: Ejecute regularmente sudo apt update && sudo apt upgrade -y. Para servidores de producción, se recomienda realizar las actualizaciones en una ventana de mantenimiento predefinida para minimizar los riesgos.
  • Actualizaciones de MongoDB: La actualización de MongoDB en sí (por ejemplo, de 7.0 a 8.0) requiere una planificación y pruebas cuidadosas. Para un nodo único en un VPS, esto generalmente significa detener el servicio (ventana de mantenimiento). Para clústeres (replica sets), son posibles las actualizaciones continuas (rolling upgrades) sin tiempo de inactividad, pero esto va más allá del alcance de esta guía. Siempre lea la documentación oficial de MongoDB sobre la actualización para su versión.

Solución de problemas + Preguntas frecuentes

Incluso con una configuración cuidadosa, pueden surgir problemas. Esta sección le ayudará a diagnosticar y resolver los más comunes.

MongoDB no se inicia o no está disponible

Problema: Después de reiniciar el servidor o cambiar la configuración, MongoDB no se inicia o no puede conectarse a él.

Qué verificar:

  1. Estado del servicio: sudo systemctl status mongod. Busque errores en la salida, por ejemplo, failed o exited.
  2. Registros de MongoDB: sudo tail -f /var/log/mongodb/mongod.log. Aquí encontrará mensajes de error detallados durante el inicio o la operación.
  3. Archivo de configuración: sudo nano /etc/mongod.conf. Verifique la sintaxis YAML, especialmente las indentaciones. Un bindIp incorrecto o errores en la sección security/net.ssl son causas frecuentes.
  4. Acceso a archivos: Asegúrese de que el usuario mongodb tenga permisos de lectura/escritura en /var/lib/mongodb y /var/log/mongodb, así como permisos de lectura para /etc/mongod.conf y los certificados TLS.
  5. Puerto ocupado: sudo netstat -tuln | grep 27017. Asegúrese de que ningún otro proceso esté ocupando el puerto 27017.

Cómo solucionarlo: Corrija los errores en mongod.conf, verifique los permisos de acceso (sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb), luego intente reiniciar el servicio: sudo systemctl restart mongod.

Error "Authentication failed"

Problema: Intenta conectarse a MongoDB, pero recibe el error "Authentication failed".

Qué verificar:

  1. Nombre de usuario y contraseña: Asegúrese de que está utilizando las credenciales correctas.
  2. Base de datos de autenticación: Asegúrese de especificar la base de datos correcta para la autenticación (por ejemplo, --authenticationDatabase admin para un usuario administrativo).
  3. ¿Está habilitada la autenticación?: Verifique que security.authorization: enabled esté presente en /etc/mongod.conf. Si no, habilítelo, reinicie MongoDB y cree un usuario.

Cómo solucionarlo: Vuelva a verificar las credenciales. Si olvidó la contraseña del administrador, consulte las Preguntas frecuentes a continuación.

¿Qué configuración mínima de VPS es adecuada para MongoDB?

Para tareas básicas como desarrollo, pequeños proyectos personales o entornos de prueba, un VPS con 2 núcleos de CPU, 4 GB de RAM y un disco SSD NVMe de 50 GB será mínimamente suficiente. Sin embargo, para cualquier entorno de producción, incluso con una carga de trabajo ligera, se recomienda encarecidamente tener al menos 4 núcleos de CPU, 8 GB de RAM y 160 GB de SSD NVMe. Esto garantizará un funcionamiento estable y un rendimiento suficiente para el almacenamiento en caché de datos y el procesamiento de consultas.

¿Qué elegir: VPS o dedicado para esta tarea?

La elección entre un VPS y un servidor dedicado depende de la escala de su proyecto, los requisitos de rendimiento, seguridad y presupuesto. Un VPS es excelente para la mayoría de los proyectos medianos donde se requiere flexibilidad, escalabilidad y rentabilidad. Es ideal para startups, pequeñas aplicaciones SaaS, servidores de juegos para un grupo reducido de usuarios o nodos de criptomonedas que no requieren un rendimiento extremo. Un servidor dedicado es necesario para sistemas de alta carga, grandes volúmenes de datos (terabytes), aplicaciones críticas con altos requisitos de IOPS, o si necesita un aislamiento completo y el máximo control sobre el hardware. Si su proyecto crece activamente y alcanza los límites de un VPS, la transición a un dedicado será un paso lógico.

¿Cómo restablecer la contraseña del administrador de MongoDB?

Si olvidó la contraseña del administrador, deberá deshabilitar temporalmente la autenticación. Edite /etc/mongod.conf, comente o elimine la línea security.authorization: enabled. Reinicie MongoDB. Conéctese a mongosh sin autenticación, cambie a la base de datos admin, elimine el usuario administrativo antiguo (o actualice su contraseña) y luego cree uno nuevo. Después de esto, vuelva a agregar security.authorization: enabled a la configuración y reinicie MongoDB.

¿Por qué MongoDB consume tanta RAM?

MongoDB utiliza activamente la memoria RAM para el almacenamiento en caché de datos (a través del motor WiredTiger). Este es un comportamiento normal diseñado para mejorar el rendimiento, ya que la lectura de datos desde la RAM es significativamente más rápida que desde el disco. Si ve que MongoDB consume mucha RAM, a menudo es una buena señal que indica un almacenamiento en caché eficiente. Sin embargo, si el sistema comienza a usar swap, es una señal de falta de RAM y debe considerar aumentar la cantidad de memoria.

¿Es necesario usar replicación para un solo nodo en un VPS?

Para un solo nodo en un VPS, la replicación en el sentido clásico (crear múltiples copias de datos en diferentes servidores) no tiene sentido, ya que no hay otros servidores. Sin embargo, puede configurar un "conjunto de réplicas de un solo nodo" (single-node replica set). Esto es necesario si planea usar ciertas funciones de MongoDB, como transacciones o Change Streams, que requieren un conjunto de réplicas para funcionar. Para una instalación básica sin estos requisitos específicos, un conjunto de réplicas de un solo nodo no es obligatorio, pero tampoco hará daño.

¿Cómo restringir el acceso a MongoDB solo para mi aplicación?

Esto se logra mediante dos pasos clave:

  1. Configuración de bindIp en /etc/mongod.conf: Especifique la dirección IP específica de su aplicación (o varias direcciones IP) desde la cual se permiten las conexiones. Si la aplicación está en el mismo servidor, use 127.0.0.1.
  2. Configuración del firewall (UFW): Permita las conexiones entrantes al puerto 27017 solo desde la dirección IP de su aplicación: sudo ufw allow from SU_IP_DE_APLICACION to any port 27017. Esto proporcionará protección a nivel de red.

MongoDB no se inicia después de reiniciar el servidor. ¿Qué hacer?

Lo primero es revisar los registros de MongoDB: sudo tail -n 100 /var/log/mongodb/mongod.log. Causas frecuentes:

  • Corrupción de la base de datos: A veces, debido a un apagado incorrecto o falta de espacio en disco, los datos pueden corromperse. Intente iniciar MongoDB con la opción --repair (tenga cuidado, puede llevar mucho tiempo).
  • Falta de espacio en disco: Verifique df -h. Si el disco está lleno, MongoDB no podrá crear nuevos archivos o entradas de registro.
  • Permisos de acceso incorrectos: Asegúrese de que el usuario mongodb tenga permisos completos sobre los directorios /var/lib/mongodb y /var/log/mongodb.
  • Errores en mongod.conf: Una sintaxis incorrecta o parámetros erróneos pueden impedir el inicio.
Si el problema no se resuelve, es posible que necesite restaurar desde la última copia de seguridad funcional.

Conclusiones y próximos pasos

¡Felicidades! Ha instalado, configurado y protegido con éxito una instancia de MongoDB 7.0 en su VPS con Ubuntu Server 24.04 LTS. Ahora tiene una base de datos fiable y de alto rendimiento, lista para integrarse con sus aplicaciones. Ha implementado medidas de seguridad básicas pero cruciales, como la autenticación, la restricción del acceso a la red a través del firewall y, opcionalmente, el cifrado del tráfico mediante TLS/SSL. También ha configurado copias de seguridad automáticas, que son la piedra angular de cualquier sistema de producción.

Los siguientes pasos para optimizar y escalar su instalación de MongoDB pueden incluir:

  • Monitoreo del rendimiento: Integre MongoDB con sistemas de monitoreo como Prometheus y Grafana para rastrear métricas de rendimiento, uso de recursos y el estado de la base de datos en tiempo real.
  • Optimización de consultas e indexación: Analice las consultas lentas y cree índices apropiados para mejorar la velocidad de las operaciones de lectura en su base de datos.
  • Replicación y sharding: A medida que su aplicación crezca y la carga aumente, considere configurar la replicación para garantizar alta disponibilidad y tolerancia a fallos, así como el sharding para la escalabilidad horizontal y la distribución de datos entre varios servidores.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

instalación de MongoDB en VPS: configuración básica y seguridad
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.