Elasticsearch es un motor de búsqueda gratuito y de código abierto, basado en Apache Lucene y equipado con capacidad de texto completo y soporte para arquitecturas distribuidas. Esta es una solución establecida desde hace mucho tiempo en el campo del análisis de datos en tiempo real.
En este tutorial encontrará todos los pasos necesarios para crear y configurar un servidor de Elasticsearch en Linux Ubuntu 18.04.
Primero, conéctese a su servidor a través de una conexión SSH. Si aún no lo ha hecho, se recomienda seguir nuestra guía para conectarse de forma segura con SSH. En caso de un servidor local, vaya al siguiente paso y abra la terminal de su servidor.
Instalación de Java
Antes de continuar con la instalación de Elasticsearch, instale el kit de desarrollo de Java. Para hacerlo, siga nuestra guía sobre cómo instalar Java en Ubuntu 18.04. En caso de que JDK ya esté instalado en su sistema, omita este paso.
Instalación de Elasticsearch
El paquete de instalación se puede descargar directamente desde el sitio web de Elastic:
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-amd64.deb
Después de completar la descarga, proceda instalando el paquete:
$ sudo dpkg -i elasticsearch-7.3.2-amd64.deb
Luego, proceda instalando e iniciando el servicio a través de:
$ sudo systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service
Configuración del cortafuegos
En caso de un firewall en el sistema, puede ser necesario permitir el tráfico al servicio Elasticsearch, habilitando el puerto apropiado.
Al usar el firewall UFW, escriba este comando para desbloquear el puerto predeterminado de Elasticsearch:
$ sudo ufw allow 9200
En este punto, el cortafuegos permitirá conexiones en el puerto 9200.
Comprobando el estado del servicio
Verifique si el servicio se está ejecutando y verifique los puertos TCP que están escuchando actualmente, ejecutando:
$ netstat -a -o -n | grep LISTEN
Luego, se deben ver los puertos de escucha 9200 y 9300 como sigue:
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
tcp6 0 0 127.0.0.1:9200 :::* LISTEN off (0.00/0/0)
tcp6 0 0 ::1:9200 :::* LISTEN off (0.00/0/0)
tcp6 0 0 127.0.0.1:9300 :::* LISTEN off (0.00/0/0)
tcp6 0 0 ::1:9300 :::* LISTEN off (0.00/0/0)
Uso de Elasticsearch
Ahora que el servicio se está ejecutando, use pruebas ingresando datos y verificando que se encuentren más tarde.
N.B. Si usa un servidor remoto, reemplace localhost con la dirección IP de su servidor en los comandos que se muestran a continuación.
En este ejemplo, ingrese 3 productos comerciales:
$ curl -POST 'http://localhost:9200/products/1' -curl -H 'Content-Type: application/json' -d '
{
"name": "Coffe Machine 1",
"uuid": "00000010"
}'
Al realizar la llamada anterior, se insertará un nuevo documento en el índice "productos" con el atributo "nombre" correspondiente a "Cafetera 1" y con un identificador "uuid":
{"_index":"index","_type":"products","_id":"cUqGY20Bm2mQybZCoeKU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
Elasticsearch responderá como se muestra arriba, especificando la identificación del producto insertado y otros datos de informes.
Luego proceda insertando otros 2 productos:
$ curl -POST 'http://localhost:9200/index/products' -curl -H 'Content-Type: application/json' -d '
{
"name": "White Desk",
"uuid": "WD000010"
}'
$ curl -POST 'http://localhost:9200/index/products' -curl -H 'Content-Type: application/json' -d '
{
"name": "Black Desk",
"uuid": "WD000011"
}'
Una vez completado, puede continuar realizando su primera búsqueda indicando "Escritorio" como parámetro de búsqueda:
$ curl -X GET "http://localhost:9200/index/_search?q=Desk*&pretty"
Como puede ver, se obtienen 2 resultados, incluidos los dos escritorios insertados anteriormente:
{
...
"hits" : [
{
….
"_source" : {
"name" : "White Desk",
"uuid" : "WD000010"
}
},
{
...
"_score" : 1.0,
"_source" : {
"name" : "Black Desk",
"uuid" : "WD000011"
}
}
]
}
}
Configuración de Elastisearch
Todos los archivos de configuración de Elasticsearch están en el directorio /etc/elasticsearch. El archivo más importante es elasticsearch.yml que permite modificar los parámetros básicos de funcionamiento del sistema, como la información del clúster, los parámetros de conexión TCP/IP o las carpetas donde almacenar los datos.
Todos los archivos de configuración presentes usan el formato YAML, por lo tanto, cuando edite estos archivos, preste atención a la sangría.
Mejora de la seguridad
Una de las primeras cosas que hay que hacer para aumentar la seguridad del servicio es limitar las conexiones entrantes, admitiendo sólo las locales. De esta forma, solo su aplicación en el servidor puede usar el servicio.
Para modificar la tarjeta de escucha altere el archivo /etc/elasticsearch/elasticsearch.yml yendo a descomentar y modifique la siguiente línea:
…
network.host: 127.0.0.1
...
Guarde el archivo y reinicie el servicio para aplicar los cambios:
$ sudo systemctl restart elasticsearch.service
Espere unos minutos y verifique que el servicio esté escuchando solo en la interfaz local iniciando:
$ netstat -a -o -n | grep LISTEN
Para mantener el servicio disponible también para uso externo, siempre es posible cambiar el puerto de escucha para ocultar la presencia de Elasticsearch.
Edite el archivo de configuración principal /etc/elasticsearch/elasticsearch.yml:
…
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 2900
...
NB En lugar de la puerta 2900 se puede insertar cualquier otra puerta.
Después de guardar el archivo, reinicie el servicio:
$ sudo systemctl restart elasticsearch.service
Para comprobar el estado del servicio, después de aplicar los cambios, utilice siempre netstat:
$ netstat -a -o -n | grep LISTEN