En este artículo explicaremos cómo instalar MongoDB en CentOS 7 paso a paso, un servicio de bases de datos NoSQL cada vez más popular en el desarrollo web, que podrás hacer funcionar en tu servidor o VPS CentOS en unos instantes.
Contenido
Antes de instalar MongoDB en CentOS 7
Si quieres seguir esta breve guía de instalación de MongoDB en CentOS 7 sólo tienes que comprobar que cumples estos mínimos requerimientos:
- Una instalación actualizada de CentOS 7.
- Acceso a consola con un usuario con permisos de sudo, o el mismo root.
- Conexión a Internet.
Cómo instalar MongoDB en CentOS 7
Si quieres instalar MongoDB en CentOS 7 comprobarás que los únicos paquetes disponibles pertenecen al repositorio EPEL y corresponden a la versión 2.6, bastante obsoletos teniendo en cuenta que las últimas versiones oficiales son las 5.0.x (en el momento de redactar este tutorial).
Por ello es mejor instalar el repositorio oficial de MongoDB en CentOS 7 para tenerlo como fuente de estos paquetes y futuras actualizaciones.
Empezaremos creando un nuevo archivo de repositorio:
~$ sudo nano /etc/yum.repos.d/mongodb.org-5.0.repo
El contenido será el siguiente:
[mongodb-org-5.0] name=Repositorio de MongoDB para CentOS 7 baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
Guardados los cambios, actualizaremos las listas de paquetes:
~$ sudo yum update
El paquete que necesitamos es mongodb-org, que podemos instalar con yum:
~$ sudo yum install -y mongodb-org
Tras la descarga e instalación del paquete mongodb-org y sus dependencias se crea un nuevo servicio en CentOS 7, mongod.service o mongod, que no queda en ejecución aunque sí está habilitado para iniciar automáticamente con el arranque del sistema.
Puedes arrancar por primera vez el servicio mongod con systemctl:
~$ sudo systemctl start mongod
Y si no quieres tener el servicio siempre disponible, es decir, que no inicie automáticamente con CentOS 7, lo podrías deshabilitar también con systemctl:
~$ sudo systemctl disable mongod
Puedes comprobar en cualquier momento el estado del servicio MongoDB en CentOS 7 con el comando systemctl status mongod
:
Comprobamos que el servicio está en ejecución, a la espera de conexiones. Podemos conectar localmente usando el cliente de consola mongosh:
~$ mongosh Current Mongosh Log ID: 62583f87924276f5fd5a8050 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1 Using MongoDB: 5.0.7 Using Mongosh: 1.3.1 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy). You can opt-out by running the disableTelemetry() command. ------ The server generated these startup warnings when booting: ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted ###: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' ###: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' ------ test>
Bastante información de golpe, ¿no?
Cómo configurar MongoDB en CentOS 7
Parte del texto que acabamos de ver al conectar localmente a MongoDB con el cliente habla sobre un servicio de telemetría que monitoriza nuestra actividad con fines estadísticos y de mejora del producto.
Si quieres desactivar este servicio, usa el siguiente comando:
> disableTelemetry()
Podemos cerrar la conexión:
> exit
Cómo desactivar THP o Transparent Huge Pages en CentOS 7
Por otro lado nos econtramos con un par de alertas sobre THP o «Transparent Huge Pages«, en el que los valores de enabled y defrag son ambos always cuando lo recomendable por rendimiento es que fueran never:
~$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
Y:
~$ cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
Vamos a editar la configuración del servicio para desactivar estos valores de THP en Fedora 35 antes de iniciar MongoDB:
~$ sudo nano /usr/lib/systemd/system/mongod.service
Buscamos la parte de las directivas ExecStart, que será algo como esto:
... [Service] ... ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb ...
Y añadimos una nueva sentencia ExecStartPre:
... ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/ena$ ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ...
Guardamos y cerramos el archivo. Ahora debemos hacer que Systemd quede al corriente de los cambios que acabamos de realizar:
~$ sudo systemctl daemon-reload
Ya podemos reiniciar el servicio MongoDB:
~$ sudo systemctl restart mongod
Para ver si ha funcionado, podemos volver comprobar el valor de THP:
~$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
Efectivamente, se han desactivado estos valores.
Podremos comprobar que el servicio ya no nos lanza estas alertas al iniciar la conexión:
~$ mongosh Current Mongosh Log ID: 6258426e96de8049208c5875 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1 Using MongoDB: 5.0.7 Using Mongosh: 1.3.1 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ ------ The server generated these startup warnings when booting: ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted ------ test>
Acceso con contraseña a MongoDB en CentOS 7
Puede que te interese disponer de usuarios que accedan con contraseña al servicio MongoDB. Si es así debemos activar la autenticación en mongod.conf:
~$ sudo nano /etc/mongod.conf
Buscamos la directiva security:
... #security: ...
Está desactivada, así que la activaremos eliminando el carácter # al inicio de línea y a continuación añadiremos una subdirectiva authorization:
... security: authorization: enabled ...
No utilices tabulaciones en el archivo mongod.conf, ya que provocarán errores. En su lugar, utiliza espacios en blanco.
Guardamos los cambios, cerramos el archivo y reiniciamos el servicio MongoDB:
~$ sudo systemctl restart mongod
Conectamos de nuevo al servicio con el cliente mongosh:
~$ mongosh
Conectamos a la base de datos admin:
> use admin
Y creamos un usuario con contraseña y rol de administración:
> db.createUser({user: "instalador", pwd: "XXXXXXXX", roles: [{role: "root", db: "admin"}]})
Ya podemos salir del cliente:
> exit
Ahora, si accedemos con el usuario que acabamos de crear, se nos solicita la contraseña:
~$ mongosh -u instalador Enter password: ******** ... >
Acceso remoto a MongoDB en CentOS 7
Para acceder remotamente al servicio MongoDB en CentOS 7 debemos editar la configuración del servicio:
~$ sudo nano /etc/mongod.conf
Buscaremos la directiva bindIp (importan las mayúsculas):
... bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. ...
Tal y como describe el comentario, sustituyendo el valor 127.0.0.1 por 0.0.0.0 dejará de ser un servicio local para convertirse en un servicio al que pueda conectarse remotamente:
... bindIp: 0.0.0.0 ...
Guardados los cambios, habrá que reiniciar el servicio mongod:
~$ sudo systemctl restart mongod
Cómo configurar el firewall
Si tienes activado el firewall de CentOS 7, como ocurre por defecto, necesitarás añadir una regla para el puerto 27017 TCP en el que espera conexiones MongoDB:
~$ sudo firewall-cmd --permanent --add-service=mongodb
Aplicamos los cambios recargando la configuración del firewall:
~$ sudo firewall-cmd --reload
Ahora podremos conectar desde otro sistema que tenga instalado el cliente mongosh añadiendo como parámetro la dirección de la máquina CentOS 7 en la que hemos instalado el servicio MongoDB, e indicando también el usuario con el que vamos a conectar:
~$ mongosh --host centos7.local.lan -u instalador
Conclusión
Ahora que sabes cómo instalar y configurar MongoDB en CentOS 7 ya puedes empezar a trabajar con este servicio de bases de datos NoSQL en tu servidor o VPS.
Si te ha surgido alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario.
¡Apoya este sitio!
¿Ya tienes el servicio funcionando en tu sistema gracias a nuestra pequeña guía de instalación y configuración? Si es así y te apetece agradecérnoslo puedes hacerlo dejando tan solo 1 $ de propina en PayPal para una CocaCola:
O, si te sientes especialmente agradecido, puedes invitarnos a un café:
¡Gracias!