Elasticsearch è un motore di ricerca gratuito e open source, basato su Apache Lucene e dotato di funzionalità Full Text e supporto per architetture distribuite. Questa è una soluzione consolidata nel campo dell'analisi dei dati in tempo reale.
In questo tutorial troverai tutti i passaggi necessari per creare e configurare un server Elasticsearch su Linux Ubuntu 18.04.
Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in modo sicuro con SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.
Installazione Java
Prima di procedere con l'installazione di Elasticsearch, installare Java Development Kit. Per farlo, segui la nostra guida su come installare Java su Ubuntu 18.04. Se JDK è già installato sul tuo sistema, salta questo passaggio.
Installazione di Elasticsearch
Il pacchetto di installazione può essere scaricato direttamente dal sito Web di Elastic:
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-amd64.deb
Dopo aver completato il download, procedi con l'installazione del 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
Configurazione del firewall
In caso di firewall sul sistema, potrebbe essere necessario consentire il traffico al servizio Elasticsearch, abilitando l'apposita porta.
Quando utilizzi il firewall UFW, digita questo comando per sbloccare la porta Elasticsearch predefinita:
$ sudo ufw allow 9200
A questo punto, il firewall consentirà le connessioni sulla porta 9200.
Verifica dello stato del servizio
Verifica se il servizio è in esecuzione e controlla le porte TCP attualmente in ascolto, eseguendo:
$ netstat -a -o -n | grep LISTEN
Quindi, le porte di ascolto 9200 e 9300 come dovrebbero essere viste, come segue:
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)
Utilizzo di Elasticsearch
Ora che il servizio è in esecuzione, utilizza i test inserendo i dati e verificando che vengano trovati in seguito.
NB Se utilizzi un server remoto, sostituisci localhost con l'indirizzo IP del tuo server nei comandi mostrati di seguito.
In questo esempio, inserisci 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, verrà inserito nell'indice "prodotti" un nuovo documento con attributo "nome" corrispondente a "Macchina da caffè 1" e con identificatore "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 mostrato sopra, specificando l'id del prodotto inserito e altri dati di reportistica.
Poi procedi 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 completata, puoi procedere eseguendo la tua prima ricerca indicando "Desk" come parametro di ricerca :
$ curl -X GET "http://localhost:9200/index/_search?q=Desk*&pretty"
Come puoi vedere, si ottengono 2 risultati, inclusi i due desk inseriti sopra:
{
...
"hits" : [
{
….
"_source" : {
"name" : "White Desk",
"uuid" : "WD000010"
}
},
{
...
"_score" : 1.0,
"_source" : {
"name" : "Black Desk",
"uuid" : "WD000011"
}
}
]
}
}
Configurazione di Elastisearch
Tutti i file di configurazione di Elasticsearch si trovano nella directory /etc/elasticsearch. Il file più importante è elasticsearch.yml che permette di modificare i parametri operativi di base del sistema, come le informazioni sul cluster, i parametri di connessione TCP/IP o le cartelle dove archiviare i dati.
Tutti i file di configurazione presenti utilizzano il formato YAML, quindi quando modifichi questi file fai attenzione al rientro.
Miglioramento della sicurezza
Una delle prime cose da fare per aumentare la sicurezza del servizio è limitare le connessioni in entrata, ammettendo solo quelle locali. In questo modo, solo la tua applicazione sul server può utilizzare il servizio.
Per modificare la scheda di ascolto alterare il file /etc/elasticsearch/elasticsearch.yml andando a decommentare e modificare la seguente riga:
…
network.host: 127.0.0.1
...
Salva il file e riavvia il servizio per applicare le modifiche:
$ sudo systemctl restart elasticsearch.service
Attendere qualche minuto e verificare che il servizio sia in ascolto solo sull'interfaccia locale lanciando:
$ netstat -a -o -n | grep LISTEN
Per mantenere il servizio disponibile anche per uso esterno, è sempre possibile modificare la porta di ascolto per nascondere 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
...
NB Al posto di 2900 porte si può inserire qualsiasi altra porta.
Dopo aver salvato il file, riavvia il servizio:
$ sudo systemctl restart elasticsearch.service
Per verificare lo stato del servizio, dopo aver applicato le modifiche, utilizzare sempre netstat:
$ netstat -a -o -n | grep LISTEN