Polski
Zacznij

← Wszystkie szablony · Narzędzia dla programistów

Wdróż OpenSearch jednym kliknięciem

Silnik wyszukiwania i analityki open source z OpenSearch Dashboards: wyszukiwanie pełnotekstowe i wektorowe, logi i dashboardy

Alternatywa dla Elasticsearch i Algolia, hostowana u siebie.

Czym jest OpenSearch?

OpenSearch to silnik wyszukiwania i analityki: wysyłasz mu dokumenty JSON przez REST API, a on wyszukuje je pełnotekstowo, filtruje, agreguje i swoim pluginem k-NN przeszukuje wektorowo dla aplikacji AI. OpenSearch Dashboards to jego interfejs webowy: dashboardy i wykresy, Discover do przeglądania logów i zdarzeń, Dev Tools do wysyłania zapytań oraz strony jego pluginów, takich jak bezpieczeństwo, alerty i wykrywanie anomalii.

OpenSearch powstał w 2021 roku jako fork projektów Elasticsearch 7.10.2 i Kibana, gdy firma Elastic zmieniła ich licencję, i jest open source na licencji Apache 2.0. Od 2024 roku zarządza nim OpenSearch Software Foundation, część Linux Foundation. Ten szablon uruchamia jeden węzeł z OpenSearch Dashboards pod adresem projektu, z włączonym pluginem bezpieczeństwa: jego jedyni użytkownicy to administrator, utworzony z pól formularza, zanim OpenSearch komukolwiek odpowie, i własny użytkownik Dashboards, więc nie ma tu żadnego z demonstracyjnych użytkowników obrazu, których hasła opublikowano. Haczyk: OpenSearch działa na Javie i zajmuje więcej pamięci niż lżejsze silniki wyszukiwania, a jeden węzeł nie trzyma żadnej repliki swoich indeksów.

Hosting OpenSearch na Pethost

  1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
  2. Okno „Nowy projekt” otwiera się na aplikacji OpenSearch. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: Hasło administratora.
  3. Za minutę czy dwie aplikacja OpenSearch działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
  4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

Pytania o OpenSearch

Czy OpenSearch jest darmowy?

Tak. OpenSearch i OpenSearch Dashboards to open source na licencji Apache 2.0, ze wszystkimi pluginami w zestawie i bez płatnej edycji. Amazon sprzedaje wersję zarządzaną, Amazon OpenSearch Service.

OpenSearch a Elasticsearch: czym się różnią?

OpenSearch powstał w 2021 roku jako fork Elasticsearch 7.10.2, więc jego język zapytań i REST API wyglądają znajomo, ale od tamtej pory oba projekty się rozeszły. OpenSearch jest na licencji Apache 2.0 i ma wbudowane bezpieczeństwo, alerty i wyszukiwanie wektorowe, a Elasticsearch sprzedaje firma Elastic na własnych licencjach i na licencji AGPL.

Czy mogę używać OpenSearch do wyszukiwania wektorowego?

Tak. Jego plugin k-NN przechowuje wektory obok twoich dokumentów i znajduje najbliższe, z silnikami Lucene i Faiss, a plugin wyszukiwania neuronowego łączy to z wyszukiwaniem tekstowym, do wyszukiwania semantycznego i pobierania danych dla aplikacji AI.

Jak moje aplikacje łączą się z OpenSearch?

Przez jego REST API na porcie 9200. Dodaj hosta w zakładce Domeny projektu z trasą do usługi opensearch na tym porcie i połącz się oficjalnym klientem (Python, JavaScript, Java, Go, Ruby, PHP, .NET lub Rust) albo zwykłym HTTPS, logując się jako admin albo jako użytkownik, którego utworzysz dla aplikacji.

Ile pamięci i miejsca na dysku potrzebuje OpenSearch?

OpenSearch działa na Javie z heapem 512 MB: razem z OpenSearch Dashboards zajmuje w spoczynku około 1,3 GB pamięci, więcej w miarę wzrostu indeksów; przy dużych indeksach zwiększ heap w OPENSEARCH_JAVA_OPTS. Na Pethost wystarczy mu plan Starter, z miejscem na inne aplikacje obok.

OpenSearch: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

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

Wolumeny, w nocnym backupie: 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:

Więcej w kategorii Narzędzia dla programistów