Cómo instalar el servidor de bases de datos NoSQL Apache CouchDB en Debian 11

Apache CouchDB es una base de datos NoSQL de código abierto desarrollada por la Apache Software Foundation. Cada base de datos es una colección de documentos en formato JSON. Cada documento se compone de una serie de campos y archivos adjuntos. Viene con una API restful que te permite crear, editar y eliminar documentos de la base de datos. Admite dos modos: independiente y en clúster. Si lo utilizas en un único servidor, puedes usar el modo autónomo. El modo agrupado te ayudará si utilizas más de un servidor.

Este tutorial te enseñará a instalar el servidor de bases de datos Apache CouchDB en un servidor Debian 11. También aprenderás a realizar algunas operaciones básicas con la base de datos y a acceder a CouchDB a través de una URL pública utilizando el servidor web Caddy.

Requisitos previos

  • Un servidor con Debian 11.

  • El paqueteSudo está instalado.

    $ apt install sudo
    
  • Un usuario no root con privilegios sudo.

  • Todo está actualizado.

    $ sudo apt update && sudo apt upgrade
    
  • Un nombre de dominio completamente cualificado (FQDN), como, couchdb.example.com para acceder a CouchDB a través de una URL pública con HTTPS.

Paso 1 – Instalar las utilidades

Antes de seguir adelante con la instalación, necesitamos instalar algunas herramientas que serán necesarias para el tutorial. Ejecuta el siguiente comando para instalarlas.

$ sudo apt install -y curl apt-transport-https gnupg nano lsb-release 

Paso 2 – Añadir el repositorio de CouchDB

El primer paso es importar la clave GPG de CouchDB. Ejecuta el siguiente comando para importar la clave.

$ curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg >/dev/null 2>&1

Añade el repositorio de CouchDB a la lista de repositorios del sistema.

$ echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ `lsb_release -cs` main" \
    | sudo tee /etc/apt/sources.list.d/couchdb.list >/dev/null

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Paso 3 – Instalar CouchDB

Ejecuta el siguiente comando para instalar CouchDB.

$ sudo apt install couchdb -y

El instalador de CouchDB te pedirá automáticamente que configures los ajustes básicos. En el primer paso, te preguntará si quieres utilizarlo en una configuración de un solo servidor o en varios nodos. Como vamos a instalarlo en un único servidor, mantén la opción seleccionada y pulsa Enter para continuar.

Tipo de configuración del servidor CouchDB

A continuación, se te pedirá que establezcas un nombre de cookie. Elige el nombre que quieras.

Configuración de cookies de CouchDB Erlang

A continuación, se te pedirá que establezcas una dirección de enlace para el servicio de CouchDB. Como lo estamos instalando en un servidor y necesitaremos acceder a él a través de un panel de control de la interfaz de usuario, establece 0.0.0.0 como dirección de enlace. Si quieres limitar el acceso al servidor de CouchDB a una dirección IP, utilízala.

Configuración de la dirección de enlace de CouchDB

A continuación, se te pedirá que crees una contraseña de administrador para su cuenta de administrador por defecto.

Configuración de la contraseña del administrador de CouchDB

Se te pedirá que verifiques la contraseña de nuevo.

Aviso de verificación de la contraseña de CouchDB

Pulsa Enter para completar el proceso de instalación.

Paso 4 – Verificar la instalación de CouchDB

Para verificar si la instalación se ha realizado correctamente, ejecuta el siguiente comando.

$ curl http://127.0.0.1:5984/

Te devolverá una salida con formato JSON con información sobre CouchDB.

{"couchdb":"Welcome","version":"3.2.2","git_sha":"d5b746b7c","uuid":"7a20b1eadd803f1c0d77fb9617c7f3de","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}

La salida del shell no tiene formato. Así es como se ve al formatear.

{
   "couchdb":"Welcome",
   "version":"3.2.2",
   "git_sha":"d5b746b7c",
   "uuid":"7a20b1eadd803f1c0d77fb9617c7f3de",
   "features":[
      "access-ready",
      "partitioned",
      "pluggable-storage-engines",
      "reshard",
      "scheduler"
   ],
   "vendor":{
      "name":"The Apache Software Foundation"
   }
}

También puedes acceder a ella a través de la web visitando la URL http://<yourserverIP>:5984/. Pero antes de hacerlo, tenemos que abrir el puerto en nuestro cortafuegos. Suponiendo que estés utilizando el Firewall sin complicaciones (ufw), ejecuta el siguiente comando para abrir el puerto.

$ sudo ufw allow 5984/tcp

Abre la URL http://<yourserverIP>:5984 en tu navegador. Verás la siguiente pantalla. La siguiente salida fue capturada en Firefox. En otros navegadores, simplemente verás la salida en bruto que obtuviste en tu terminal.

Página web de CouchDB en Firefox

Paso 5 – Acceder a CouchDB

CouchDB incluye una interfaz gráfica de usuario basada en la web llamada Fauxton para gestionar y crear bases de datos. Puedes acceder a ella a través de la URL http://<yourserverIP>:5984/_utils/. Inicia la URL en tu navegador favorito y verás la siguiente pantalla de acceso.

Pantalla de inicio de sesión de CouchDB

Introduce admin como nombre de usuario y la contraseña creada anteriormente. Pulsa el botón de inicio de sesión para continuar. A continuación, accederás al panel de control de CouchDB.

Panel de control de CouchDB

Aquí verás las dos bases de datos que se crearon durante la instalación. La base de datos _users, como era de esperar, gestiona la información de los usuarios de la plataforma CouchDB y la base de datos _replicator contiene información sobre cualquier base de datos u operación de replicación.

También verás una barra lateral con todo tipo de opciones que puedes utilizar con CouchDB.

Paso 6 – Operaciones básicas de la base de datos con la interfaz de CouchDB

La interfaz Fauxton de CouchDB nos permite realizar operaciones CRUD básicas (crear, leer, actualizar y eliminar). Empecemos por crear una nueva base de datos.

Crear una base de datos

Para crear una nueva base de datos, haz clic en el enlace Crear base de datos de la pantalla principal. Se abrirá la siguiente ventana emergente.

Ventana emergente para crear una base de datos en CouchDB

Introduce el nombre de la base de datos que quieres crear y haz clic en el botón Crear.

Esto creará una nueva base de datos y abrirá la siguiente pantalla.

Panel de la base de datos CouchDB

Crear documento

Ahora que tenemos una base de datos, vamos a crear un documento en ella. Haz clic en el botón Crear documento para empezar. Obtendrás la siguiente pantalla de nuevo documento precargada con un objeto JSON y un _id con un Identificador Único Global (GUID).

Ventana del nuevo documento de CouchDB

Vamos a añadir algunos datos añadiendo algunos campos más de la siguiente manera. Si quieres cambiar el valor del campo _id , puedes hacerlo pero sólo antes de crear el documento. No puedes cambiar su valor una vez creado el documento. Sin embargo, puedes editar otros campos en cualquier momento.

{
  "_id": "0b4ad0d607479c09bb9121b146007363",
  "Name": "Navjot Singh",
  "role": "writer",
  "skills": "linux"
}

Datos del nuevo documento de CouchDB

Haz clic en el botón Crear documento cuando hayas terminado de añadir los campos para guardar el nuevo documento. Volverás a la siguiente página de Todos los Documentos.

CouchDB Todos los documentos

Para ver el contenido de los documentos, puedes hacer clic en el enlace {} JSON.

CouchDB Ver documento

Para editar el documento, puedes hacer clic en el icono del lápiz que se muestra a la derecha o volver a la vista de Metadatos y hacer clic en el enlace del documento. Cambia los valores de cualquiera de los elementos y haz clic en Guardar documento para finalizarlo.

Eliminar el documento

Para eliminar el documento, haz clic en la marca de verificación que hay delante del documento y selecciona el botón de eliminar en la parte superior, como se muestra a continuación.

CouchDB Eliminar documento

Paso 7 – Operaciones básicas de la base de datos mediante la línea de comandos

Aunque el uso de la interfaz web es una forma más sencilla de utilizar CouchDB, se puede conseguir una mayor eficiencia realizando las mismas operaciones a través de la línea de comandos.

Crear la base de datos

Antes de entrar en la creación de nuestra base de datos, vamos a definir una variable para la URL de conexión. En nuestros ejemplos utilizaremos una autenticación simple de texto plano. Como necesitaremos autenticar cada comando, es mejor utilizar una variable predefinida para ello. Puedes utilizar localhost o 127.0.0.1 para conectarte a la instalación de CouchDB.

$ HOST="http://admin:[email protected]:5984"

Nota: Utilizar una contraseña de texto plano no es el mejor método y no debería utilizarse en entornos de producción. Puedes consultar la documentación oficial de CouchDB para conocer métodos de autenticación más seguros.

Ahora que hemos definido la URL del host, vamos a intentar crear otra base de datos con el siguiente comando.

$ curl -X PUT $HOST/another_db

El nombre de la base de datos es another_db. Y necesitamos proporcionar la contraseña de administrador para el comando.

Crear un documento

Para crear un documento, ejecuta el siguiente comando.

$ curl -X POST -d '{"todo":"task 1", "done":false}' $HOST/another_db -H "Content-Type:application/json"

La bandera -X indica que estamos realizando una operación HTTP POST. La bandera -H especifica el tipo de contenido que estamos enviando, que aquí es JSON. Y la bandera -d especifica el contenido JSON real que estamos añadiendo.

El comando anterior generará automáticamente un ID para el documento. Generará la siguiente salida indicando que el comando ha tenido éxito.

{"ok":true,"id":"0b4ad0d607479c09bb9121b14600c6ee","rev":"1-2fc1d70532433c39c9f61480607e3681"}

Como puedes ver, se ha generado automáticamente un ID para el documento. Si quieres especificar un ID personalizado, puedes hacerlo de la siguiente manera.

$ curl -X POST -d '{"_id":"random_task", "todo":"task 2", "done":false}' $HOST/another_db -H "Content-Type:application/json"
{"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}

Crear documentos en bloque

También puedes añadir documentos en bloque.

$ curl -X POST -d '{"docs": [{"todo":"task 3", "done":false}, {"todo":"task 4", "done":false}]}' $HOST/another_db/_bulk_docs -H "Content-Type:application/json"

Como puedes ver, cuando estamos insertando varios documentos, el cuerpo del POST contiene un objeto con un campo docs. Este campo lleva una matriz de documentos que se van a insertar en la base de datos. Al insertar un solo documento, la petición POST se envía a la base de datos ($HOST/another_db). Pero cuando necesitamos insertar varios documentos, la petición debe enviarse a la URL $HOST/another_db/_bulk_docs.

Recibirás una salida similar.

[{"ok":true,"id":"0b4ad0d607479c09bb9121b14600cb04","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"0b4ad0d607479c09bb9121b14600d9ef","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]

Aquí puedes ver que la salida contiene el ID de los dos nuevos documentos.

Leer un documento

Para leer un documento de la base de datos, tienes que especificar su ID. Ejecuta el siguiente comando para recuperar el documento random_task. Como hemos utilizado una petición HTTP POST para añadir datos, es lógico que para recuperarlos tengas que utilizar una petición GET.

$ curl -X GET $HOST/another_db/random_task

Recibirás la siguiente salida.

{"_id":"random_task","_rev":"1-bceeae3c4a9154c87db1649473316e44","todo":"task 2","done":false}

Aquí, anota el campo _rev del documento. Este campo es útil cuando necesites editar o eliminar un documento.

Editar un documento

Para editar un documento, tienes que utilizar el campo _rev. Cualquier solicitud que no incluya el campo _rev es rechazada automáticamente por CouchDB durante la edición. Dado que CouchDB actualiza todo el documento, hay que enviar todo el documento en el cuerpo de la solicitud durante la operación de edición.

Actualicemos el documento random_task utilizando el siguiente comando.

$ curl -X PUT -d '{"_rev":"1-bceeae3c4a9154c87db1649473316e44", "todo":"task 2", "done":true}' $HOST/another_db/random_task

Asegúrate de sustituir el valor del campo _rev por el valor que obtuviste al leer el documento. Debe coincidir con el valor del documento real.

Recibirás una salida similar a la siguiente.

{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

Si te das cuenta, los datos del campo rev han cambiado. Cualquier cambio posterior en el documento requerirá que utilices este nuevo valor de rev.

Eliminar un documento

Para eliminar un documento, tendrás que especificar el ID y el valor actualizado de rev. Vamos a eliminar el documento random-task.

$ curl -X DELETE $HOST/another_db/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c

Asegúrate de hacer coincidir el valor del campo rev en el comando con el valor de tu documento real. Obtendrás una salida similar a la siguiente.

{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

Ver datos

Comprobemos la lista de todas las bases de datos del servidor.

$  curl -X GET $HOST/_all_dbs

Enumera todos los documentos de una base de datos concreta.

$ curl -X GET $HOST/another_db/_all_docs

Paso 8 – Instalar el Servidor Caddy

Hasta ahora, hemos accedido a CouchDB utilizando la dirección IP del servidor. Hay un método fácil si quieres sustituirla por tu nombre de dominio y usar SSL delante para hacerlo más seguro. Para nuestro tutorial, usaremos Caddy Server ya que es ligero y funciona con una configuración mínima, y viene con la creación de SSL incorporada.

Ejecuta el siguiente comando para instalar algunos paquetes requeridos por Caddy. Puede que ya estén instalados en tu servidor.

$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

Instala la clave GPG de Caddy y añade el repositorio oficial a la lista de repositorios de Debian.

$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

Instala el servidor de Caddy.

$ sudo apt update
$ sudo apt install caddy

Ejecuta el siguiente comando para verificar la instalación.

$ caddy version
v2.5.1 h1:bAWwslD1jNeCzDa+jDCNwb8M3UJ2tPa8UZFFzPVmGKs=

Paso 9 – Configurar Caddy

Para configurar Caddy para que funcione como servidor proxy inverso, tienes que configurar el archivo Caddyfile. Abre el Caddyfile para editarlo.

$ sudo nano /etc/caddy/Caddyfile

Sustituye el código que contiene por el siguiente.

couchdb.example.com {
        reverse_proxy localhost:5984

        tls [email protected]

        log {
                output file /var/log/caddy/couchdb.log
        }
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Ejecuta el validador de Caddy para comprobar si hay algún problema.

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

Si obtienes algún error de formato, ejecuta el siguiente comando para solucionarlo.

$ sudo caddy fmt --overwrite /etc/caddy/Caddyfile

Vuelve a ejecutar el validador.

Reinicia el servidor de Caddy para aplicar los cambios.

$ sudo systemctl restart caddy

Ahora puedes acceder a CouchDB a través de la URL https://couchdb.example.com/_utils/ en tu navegador.

Conclusión

Has aprendido a instalar el servidor de bases de datos Apache CouchDB en una máquina Debian 11. También has aprendido a realizar operaciones básicas con la base de datos a través de la línea de comandos y la interfaz de usuario de Fauxton. Y por último, pero no menos importante, también has aprendido a exponer la UI de Fauxton en Internet utilizando Caddy como servidor proxy inverso. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...