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.
- Conectează-te la VPS prin SSH:
ssh root@63.250.40.142 - Actualizează pachetele și instalează dependențele de bază:
apt update && apt install -y wget curl apt-transport-https gnupg2 - Importă cheia GPG oficială Elastic:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg - 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 - 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:
- Execută comanda dedicată pentru resetarea parolei:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i - Introdu parola dorită (ex:
ParolaTaSecurizataElastic123!). - 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:
- Configurare Namecheap: Adaugă un A Record (Host:
search, Value:63.250.40.142). - Editează
Caddyfile:nano /etc/caddy/Caddyfilesearch.bytebook.xyz { reverse_proxy localhost:9200 } - 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
curl -u elastic:ParolaTaSecurizataElastic123! http://localhost:9200/_cluster/health?pretty
curl -u elastic:ParolaTaSecurizataElastic123! "http://localhost:9200/_cat/indices?v"
curl -X DELETE -u elastic:ParolaTaSecurizataElastic123! http://localhost:9200/produse