Cómo instalar MongoDB en Ubuntu 16.04
Antes de instalar MongoDB conozcamos un poco a cerca de este sistema de base de datos NoSQL. Está desarrollado bajo el concepto de código abierto y se orientada a documentos. Según la documantación oficial del proyecto en español:
MongoDB (que proviene de «humongous») es la base de datos NoSQL líder y permite a las empresas ser más ágiles y escalables. Organizaciones de todos los tamaños están usando MongoDB para crear nuevos tipos de aplicaciones, mejorar la experiencia del cliente, acelerar el tiempo de comercialización y reducir costes.
Nota: En el momento de escribir este tutorial, los paquetes de MongoDB no han sido actualizados para utilizar el sistema de inicio systemd
que está habilitado, por defecto, en Ubunto 16.04.
Requisitos previos
Necesitas primero que todo un servidor con Ubuntu 16.04 y un usuario con privilegios de administración que no sea root
. Puedes encontrar cómo crear este usuario en la guía Configuración inicial de un servidor ubuntu.
Añadir el repositorio de MongoDB
MongoDB viene incluido en el repositorio oficial de Ubuntu. Sin embargo, el repositorio oficial del proyecto provee una versión más actualizada. Por esta razón es recomendable que instales el software desde el repositorio oficial del proyecto. Para esto debes agregar el repositorio a tu servidor.
Lo primero es importar la llave GPG del repositorio oficial de MongoDB :
1 |
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 |
Después de importar la llave debes ver algo como esto:
1 2 |
gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) |
Ahora debes agregar los detalles del repositorio, para que apt
sepa de dónde descargar los paquetes:
1 |
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list |
Luego actualiza la base de datos de paquetes de esta forma:
1 |
$ sudo apt-get update |
Instalar MongoDB
Ya lo tienes todo preparado, es hora de instalar MongoDB (la última versión) así:
1 |
$ sudo apt-get install -y mongodb-org |
Si quieres correr el software como servicio, necesitas crear un unit file para describir el servicio. Este archivo le dirá a systemd
cómo administrar el recurso (el servicio de MongoDB, en este caso). El unit file más común es un servicio y determina cómo iniciar, detener o reiniciar el software.
Para crear un unit file que gestione el servicio MongoDB, debes crear un archivo de configuración llamado mongodb.service
en el directorio /etc/systemd/system
. Puedes crearlo utilizando nano o tu editor de texto preferido:
1 |
$ sudo nano /etc/systemd/system/mongodb.service |
Copia el siguiente texto y a continuación guarda y cierra el archivo (ctrl + x
, luego y
, finalmente ENTER
).
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=High-performance, schema-free document-oriented database After=network.target [Service] User=mongodb ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf [Install] WantedBy=multi-user.target |
Estructura del archivo:
- La sección
Unit
contiene la descripción del servicio y las dependencias que deben satisfacerse antes de iniciar el mismo, MongoDB depende de una conexión de red, por lo que debes definirnetwork.target
. - La sección
Service
define cómo el servicio será iniciado. La directivaUser
especifica que el servidor correrá bajo el usuariomongodb
yExecStart
indica el comando de inicio para el servidor MongoDB. - La ultima sección,
Install
, le indica asystemd
cuándo el servicio debería ser iniciado automáticamente. La directivamulti-user.target
es una secuencia estándar de inicio de sistema, lo que significa que el servidor debería iniciarse automáticamente.
¡Listo! Ahora inicia el servicio que acabas de crear utilizando systemctl
:
1 |
$ sudo systemctl start mongodb |
Este comando no devuelve ningún resultado. Así que para saber si MongoDB se inició correctamente debes escribir lo siguiente:
1 |
$ sudo systemctl status mongodb |
1 2 3 4 5 6 7 8 9 |
● mongodb.service - High-performance, schema-free document-oriented database Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2016-04-25 14:57:20 EDT; 1min 30s ago Main PID: 4093 (mongod) Tasks: 16 (limit: 512) Memory: 47.1M CPU: 1.224s CGroup: /system.slice/mongodb.service └─4093 /usr/bin/mongod --quiet --config /etc/mongod.conf |
Lo último que debes hacer es habilitar el inicio automático de MongoDB cuando inicie el sistema:
1 |
$ sudo systemctl enable mongodb |
Ya tienes configurado y corriendo el servidor de MongoDB y puedes manejar el servicio utilizando systemctl. Sin embargo, quedan algunas cuestiones de seguridad que abordar en el siguiente punto.
Ajustar el Firewall
Si has seguido las instrucciones de la guía Configuración inicial de un servidor con ubuntu, para habilitar un firewall en tu servidor, entonces MongoDB es inaccesible desde internet.
Si tienes planes de utilizar MongoDB de forma local con aplicaciones corriendo en el mismo servidor, es recomendado y seguro. Sin embargo, si deseas poder conectarte a tu servidor de MongoDB desde internet debes permitir la conexión a internet a través de ufw
.
Para acceder a MongoDB en su puerto, por defecto 27017,
desde cualquier lugar puedes utilizar:
1 |
$ sudo ufw allow 27017 |
Sin embargo, habilitar el acceso a internet en la instalación por defecto daría acceso ilimitado a todas las bases de datos. Lo mejor sería darle acceso desde determinadas redes o desde un servidor específico. Veamos:
1 |
$ sudo ufw allow from direccion_ip_de_otro_servidor/32 to any port 27017 |
Puedes verificar el cambio escribiendo el siguiente comando:
1 |
$ sudo ufw status |
Deberías ver el tráfico del puerto 27017
permitido en la salida del comando. Si decides permitir que un IP específico se conecte al servidor de MongoDB, deberías ver la dirección IP en vez de Anywhere
en la salida.
1 2 3 4 5 6 7 8 9 |
Status: active To Action From -- ------ ---- <span class="highlight">27017 ALLOW Anywhere</span> OpenSSH ALLOW Anywhere <span class="highlight">27017 (v6) ALLOW Anywhere (v6)</span> OpenSSH (v6) ALLOW Anywhere (v6) |
Si deseas conocer más acerca de las reglas de configuración de ufw
consulta la guía: UFW: Reglas y comandos comunes.
Punto Final
Al llegar a este punto, ya lograste instalar MongoDB en tu servidor. Solo me resta alertarte sobre algo que te puede pasar en caso de que desees migrar un proyecto de PHP 5.x.x o superior, pero inferior a la 7.0.0. Y es que en PHP 7.x.x+ el driver de MongoDB cambió, no solo el nombre de la clase, sino también todo lo que implementa la misma. Por ello, debes tener mucho cuidado con los requisitos del proyecto antes de migrar. Puedes documentarte más acerca de estos cambios en el sitio oficial de PHP.
que tal, espero me puedas ayudar al hacer sudo systemctl start mongodb me arroja lo siguiente: Warning: mongodb.service changed on disk. Run ‘systemctl daemon-reload’ to reload units.
ya instale mongo de nuevo y aun sigue mostrando este error.
saludos
Hola, estás empleando Ubuntu 16.04? Has intentado ejecutar: systemctl daemon-reload o reiniciar la VPS?
Qué te muestra el comando: systemctl status mongodb?