BYTEBOOK
Bytebook Docs • Elasticsearch 8.x / Full-Text Search
← Înapoi la Bytebook
PATH: DOCS / ELASTICSEARCH_GUIDE.HTML _
[00:00:00] DOCS_READY
DEMOS Main Archive JAVA LABS Enterprise PY LABS Neural Assets NODE LABS Async Runtime INFRA Control Center
SEARCH ENGINE GUIDES • ELASTICSEARCH 8.X

Ghid Instalare, Securizare și Utilizare Elasticsearch pe VPS

Acest ghid descrie pas cu pas cum instalezi, configurezi, securizezi și folosești Elasticsearch 8.x pe VPS-ul Ubuntu (63.250.40.142), alături de exemple practice de conectare pentru aplicațiile tale (Java, Python, Node.js).

1. Cerințe Prealabile și Instalare pe VPS

Elasticsearch este dezvoltat în Java și necesită resurse adecvate de memorie RAM.

  1. Conectează-te la VPS prin SSH:
    ssh root@63.250.40.142
  2. Actualizează pachetele și instalează dependențele de bază:
    apt update && apt install -y wget curl apt-transport-https gnupg2
  3. Importă cheia GPG oficială Elastic:
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  4. Adaugă repository-ul Elasticsearch 8.x în sursele APT:
    echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list
  5. Actualizează sursele și instalează pachetul:
    apt update && apt install -y elasticsearch

2. Configurarea Memoriei și a Serviciului

Pentru un VPS cu resurse partajate, este recomandat să limitezi memoria JVM (Heap size) la 1GB.

A. Setează limitele JVM Heap

nano /etc/elasticsearch/jvm.options.d/heap.options
-Xms1g
-Xmx1g

B. Editează fișierul elasticsearch.yml

nano /etc/elasticsearch/elasticsearch.yml
network.host: 127.0.0.1
http.port: 9200

# Pentru mediul de dev/testing pe un singur nod
discovery.type: single-node

# Securitatea HTTPS / TLS
xpack.security.enabled: true
xpack.security.http.ssl.enabled: false

C. Activează și pornește serviciul

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl status elasticsearch

3. Setarea Parolei de Autentificare (elastic)

La versiunile 8.x, securitatea xpack este activată automat. Pentru a genera/reseta parola utilizatorului principal elastic:

  1. Execută comanda dedicată pentru resetarea parolei:
    /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
  2. Introdu parola dorită (ex: ParolaTaSecurizataElastic123!).
  3. Testează conexiunea locală cu curl:
    curl -u elastic:ParolaTaSecurizataElastic123! http://localhost:9200

    (Trebuie să primești un răspuns JSON cu versiunea și motto-ul "You Know, for Search").

4. Expunerea Elasticsearch prin Caddy Reverse Proxy

Pentru a accesa Elasticsearch prin HTTPS pe subdomeniul search.bytebook.xyz:

  1. Configurare Namecheap: Adaugă un A Record (Host: search, Value: 63.250.40.142).
  2. Editează Caddyfile:
    nano /etc/caddy/Caddyfile
    search.bytebook.xyz {
        reverse_proxy localhost:9200
    }
  3. Reîncarcă Caddy:
    systemctl reload caddy

5. Testare Interactivă prin REST API (CRUD pe Indexuri)

A. Creează un Index numit "produse"

curl -X PUT "http://localhost:9200/produse" \
     -u elastic:ParolaTaSecurizataElastic123! \
     -H "Content-Type: application/json"

B. Adaugă un Document în Index

curl -X POST "http://localhost:9200/produse/_doc/1" \
     -u elastic:ParolaTaSecurizataElastic123! \
     -H "Content-Type: application/json" \
     -d '{
       "nume": "Laptop Gaming ASUS",
       "categorie": "Electrice",
       "pret": 4500,
       "descriere": "Laptop performant cu procesor i7 si placa grafica RTX"
     }'

C. Căutare Text Completă (Full-Text Search)

curl -X GET "http://localhost:9200/produse/_search" \
     -u elastic:ParolaTaSecurizataElastic123! \
     -H "Content-Type: application/json" \
     -d '{
       "query": {
         "match": {
           "descriere": "gaming"
         }
       }
     }'

6. Conectarea Elasticsearch la Aplicațiile Tale

A. Java Spring Boot (application.properties)

Adaugă dependența spring-boot-starter-data-elasticsearch în pom.xml, apoi:

spring.elasticsearch.uris=http://localhost:9200
spring.elasticsearch.username=elastic
spring.elasticsearch.password=ParolaTaSecurizataElastic123!

B. Python FastAPI (elasticsearch-py)

Instalează biblioteca: pip install elasticsearch

from elasticsearch import Elasticsearch

es = Elasticsearch(
    "http://localhost:9200",
    basic_auth=("elastic", "ParolaTaSecurizataElastic123!")
)

response = es.search(
    index="produse",
    query={"match": {"descriere": "gaming"}}
)

print(response['hits']['hits'])

C. Node.js Express (@elastic/elasticsearch)

Instalează pachetul: npm install @elastic/elasticsearch

const { Client } = require('@elastic/elasticsearch');

const client = new Client({
  node: 'http://localhost:9200',
  auth: {
    username: 'elastic',
    password: 'ParolaTaSecurizataElastic123!'
  }
});

async function runSearch() {
  const result = await client.search({
    index: 'produse',
    query: {
      match: { descriere: 'gaming' }
    }
  });

  console.log(result.hits.hits);
}

runSearch();

7. Comenzi Utile de Monitorizare și Administrare

Verificarea stării de sănătate a clusterului (Health Check):
curl -u elastic:ParolaTaSecurizataElastic123! http://localhost:9200/_cluster/health?pretty
Listing-ul tuturor indexurilor existente:
curl -u elastic:ParolaTaSecurizataElastic123! "http://localhost:9200/_cat/indices?v"
Ștergerea unui index:
curl -X DELETE -u elastic:ParolaTaSecurizataElastic123! http://localhost:9200/produse