Instalacion de MongoDB y acceso remoto desde un cliente local
Warning: This information may be outdated. Please note the date of the post.
Instalación de un servidor MongoDB y configuración para permitir el acceso remoto desde la red local.
Instalación de MongoDB sobre Debian Buster
Para instalar MongoDB vamos a utilizar la guía que se encuentra en la página oficial de MongoDB
- Importar la clave pública
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
- Agregar el repositorio
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
- Ahora vamos a instalar los paquetes de MongoDB escogiendo la versión más estable.
apt-get install -y mongodb-org
- Ponemos en marcha el gestor y vemos que efectivamente está en funcionando
systemctl start mongod
systemctl status mongod
root@debian:/etc/apt/sources.list.d# systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-12-08 20:46:01 CET; 2s ago
Docs: https://docs.mongodb.org/manual
Main PID: 3406 (mongod)
Memory: 59.2M
CGroup: /system.slice/mongod.service
└─3406 /usr/bin/mongod --config /etc/mongod.conf
dic 08 20:46:01 debian systemd[1]: Started MongoDB Database Server.
Creación de la base de datos de prueba, usuario administrador e introduccir datos
Para empezar a trabajar con mongodb, una vez se haya instalado solo debemos de ejecutar lo siguiente
mongo
Y estaremos dentro de la shell interactiva de mongo
usuario@debian:~$ mongo
MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("caecd2a1-a687-47a8-bf59-69e2a1644e33") }
MongoDB server version: 4.4.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
https://community.mongodb.com
---
The server generated these startup warnings when booting:
2020-12-13T12:36:05.865+01:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-12-13T12:36:06.531+01:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2020-12-13T12:36:06.531+01:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
Con el siguiente comando podemos ver las bases de datos que tenemos actualemente
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
Crear la base de datos
En mongodb no exite un comando ‘create’ , ejecutaremos ‘use’ para cambiar de base de datos y si la misma no existe se crea automáticamente.
> use academia
switched to db academia
Si volvemos a ejecutar ‘show dbs’ no aparecerá la nueva base de datos que hemos creado ya que está vacía, necesitaremos introducir los datos.
Crear un usuario administrador
Antes de crear un usuario con el que vamos a trabajar tenemos que crear el usuario administrador con el rol de root en la base de datos Admin
use admin
db.createUser({
user: "root",
pwd: "pass",
roles : [ "root" ]
})
Una vez creado entramos con el usuario root
mongo -u root -p pass
Ahora para crear un usuario en la nueva base de datos, haremos lo siguiente, que consiste en crear un usuario con su nombre y contraseña y además un rol que será el propietario de la base de datos que esta en uso actualmente, en este caso, ‘academia’.
db.createUser(
{
user: "celia",
pwd: "celia",
roles: ["dbOwner"]
}
)
Nos muestra que se ha creado correctamente.
> db.createUser(
... {
... user: "celia",
... pwd: "celia",
... roles: ["dbOwner"]
... }
... )
Successfully added user: { "user" : "celia", "roles" : [ "dbOwner" ] }
Podemos ver los usuarios creados con el comando
> show users;
{
"_id" : "academia.celia",
"userId" : UUID("d4f97ec7-67a8-487c-b3b8-9ac24d076a3f"),
"user" : "celia",
"db" : "academia",
"roles" : [
{
"role" : "dbOwner",
"db" : "academia"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
Ahora podemos cerrar sesión y iniciar con el nuevo usuario
mongo -u celia -p --authenticationDatabase academia
Tambien podemos identificarnos de la siguiente forma
Ejecutamos:
mongo
Y después dentro de la shell de mongo
> use academia
switched to db academia
> db.auth("celia","celia")
1
Introduccir datos de prueba
db.alumns.insert(
[
{
"nombre": "Manuel",
"apellidos": "Pérez",
"fecha_nacimiento": "1998-03-03",
"asignaturas":["lengua castellana","matemáticas"]
},
{
"nombre": "Celia",
"apellidos": "García",
"fecha_nacimiento": "1995-10-04",
"asignaturas":["física","matemáticas"]
},
{
"nombre": "Laura",
"apellidos": "Hernandez",
"fecha_nacimiento": "1995-08-04",
"asignaturas":["inglés","matemáticas"]
},
{
"nombre": "Miguel",
"apellidos": "García",
"fecha_nacimiento": "1995-07-03",
"asignaturas":["inglés","lengua castellana","francés"]
},
{
"nombre": "Aroa",
"apellidos": "Rodriguez",
"fecha_nacimiento": "1996-08-10",
"asignaturas":["matemáticas","francés"]
}
]
)
Vemos que se han insertado:
> db.alumns.find().pretty();
{
"_id" : ObjectId("5fd6568d3bab1b058f9c31a6"),
"nombre" : "Manuel",
"apellidos" : "Pérez",
"fecha_nacimiento" : "1998-03-03",
"asignaturas" : [
"lengua castellana",
"matemáticas"
]
}
{
"_id" : ObjectId("5fd6568d3bab1b058f9c31a7"),
"nombre" : "Celia",
"apellidos" : "García",
"fecha_nacimiento" : "1995-10-04",
"asignaturas" : [
"física",
"matemáticas"
]
}
{
"_id" : ObjectId("5fd6568d3bab1b058f9c31a8"),
"nombre" : "Laura",
"apellidos" : "Hernandez",
"fecha_nacimiento" : "1995-08-04",
"asignaturas" : [
"inglés",
"matemáticas"
]
}
{
"_id" : ObjectId("5fd6568d3bab1b058f9c31a9"),
"nombre" : "Miguel",
"apellidos" : "García",
"fecha_nacimiento" : "1995-07-03",
"asignaturas" : [
"inglés",
"lengua castellana",
"francés"
]
}
{
"_id" : ObjectId("5fd6568d3bab1b058f9c31aa"),
"nombre" : "Aroa",
"apellidos" : "Rodriguez",
"fecha_nacimiento" : "1996-08-10",
"asignaturas" : [
"matemáticas",
"francés"
]
}
Otros comandos útiles:
- Eliminar una collección entera
db.alumns.drop();
- Eliminar un documento
db.alumns.remove({"nombre": "Celia"});
Acceso remoto a mongo
Una vez creado los usuarios, el administrador, la base de datos y la colleción, vamos a hacer que cuando el servidor se encienda se inicie automáticamente el servicio de mongod.
root@debian:~# sudo systemctl enable --now mongod
Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /lib/systemd/system/mongod.service.
Ahora sí, vamos a utilizar un cliente para que pueda acceder a la base de datos de forma remota. Para eso vamos a editar el siguiente fichero
nano /etc/mongod.conf
En el parámetro bindIp le pasaremos la dirección 0.0.0.0 la cuál nos permite acceder desde cualquier máquina.
Además habilitaremos la seguridad para poder autenticarnos.
# network interfaces
network:
port: 27017
bindIp: 0.0.0.0
#security:
security:
authorization: 'enabled'
Tendremos otra máquina virtual que va a ser nuestro cliente, este cliente estará en la misma red.
vagrant@cliente:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8d:c0:4d brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
valid_lft 85065sec preferred_lft 85065sec
inet6 fe80::a00:27ff:fe8d:c04d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:fa:db:05 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.2/24 brd 10.0.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefa:db05/64 scope link
valid_lft forever preferred_lft forever
Comprobamos que desde el cliente podemos conectarnos de forma remota, especificando el usuario, la contraseña, la dirección ip de nuestro servidor de mongo y a la base de datos a la que nos conectamos.
vagrant@cliente:~$ mongo "mongodb://celia:celia@10.0.1.5:27017/academia"
MongoDB shell version v4.4.4
connecting to: mongodb://10.0.1.5:27017/academia?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cc6c341c-df2b-4d45-9fba-b94945357754") }
MongoDB server version: 4.4.4
> db.alumns.find().pretty();
{
"_id" : ObjectId("605112f7e81270a6e06234b8"),
"nombre" : "Manuel",
"apellidos" : "Pérez",
"fecha_nacimiento" : "1998-03-03",
"asignaturas" : [
"lengua castellana",
"matemáticas"
]
}
{
"_id" : ObjectId("605112f7e81270a6e06234b9"),
"nombre" : "Celia",
"apellidos" : "García",
"fecha_nacimiento" : "1995-10-04",
"asignaturas" : [
"física",
"matemáticas"
]
}
{
"_id" : ObjectId("605112f7e81270a6e06234ba"),
"nombre" : "Laura",
"apellidos" : "Hernandez",
"fecha_nacimiento" : "1995-08-04",
"asignaturas" : [
"inglés",
"matemáticas"
]
}
{
"_id" : ObjectId("605112f7e81270a6e06234bb"),
"nombre" : "Miguel",
"apellidos" : "García",
"fecha_nacimiento" : "1995-07-03",
"asignaturas" : [
"inglés",
"lengua castellana",
"francés"
]
}
{
"_id" : ObjectId("605112f7e81270a6e06234bc"),
"nombre" : "Aroa",
"apellidos" : "Rodriguez",
"fecha_nacimiento" : "1996-08-10",
"asignaturas" : [
"matemáticas",
"francés"
]
}
