Как прописать ELASTICSEARCH_URL в файле .env?

Установлено приложение на flask. Хочу подключить Elasticsearch для поиска данных. Установил elastic 8.14 в докере.
pip install elasticsearch тоже версия 8.14
Тестирую в flask shell:
>>> from elasticsearch import Elasticsearch
>>> es = Elasticsearch("https://localhost:9200", ca_certs="./http_ca.crt", basic_auth=("elastic", "PASSWORD"))
>>> es.index(index='my_index', id=1, document={'text': 'this is a test'})
ObjectApiResponse({'_index': 'my_index', '_id': '1', '_version': 1, 'result': 'created', '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 0, '_primary_term': 1})
>>> es.search(index='my_index', query={'match': {'text': 'this test'}})
ObjectApiResponse({'took': 98, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 1, 'relation': 'eq'}, 'max_score': 0.5753642, 'hits': [{'_index': 'my_index', '_id': '1', '_score': 0.5753642, '_source': {'text': 'this is a test'}}]}})

Все ок
Хочу теперь прописать ELASTICSEARCH_URL в .env файле:
ELASTICSEARCH_URL = "http://localhost:9200", ca_certs="./http_ca.crt", basic_auth=("elastic", "password")

flask shell ругается:
Python-dotenv could not parse statement starting at line 4

если оставляю :
ELASTICSEARCH_URL = "http://localhost:9200"
Сначала не ругается , но потом , при вводе данных - ошибка:
Traceback (most recent call last):
  File "<console>", line 2, in <module>
  File "/var/www/project_flask/app/search.py", line 9, in add_to_index
    current_app.elasticsearch.index(index=index, id=model.id, document=payload)
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elasticsearch/_sync/client/utils.py", line 446, in wrapped
    return api(*args, **kwargs)
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elasticsearch/_sync/client/__init__.py", line 2424, in index
    return self.perform_request(  # type: ignore[return-value]
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elasticsearch/_sync/client/_base.py", line 271, in perform_request
    response = self._perform_request(
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elasticsearch/_sync/client/_base.py", line 316, in _perform_request
    meta, resp_body = self.transport.perform_request(
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elastic_transport/_transport.py", line 342, in perform_request
    resp = node.perform_request(
  File "/var/www/project_flask/venv/lib/python3.10/site-packages/elastic_transport/_node/_http_urllib3.py", line 202, in perform_request
    raise err from None
 : Connection error caused by: ConnectionError(Connection error caused by: ProtocolError(('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))))

Как впихнуть cert, юзера и пароль в ELASTICSEARCH_URL?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
black1277
@black1277
Вольный стрелок
ELASTICSEARCH_URL это не одна строка параметр, а несколько. Поэтому .env:
ELASTICSEARCH_URL=https://localhost:9200
ELASTICSEARCH_CA_CERTS=./http_ca.crt
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=PASSWORD

Примерно как должен выглядеть код:
from flask import Flask
from elasticsearch import Elasticsearch
from dotenv import load_dotenv
import os

# Загрузка переменных окружения из .env файла
load_dotenv()

app = Flask(__name__)

# Получение параметров из переменных окружения
es_url = os.getenv("ELASTICSEARCH_URL")
es_ca_certs = os.getenv("ELASTICSEARCH_CA_CERTS")
es_username = os.getenv("ELASTICSEARCH_USERNAME")
es_password = os.getenv("ELASTICSEARCH_PASSWORD")

# Подключение к Elasticsearch с использованием параметров из .env файла
es = Elasticsearch(es_url, ca_certs=es_ca_certs, basic_auth=(es_username, es_password))

# ваш код ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы