Tutorial > Creare e configurare un server ElasticSearch con Ubuntu 18.04

Creare e configurare un server ElasticSearch con Ubuntu 18.04

Pubblicato il: 11 ottobre 2019

ElasticSearch Sviluppo Ubuntu

ElasticSearch è un motore di ricerca gratuito e open source, basato su Apache Lucene e dotato di capacità Full Text e supporto ad architetture distribuite. Si tratta di una soluzione affermata ormai da tempo nel campo dell'analisi dei dati in tempo reale.

In questo tutorial ti illustreremo tutti gli step necessari per creare e configurare un server ElasticSearch su Linux Ubuntu 18.04.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installazione di Java

Prima di procedere con l’installazione di ElasticSearch, è necessario installare il Java Development Kit. Per farlo puoi seguire la nostra guida su come installare Java su Ubuntu 18.04. Nel caso in cui JDK sia già installato sul tuo sistema puoi saltare questo passaggio.

Installazione di ElasticSearch

Il pacchetto di installazione può essere scaricato direttamente dal sito di Elastic:

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-amd64.deb

Dopo aver completato il download puoi procedere installando il pacchetto:

$ sudo dpkg -i elasticsearch-7.3.2-amd64.deb

Quindi procedi installando e avviando il servizio tramite:

$ sudo systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service

Configurare il Firewall

Qualora sia presente un firewall sul sistema, potrebbe essere necessario permettere il traffico verso il servizio di ElasticSearch, abilitando la porta appropriata.

Se utilizzi il firewall UFW puoi digitare questo comando per sbloccare la porta di default di ElasticSearch:

$ sudo ufw allow 9200

A questo punto il firewall consentirà le connessioni sulla porta 9200.

Verificare lo stato del servizio

Per verificare che il servizio si sia avviato, controlla le porte TCP attualmente in ascolto, lanciando:

$ netstat -a -o -n | grep LISTEN

Dovresti quindi notare le porte 9200 e 9300 in ascolto come sotto:

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)

Utilizzare ElasticSearch

Ora che il servizio è in funzione, puoi fare delle prove di utilizzo inserendo dei dati e verificando che vengano successivamente reperiti.

N.B. Se utilizzi un server remoto sostituisci localhost con l'indirizzo IP del tuo server nei comandi mostrati di seguito.

In questo esempio, inserirai 3 prodotti commerciali:

$ curl -POST 'http://localhost:9200/products/1' -curl -H 'Content-Type: application/json' -d '

{

    "name": "Coffe Machine 1",

    "uuid": "00000010"

}'

Effettuando la chiamata sopra stai inserendo un nuovo documento nell indice “products” con attributo “name” corrispondente a “Coffe Machine 1" e con un indentificativo “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 risponderà come indicato sopra, specificando l’id del prodotto inserito e altri dati di reportistica.

Procedi quindi inserendo altri 2 prodotti:

$ 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 volta completato, puoi procedere ad effettuare la tua prima ricerca indicando come parametro di ricerca “Desk”:

$ curl -X GET "http://localhost:9200/index/_search?q=Desk*&pretty"

Come potrai notare, otterrai 2 risultati che comprendono le due scrivanie inserite sopra:

{

    ...

    "hits" : [

      {

        ….

        "_source" : {

          "name" : "White Desk",

          "uuid" : "WD000010"

        }

      },

      {

        ...

        "_score" : 1.0,

        "_source" : {

          "name" : "Black Desk",

          "uuid" : "WD000011"

        }

      }

    ]

  }

}

Configurare ElastiSearch

Tutti i file di configurazione di ElasticSearch sono presenti nella directory /etc/elasticsearch. Il file più importante è elasticsearch.yml che permette di modificare i parametri di funzionamento di base del sistema, come ad esempio le informazione del cluster, i parametri di connessione TCP/IP oppure le cartelle dove memorizzare i dati.

Tutti i file di configurazione presenti utilizzano il formato YAML, per cui durante la modifica di tali file, devi prestare attenzione all'indentazione.

Migliorare la sicurezza

Una tra le prime operazioni che puoi effettuare per aumentare la sicurezza del servizio è quella di limitare le connessioni in ingresso, ammettendo soltanto quelle locali. In questa maniera, solo la tua applicazione presente sul server potrà utilizzare il servizio.

Per modificare la scheda di ascolto puoi alterare il file /etc/elasticsearch/elasticsearch.yml andando a decommentare e modificare la riga seguente:

…

network.host: 127.0.0.1

...

Salva il file e riavvia il servizio per applicare le modifiche:

$ sudo systemctl restart elasticsearch.service

Attendi qualche minuto e verifica che il servizio sia in ascolto solo sull’interfaccia locale lanciando:

$ netstat -a -o -n | grep LISTEN

Nel caso in cui avessi bisogno di mantenere il servizio disponibile anche per l’esterno, puoi sempre cambiare la porta di ascolto per occultare la presenza di ElasticSearch.

Modifica il file di configurazione principale /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

...

N.B. Al posto della porta 2900 puoi inserire la porta che desideri.

Dopo aver salvato il file, riavvia il servizio:

$ sudo systemctl restart elasticsearch.service

Per verificare lo stato del servizio, dopo aver applicato le modifiche, utilizza sempre netstat:

$ netstat -a -o -n | grep LISTEN