Português
Começar

← Todos os templates · Ferramentas de desenvolvimento

Faça deploy de OpenSearch em um clique

Mecanismo de busca e análise de código aberto, com o OpenSearch Dashboards: busca em texto completo e vetorial, logs e dashboards

Uma alternativa auto-hospedada para Elasticsearch e Algolia.

O que é OpenSearch?

O OpenSearch é um mecanismo de busca e análise: você envia documentos JSON a ele por uma API REST, e ele os encontra por texto completo, os filtra e os agrega, e faz busca vetorial neles para apps de IA com o plugin k-NN dele. O OpenSearch Dashboards é a interface web dele: dashboards e gráficos, o Discover para explorar logs e eventos, o Dev Tools para enviar consultas, e páginas para os plugins dele, como segurança, alertas e detecção de anomalias.

O OpenSearch nasceu em 2021 como um fork do Elasticsearch 7.10.2 e do Kibana, quando a Elastic mudou a licença deles, e é de código aberto sob a licença Apache 2.0. Desde 2024 ele é gerido pela OpenSearch Software Foundation, parte da Linux Foundation. Este template roda um nó com o OpenSearch Dashboards no endereço do projeto, com o plugin de segurança ativado: os únicos usuários são o administrador, criado a partir dos campos antes de o OpenSearch responder a qualquer pessoa, e o do próprio Dashboards, então não existe nenhum dos usuários de demonstração da imagem, cujas senhas foram publicadas. O porém: ele roda em Java e usa mais memória que mecanismos de busca mais leves, e um só nó não mantém réplicas dos índices dele.

Hospedagem de OpenSearch no Pethost

  1. Você entra no Pethost com uma passkey, GitHub ou Google. Ainda não tem máquina? Você escolhe um plano, e o link espera até ela ficar pronta.
  2. Novo projeto abre em OpenSearch. Você preenche o que ele pede e clica em Criar projeto: Senha do administrador.
  3. Em um ou dois minutos OpenSearch está no ar no próprio endereço com HTTPS. Os segredos são gerados ao acaso, e os dados vão para o backup noturno.
  4. É um projeto como qualquer outro: você ou seu agente podem alterá-lo, fazer rollback ou restaurá-lo.

Perguntas sobre OpenSearch

O OpenSearch é gratuito?

Sim. O OpenSearch e o OpenSearch Dashboards são de código aberto sob a licença Apache 2.0, com todos os plugins incluídos e sem edição paga. A Amazon vende uma versão gerenciada, o Amazon OpenSearch Service.

OpenSearch ou Elasticsearch: qual é a diferença?

O OpenSearch começou como um fork do Elasticsearch 7.10.2 em 2021, então a linguagem de consulta e a API REST dele parecem familiares, mas os dois se afastaram desde então. O OpenSearch usa a licença Apache 2.0 e já traz segurança, alertas e busca vetorial integrados, enquanto o Elasticsearch é vendido pela Elastic sob licenças próprias e a AGPL.

Posso usar o OpenSearch para busca vetorial?

Sim. O plugin k-NN dele guarda vetores ao lado dos seus documentos e encontra os mais próximos, com os motores Lucene e Faiss, e o plugin de busca neural dele combina isso com a busca de texto, para busca semântica e recuperação em apps de IA.

Como os meus apps se conectam ao OpenSearch?

Pela API REST dele, na porta 9200. Adicione um host na aba Domínios do projeto com uma rota para o serviço opensearch nessa porta, e conecte os seus apps com um cliente oficial (Python, JavaScript, Java, Go, Ruby, PHP, .NET ou Rust) ou por HTTPS puro, autenticados como admin ou como um usuário que você criar para o app.

De quanta memória e disco OpenSearch precisa?

O OpenSearch roda em Java com um heap de 512 MB: cerca de 1,3 GB de memória com o OpenSearch Dashboards em repouso, mais conforme os índices crescem; para índices grandes, aumente o heap em OPENSEARCH_JAVA_OPTS. No Pethost, o plano Starter basta, com espaço para outros apps ao lado.

Arquivo Docker Compose de OpenSearch

O template é este compose.yaml e as variáveis gravadas no .env do projeto quando ele é criado. O Pethost roda o arquivo exatamente como está escrito.

Containers: opensearch (opensearchproject/opensearch:3), dashboards (opensearchproject/opensearch-dashboards:3).

Volumes, no backup noturno: data.

services:
  opensearch:
    image: opensearchproject/opensearch:3
    restart: unless-stopped
    environment:
      OPENSEARCH_JAVA_OPTS: -Xms512m -Xmx512m
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      DASHBOARDS_PASSWORD: ${DASHBOARDS_PASSWORD}
      # The image's demo configuration would add its demo users, whose passwords are published,
      # and certificates whose keys are too: this start writes its own instead.
      DISABLE_INSTALL_DEMO_CONFIG: "true"
    # At each start: a certificate authority and a node certificate of this container's own for
    # the security plugin's transport layer, made with the JDK's keytool, as the image has no
    # openssl; opensearch.yml with them; and the users the security index is made from at the
    # first start: the administrator with the password given, not reserved, so that it can change
    # its password with no admin certificate, and OpenSearch Dashboards' server user. Once the index exists, OpenSearch reads its users from it, and a password changed in
    # OpenSearch Dashboards stays. A single node holds no replica, so an index asks for none. The
    # REST API answers over HTTP inside the project, where the proxy brings HTTPS requests.
    command:
      - bash
      - -c
      - |
        set -e
        cd /usr/share/opensearch
        if [ "$${#ADMIN_PASSWORD}" -lt 8 ]; then
          echo "The admin password must have 8 characters at least, as OpenSearch asks." >&2
          exit 1
        fi
        keytool=jdk/bin/keytool
        certs=config/certs
        store=$$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
        rm -rf "$$certs"
        mkdir -p "$$certs"
        $$keytool -genkeypair -alias ca -keyalg RSA -keysize 2048 -validity 3650 -dname CN=opensearch-ca -ext bc:c \
          -keystore "$$certs/ca.p12" -storetype PKCS12 -storepass "$$store" 2> /dev/null
        $$keytool -exportcert -rfc -alias ca -keystore "$$certs/ca.p12" -storepass "$$store" -file "$$certs/ca.pem" 2> /dev/null
        $$keytool -genkeypair -alias node -keyalg RSA -keysize 2048 -validity 3650 -dname CN=opensearch \
          -keystore "$$certs/node.p12" -storetype PKCS12 -storepass "$$store" 2> /dev/null
        $$keytool -certreq -alias node -keystore "$$certs/node.p12" -storepass "$$store" -file "$$certs/node.csr" 2> /dev/null
        $$keytool -gencert -rfc -alias ca -keystore "$$certs/ca.p12" -storepass "$$store" -validity 3650 \
          -ext SAN=dns:opensearch,dns:localhost -ext KU=digitalSignature,keyEncipherment -ext EKU=serverAuth,clientAuth \
          -infile "$$certs/node.csr" -outfile "$$certs/node.pem" 2> /dev/null
        $$keytool -importcert -noprompt -alias ca -file "$$certs/ca.pem" -keystore "$$certs/node.p12" -storepass "$$store" 2> /dev/null
        $$keytool -importcert -noprompt -alias node -file "$$certs/node.pem" -keystore "$$certs/node.p12" -storepass "$$store" 2> /dev/null
        $$keytool -importcert -noprompt -alias ca -file "$$certs/ca.pem" -keystore "$$certs/trust.p12" -storetype PKCS12 -storepass "$$store" 2> /dev/null
        rm "$$certs/ca.p12" "$$certs/node.csr"
        cat > config/opensearch.yml <<YAML
        cluster.name: opensearch
        network.host: 0.0.0.0
        discovery.type: single-node
        cluster.default_number_of_replicas: 0
        plugins.security.ssl.transport.keystore_type: PKCS12
        plugins.security.ssl.transport.keystore_filepath: certs/node.p12
        plugins.security.ssl.transport.keystore_password: $$store
        plugins.security.ssl.transport.truststore_type: PKCS12
        plugins.security.ssl.transport.truststore_filepath: certs/trust.p12
        plugins.security.ssl.transport.truststore_password: $$store
        plugins.security.ssl.transport.enforce_hostname_verification: false
        plugins.security.ssl.http.enabled: false
        plugins.security.nodes_dn: ["CN=opensearch"]
        plugins.security.allow_default_init_securityindex: true
        plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
        YAML
        hash() { plugins/opensearch-security/tools/hash.sh -env "$$1" 2> /dev/null | tail -n 1; }
        cat > config/opensearch-security/internal_users.yml <<YAML
        _meta:
          type: internalusers
          config_version: 2
        admin:
          hash: "$$(hash ADMIN_PASSWORD)"
          reserved: false
          backend_roles: [admin]
          description: The administrator
        kibanaserver:
          hash: "$$(hash DASHBOARDS_PASSWORD)"
          reserved: true
          description: OpenSearch Dashboards' server
        YAML
        exec ./opensearch-docker-entrypoint.sh opensearch
    volumes:
      - data:/usr/share/opensearch/data
    # Up means answering, which asks for a password: 401 to a request with none.
    healthcheck:
      test: ["CMD-SHELL", "code=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:9200/); [ \"$$code\" = 401 ]"]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 120s

  dashboards:
    image: opensearchproject/opensearch-dashboards:3
    restart: unless-stopped
    environment:
      OPENSEARCH_HOSTS: '["http://opensearch:9200"]'
      OPENSEARCH_USERNAME: kibanaserver
      OPENSEARCH_PASSWORD: ${DASHBOARDS_PASSWORD}
    depends_on:
      opensearch:
        condition: service_healthy

volumes:
  data:

Mais em Ferramentas de desenvolvimento