En este post vamos instalar y configurar MongoDB 3.4 en una máquina con Ubuntu 16.04.

Lo primero que tenemos que hacer es añadir el repositorio de MongoDB:

# sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 0C49F3730359A14518585931BC711F9BA15703C6
# echo “deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
# sudo apt-get update

Después, para instalarlo, escribimos en el terminal:

# sudo apt-get install -y mongodb-org

Cuando haya terminado de instalarse, lo podemos ejecutar desde la consola escribiendo

# sudo service mongod start

Para comprobar que se está ejecutando bien hay que mirar el archivo /var/log/mongodb/mongod.log. Si el servidor está a la espera de conexiones es que se ha iniciado bien.

El servidor se puede parar desde el terminal escribiendo

# sudo service mongod stop

En el mismo archivo de antes podemos comprobar que se ha parado sin errores.

Y para conectarnos a la consola de MongoDB basta con ejecutar

# mongo

Configuración de la seguridad

Ahora vamos a configurar MongoDB para aumentar la seguridad del mismo. Lo primero que vamos a hacer es crear un usuario administrador. Para ello nos conectamos a la consola de MongoDB.

# mongo

> use admin

> db.createUser({

user: “root”,

pwd: “pass”,

roles: [{ role: “userAdminAnyDatabase”, db: “admin” }] });

Ya hemos creado el usuario administrador root. Para conectarnos usando ese usuario, hay dos formas:

  1. Conectarnos directamente a la consola ya autenticados (código de la izquierda).
  2. Conectarnos a la consola y después autenticarnos (código de la derecha).

# mongo -u “root” -p “pass” –authenticationDatabase “admin”

# mongo

> use admin

> db.createUser(“root”, “pass”);

Nota: es muy importante crear primero el usuario y después modificar la configuración, ya que si no está creado el usuario no podremos autenticarnos en MongoDB y tendremos que deshacer los cambios y empezar desde el paso anterior.

Ya está creado el usuario administrador, pero ahora hace falta activar la autenticación en el archivo de configuración de MongoDB. Para ello tenemos que modificar el archivo /etc/mongod.conf.

# sudo nano /etc/mongod.conf

# Where and how to store data.

storage:

dbPath: /db/db1

journal:

enabled: true

# where to write logging data.

systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log

# network interfaces

net:

port: 27017

bindIp: 127.0.0.1

security:

authorization: enabled

Hay muchas configuraciones en este fichero, pero nos vamos a centrar en tres:

  1. Con dbPath seleccionamos el directorio donde se van a guardar todos los datos de nuestras bases de datos. Hay que tener cuidado con los permisos, ya que el usuario que ejecuta MongoDB tiene que poder acceder. Para dar permisos al usuario de MongoDB puedes ejecutar sudo chown mongodb:mongodb -R /db/db1.
  2. En bindIp configuramos la IP que tendrá acceso a MongoDB. En mi caso, sólo aceptaría peticiones de la propia máquina, por lo que pondríamos “localhost” o “127.0.0.1”, si se quisiera dar acceso a alguna IP externa a nuestro MongoDB, pues pondríamos esa IP.
  3. Para activar la autenticación se añaden las líneas que están en el código en negrita (security:’ y también ‘authorization: enabled’).

Ya sólo nos quedaría crear un usuario y asignarle permisos para una base de datos.

> use admin

> db.createUser({

user: “dbuser”,

pwd: “dbpass”,

roles: [{ role: “readWrite”, db: “test” }] });

El usuario dbuser tendrá como authorizationDatabase la base de datos admin porque es en la que se ha creado, pero tiene permisos de lectura y escritura en la base de datos test.

MongoDB 3.4 + PHP 7

En PHP 7 ha cambiado la versión de la librería de MongoDB. Para instalarla tenemos que ejecutar.

# sudo apt-get install libssl-dev pkg-config libbson libmongoc php7.0-dev

# sudo pecl install mongodb

En el archivo /etc/php/7.0/apache2/php.ini añadimos:

extension=mongodb.so

Para finalizar, sólo tenemos que reinicar Apache

# sudo service apache2 restart

Con esto ya hemos terminado de instalar, configurar MongoDB 3.4 y hemos hecho que sea accesible desde PHP.