Introducción
¿Cómo instalar MongoDB en CentOS7? Primero es necesario saber que MongoDB es una base de datos orientada a documentos que es gratuita y de código abierto. Se clasifica como una base de datos NoSQL porque no se basa en una estructura de base de datos tradicional basada en tablas. En cambio, utiliza documentos similares a JSON con esquemas dinámicos. A diferencia de las bases de datos relacionales, MongoDB no requiere un esquema predefinido antes de agregar datos a una base de datos. Tu puedes modificar el esquema en cualquier momento de ser necesario sin tener que configurar una nueva base de datos con un esquema actualizado.
Este tutorial lo guía a través de la instalación de MongoDB Community Edition en un servidor CentOS 7.
Pre-Requisitos
Antes de seguir este tutorial, asegúrese de tener un usuario normal, non-root con privilegios sudo. También puedes aprender más sobre cómo configurar un usuario con estos privilegios en nuestra guía “Cómo crear un usuario de sudo en CentOS”.
Paso 1 – Agregar el repositorio MongoDB
El paquete mongodb-org no existe en el repositorio default para CentOS. Sin embargo, MongoDB se mantiene en un repositorio dedicado. Vamos a agregarlo a nuestro servidor.
Con el editor vi
hay que crear un archivo .repo
para yum
, la utilidad de administración de paquetes para CentOS:
1 |
$ sudo vi /etc/yum.repos.d/mongodb-org.repo |
Despues, visita la sección en MongoDB sobre cómo Instalar en Red Hat y agrega la información del repositorio para la última versión estable al archivo:
1 2 3 4 5 6 7 8 |
/etc/yum.repos.d/mongodb-org.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releaserver/mongodb-org/3.4/x86_64 gpgcheck=1 enabled=1 gpgpey=https://www.mongodb.org/static/pgp/server-3.4.asc |
Guarde y cierre el archivo.
Antes de seguir adelante, debemos verificar que el repositorio MongoDB existe dentro de la utilidad yum
. El comando repolist
muestra una lista de repositorios habilitados:
1 |
$ yum repolist |
1 2 3 4 5 6 7 |
Output . . . repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-3.2/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates |
Con el MongoDB Repository
listo, podemos proceder con la instalación.
Step 2 – Installing MongoDB
Podemos instalar el paquete de mongodb-org
de el repositorio de terceros que usa la utilidad yum
.
1 |
$ sudo yum install mongodb-org |
Hay dos avisos como Is this ok [y / N]:
El primero permite la instalación de los paquetes MongoDB y en el segundo importa una key GPG. El editor de MongoDB firma su software y yum usa una key para confirmar la integridad de los paquetes descargados. En cada aviso, escribe Y y luego presione la tecla ENTER.
Lo siguiente es iniciar el servicio de MongoDB con la utilidad systemctl
1 |
$ sudo systemctl start mongod |
Aunque no los utilizaremos en este tutorial, también puede cambiar el estado del servicio MongoDB con los comandos de reload
y stop
.
El comando reload
manda llamar a mongod para que proceda a leer el archivo de configuración, /etc/mongod.conf
y aplica cualquier cambio sin necesidad de reiniciar.
1 |
$ sudo systemctl reload mongod |
El comando stop
para cualquier proceso de mongod
1 |
$ sudo systemctl stop mongod |
La utilidad systemctl
no proporciona un resultado después de ejecutar el comando start
, pero podemos revisar que el servicio está corriendo viendo al final del archivo mongod.log
con el comando tail
:
1 |
$ sudo tail /var/log/mongod.log |
1 2 3 |
Output . . . [initandlisten] waiting for connections on port 27017 |
Una salida sobre waiting for connections confirma que MongoDB ha iniciado satisfactoriamente y que puedes acceder a la base de datos con MongoDB Shell:
1 |
$ mongo |
Nota: Cuando lances el MongoDB Shell puede que veas una advertencia como esta:
** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
MongoDB es una aplicación threaded. Puede ejecutar procesos adicionales para soportar la carga de trabajo. La advertencia indica que para que MongoDB sea más efectivo, la cantidad de procesos que está autorizada a girar debería de ser de la mitad de la cantidad de archivos que puede tener abiertos en ese momento. Para resolver esa advertencia, después de processes
valor rlimit para mongod
editando el 20-nproc.conf
archivo:
1 |
$ sudo vi /etc/security/limits.d/20-nproc.conf |
Agrega las siguientes lineas al final del archivo:
1 2 3 |
/etc/security/limits.d/20-nproc.conf . . . mongod soft nproc 32000 |
Para el nuevo limite disponible a MongoDB, hay que reiniciarlo usando la utilidad systemctl
:
1 |
$ sudo systemctl restart mongod |
Después de todo esto, cuanto te conectes a MongoDB Shell, la advertencia tendría que haber desaparecido.
Para aprender a interactuar con MondoDB desde el shell, puedes revisar la salidas de el método db.help()
que proporciona una lista de métodos para el objeto db.
1 |
> db.help() |
1 2 3 4 5 6 7 8 9 10 11 12 |
Output DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . . |
Deja corriendo el proceso de mongod en segundo plano, pero quita el shell con el comando exit:
1 |
> exit |
1 2 |
Output Bye |
Paso 3 – Verificación de Inicio
Debido a que una aplicación basada en una base de datos no puede funcionar sin una base de datos, nos aseguramos de que MongoDB daemon, mongod
, va a iniciar con el sistema.
Usa la utilidad systemctl
para checar el estatus de inicio:
1 |
$ systemctl is-enabled mongod; echo $? |
Una salida de cero confirma un daemon habilitado, es lo que nosotros queremos. un color uno, de lo contrario, confirma un daemon deshabilitado que no ha iniciado.
1 2 3 4 |
Output . . . enabled 0 |
Cuando pase un evento de un deamon deshabilitado, usa la utilidad systemctl
para habilitarlo:
1 |
$ sudo systemctl enable mongod |
Ahora nosotros tenemos corriendo una instancia de MongoDB que automáticamente correrá después de reiniciar el sistema.
Paso 4 – Importando un conjunto de datos de ejemplo (opcional)
A diferencia de otros servidores de bases de datos, MongoDB no viene con datos en su base de datos test. Desde que nosotros no queremos experimentar con nuevo software usando datos de producción, vamos a descargar un ejemplo de dataset desde la sección de “Import Example Dataset” de la documentación “Getting Started with MondoDB”. El documento JSON contiene una colección de restauración, el cual nosotros usaremos para practicar cómo interactuar con MongoDB y evitar causar un daño sensible en nuestros datos.
Inicia por moverse dentro de un directorio editable:
1 |
$ cd /tmp |
Usa el comando curl
y el link de MongoDB para descargar el archivo JSON:
1 2 |
$ curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset /primer-dataset.json |
El comando mongoimport
insertará los datos dentro del dataset test. El flag --db
define en donde se usará la base de datos mientras que la flag --collection
específica en que parte de la base de datos la información se almacenará, y el flag --file
le dice al comando cuál de los archivos realizará la acción de importar:
1 |
$ mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json |
La salida confirma la importación de datos desde el archivo primer-dataset.json
:
1 2 3 |
<span style="color: #999999;">Output</span> connected to: localhost imported 25359 documents |
Con la base de datos de muestra puesta, nosotros podemos realizar una consulta en su contra.
Hay que relanzar MongoDB Shell:
1 |
$ mongo |
El shell selecciona el dataset test
por default, la cual es de donde nosotros importamos nuestros datos.
Consulta la colección de restaurants con el método find()
para mostrar una lista de todas las restauraciones en el dataset. Ya que nuestra colección contiene alrededor de 25,000 entradas, usa el método óptimo limit()
para reducir la consulta de salida y especificar un número. Adicional a esto el método pretty()
hace la información más legible para humanos con nuevas líneas e identación.
1 |
> db.restaurants.find().limit( 1 ).pretty() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Output { "_id" : ObjectId("57e0443b46af7966d1c8fa68"), "address" : { "building" : "1007", "coord" : [ -73.856077, 40.848447 ], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [ { "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : "A", "score" : 2 }, { "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "A", "score" : 6 }, { "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2011-03-10T00:00:00Z"), "grade" : "B", "score" : 14 } ], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" } |
Tu puedes seguir usando el dataset de muestra para familiarizarte con MongoDB o eliminiarlo con el metodo db.restaurants.drop()
:
1 |
> db.restaurants.drop() |
Por último, para salir del shell utiliza el comando exit
:
1 |
> exit |
1 2 |
Output Bye |
Conclusión
En este tutorial, cubrimos cómo agregar un repositorio de terceros a yum, instalando el database server de MongoDB, importando una muestra del dataset y realizando una consulta simple. Nosotros apenas y escarbamos la superficie de las capacidades de MongoDB. Tu puedes crear tu propia database con varias colecciones, llenarlas con muchos documentos y empezar a construir una aplicación robusta.