OS/Windows

windows10 WSL 우분투에서 도커로 elasticsearch 8.3.0 설치 및 실행

makeitworth 2022. 7. 20. 16:13

엘라스틱서치는 역색인을 통해 풀텍스트서치를 지원해주어 검색의 속도와 성능이 뛰어나다고 들었다.

NLP 솔루션 과정에서 엘라스틱서치를 활용할 수 있는지 모색하기 위해 엘라스틱서치를 설치하고 파이썬 클라이언트 패키지를 활용해 노트북에서 사용해봤다. 

 

내 환경 :

windows10 pro

WSL2

ubuntu 20.04.4 LTS

 

  1. Docker Image 내려받기

Docker Image(https://www.docker.elastic.co)에서 os 및 버전에 맞게 선택

docker pull [docker.elastic.co/elasticsearch/elasticsearch:8.3.0-amd64](<http://docker.elastic.co/elasticsearch/elasticsearch:8.3.0-amd64>)
  1. 파이썬 클라이언트 패키지 설치, 엘라스틱 버전에 맞춰서 버전 설정해서 설치
pip3 install elasticsearch==8.3.0
  1. Elasticsearch Docker 실행
sudo dockr run -d --name elasticsearch8 -p9200:9200 -p9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.3.0

3.  프로세스 확인

sudo docker ps

 

4. 테스트 확인

sudo curl https://127.0.0.1:9200/

 

여기서 에러가 발생했다.

여러 참고 블로그에서는 elasticsearch가 잘 확인이 된다고 나오는데, 나는 분명 도커가 실행되고 있으나 

 

curl: (52) Empty reply from server 

 

에러 메세지가 나왔다. 

블로그 참고에 의하면 8점대 버전에서만 이런 문제가 있다고. 블로그를 하나씩 따라했더니 터미널에서는 문제가 해결되어 다음과 같이 확인이 잘 되었다.

{
  "name" : "03c31b4b164a",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "FOHPaJb-THCJ4o7L16mGEw",
  "version" : {
    "number" : "8.3.0",
    "build_type" : "docker",
    "build_hash" : "5b8b981647acdf1ba1d88751646b49d1b461b4cc",
    "build_date" : "2022-06-23T22:48:49.607492124Z",
    "build_snapshot" : false,
    "lucene_version" : "9.2.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

뒤이어 이 포스팅을 참고하여 시각화 툴인 Kibana도 설치 및 실행 확인 완료.

 

그러나 파이썬을 활용해 엘라스틱서치를 사용하는 예제들을 따라해 보려했더니 

 

TlsError: TLS error caused by: TlsError(TLS error caused by: SSLError([SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)))

certificate에러가 발생했다. 아까 터미널에서 에러를 .crt 파일과 user elastic 및 비밀번호 입력으로 해결했기에, 역시 이를 입력하면 해결이 될 것이라고 생각했다.

from elasticsearch import Elasticsearch, helpers

client = Elasticsearch('https://localhost:9200')

이렇게 되어 있던 코드를

client = Elasticsearch('https://localhost:9200', request_timeout=60, ca_certs = './http_ca.crt', basic_auth=('elastic', 내비번))

위와 같이 변경해주고, 클라이언트 정보를 확인해보면, 제대로 엘라스틱서치 클라이언트 정보를 확인할 수 있다.

client.info()

 

 

 

참고 : https://boiler.buzzni.com/2020/08/11/Elasticsearch-Python-Client를-활용한-'검색'-입문.html

https://jinhokwon.github.io/devops/elasticsearch/elasticsearch-docker/

https://needjarvis.tistory.com/713

https://tommypagy.tistory.com/343

https://velog.io/@junsugi/Elasticsearch-curl-52-Empty-reply-from-server-에러