Tive a impressão, lendo alguns tutoriais em português, que o material estava um tanto desatualizado. Isso me fez perder algum tempo tentando entender o que eu estava fazendo de errado até entender que: eu não estava fazendo nada errado. O passo a passo estava correto, mas a forma de chamar as APIs do Elastic Search é que haviam mudados. Faço esse post para não me deixar esquecer de como funciona e também para facilitar a vida de quem quer subir um container local para desenvolvimento ou para brincar antes de jogar para produção.
Instalando
É necessário que você já tenha o Docker instalado e rodando na sua máquina. Antes de começar o primeiro passo tenha certeza de que o Docker está rodando! Todas as instruções são via linha de comando e funcionam igualmente no PowerShell e no terminal do Linux (eu uso o Ubuntu 22.04).
O primeiro passo aqui é baixar a imagem do Elastic Search que atualmente está na 8.10.4. Vou usar o repositório de imagens do próprio Elastic pois no repositório do Docker a última versão é a 8.10.2 no dia de hoje e quero usar a última porquê sim. Você pode verificar outras versões aqui https://www.docker.elastic.co/r/elasticsearch.
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.4
Se tudo der certo o resultado vai ser algo parecido com a imagem abaixo. No meu caso rodando no Ubuntu tive que rodar o comando com o sudo .
Podemos ver que na minha lista de imagens salvas localmente temos lá o Elastic Search na versão 8.10.4. Lembrando que no meu caso tive que adicionar o sudo .
docker image ls
Rodando
Até aqui todos os tutoriais foram bem. Alguns instalando diredo do repositório do Docker outros do repositório do ElasticSearch, mas daqui em diante é o que estava me confundindo um tanto, mas que vai ficar bem claro aqui.
docker run --name elasticboladao -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.10.4
Deu erro?
Em alguns tutoriais o container subia e tudo funcionava magicamente bem, mas quando eu tentei encontrava alguns erros e que seguindo o tutorial me dava a entender de que eu estava fazendo alguma coisa errada. Seguindo o passo a passo até aqui dava um erro tanto rodando no Windows quanto rodando no Ubuntu, então se você rodou até aqui e se esbarrou com o erro node validation exception\n[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.\nbootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] siga a recomendação abaixo, caso não tenha tido problema e o comando tenha rodado pode pular direto para o tópico “Testando”.
Significa que você precisa aumentar o valor do vm.max_map_count para o valor minimo de 262144, como recomendando pelo Elastic Search. No Ubuntu basta rodar o comando baixo.
sysctl -w vm.max_map_count=262144
Se você quiser deixar esse valor minimo definido como padrão no seu sistema sempre você só precisa editar o arquivo /etc/sysctl.conf e adicionar ao final dele o vm.max_map_count=262144.
Deu bom?
Se você não teve o problema acima, ou fez o ajuste necessário, depois de rodar o comando docker run e ao final da processo de inicialização do container você provavelmente vai ver essa tela na primeira.
Testando
Esse foi um outro ponto confuso em que cheguei depois de seguir os tutoriais. O pessoal simplesmente lançava na URL http://localhost:9200 e entrava com uma autenticação básica e conseguia fazer algumas consultas direto no navegador. No entanto temos ai duas possibilidade: No Windows, rodando o Docker Desktop com WSL ativado, não consegui acessar a URL diretamente pelo navegador. Só consegui fazer as requisições usando o Postman/Insomnia ou pelo CURL. No Ubuntu funcionou com https, mas não com o http e até aí tudo bem, pois não pretendo usar o navegador mesmo. Acessar via navegador era mais um teste simples para verificar se estava funcionando.
Depois de autenticar com o usuário elastic e com a senha que é gerada quando o elastic é iniciado (da uma olhada na imagem do Deu Bom?).
Insomnia/Postman
Tanto usando o Insomnia quanto o Postman talvez seja necessário desabilitar a validação de certificados SSL, ao menos tive que fazer isso, já que o certificado gerado localmente não é realmente reconhecido.
Antes de você realizar uma requisição você precisa configurar a autenticação do tipo basic e há duas formas de fazer isso a primeira é usando o recurso direto do Postman ou do Insomina que basicamente é ir na aba de Authorization, escolher a opção Basic preencher o usuário com o elastic e a senha com aquela que já sabemos.
A outra forma é configurar diretamente no Headers o cabeçalho Authorization com o usuário e senha separado por “:” encodados na base64. Eu particularmente prefiro essa pois já fica mais baixo nível e mais próximo da chamada que vou precisar fazer via código. Algo como elastic:O*ZMpUEhF*+5cHAYW3yR viraria ZWxhc3RpYzpPKlpNcFVFaEYqKzVjSEFZVzN5Ug==.
É isso, objetivo aqui foi alcançado que era deixar rodando o ElasticSearch com Docker. Fiquem a vontade pra tirar dúvidas dessa instalação ou mesmo outras coisas que tenha dito e não tenha ficado claro.
Pra fechar
Se você precisar gerar uma nova senha para o usuário elastic você pode em um outro terminal enviar um comando para essa troca.
docker exec -it elasticboladao bin/elasticsearch-reset-password -u elastic
Referências
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
Deixe um comentário