Deutsch
Loslegen

← Alle Vorlagen · Entwickler-Tools

OpenSearch mit einem Klick deployen

Open-Source-Such- und Analyse-Engine, mit OpenSearch Dashboards: Volltext- und Vektorsuche, Logs und Dashboards

Eine selbst gehostete Alternative zu Elasticsearch und Algolia.

Was ist OpenSearch?

OpenSearch ist eine Such- und Analyse-Engine: Du schickst JSON-Dokumente über eine REST-API, und OpenSearch findet sie per Volltextsuche, filtert und aggregiert sie und durchsucht sie mit seinem k-NN-Plugin nach Vektoren, für KI-Apps. OpenSearch Dashboards ist die Weboberfläche dazu: Dashboards und Diagramme, „Discover“ zum Erkunden von Logs und Events, „Dev Tools“ zum Senden von Abfragen und Seiten für die Plugins, etwa für Sicherheit, Alerts und Anomalieerkennung.

OpenSearch entstand 2021 als Fork von Elasticsearch 7.10.2 und Kibana, nachdem Elastic deren Lizenz geändert hatte, und ist Open Source unter Apache 2.0. Seit 2024 führt die OpenSearch Software Foundation, ein Teil der Linux Foundation, das Projekt. Diese Vorlage betreibt einen Knoten mit OpenSearch Dashboards unter der Adresse des Projekts, mit eingeschaltetem Sicherheits-Plugin: Die einzigen Benutzer sind der Administrator, aus den Feldern angelegt, bevor OpenSearch irgendwem antwortet, und der eigene Benutzer von Dashboards, also keiner der Demo-Benutzer des Images, deren Passwörter veröffentlicht sind. Der Haken: OpenSearch läuft auf Java und braucht mehr RAM als schlankere Suchmaschinen, und ein einzelner Knoten hält keine Replikate seiner Indizes.

OpenSearch-Hosting auf Pethost

  1. Du meldest dich bei Pethost an, mit Passkey, GitHub oder Google. Noch keine Maschine? Du wählst einen Tarif, und der Link wartet, bis sie bereit ist.
  2. „Neues Projekt“ öffnet sich bei OpenSearch. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: Admin-Passwort.
  3. In ein, zwei Minuten läuft OpenSearch unter eigener Adresse mit HTTPS. Die Secrets werden zufällig erzeugt, und die Daten sind im nächtlichen Backup.
  4. Es ist ein Projekt wie jedes andere: Du oder dein Agent könnt es ändern, zurückrollen oder wiederherstellen.

Fragen zu OpenSearch

Ist OpenSearch kostenlos?

Ja. OpenSearch und OpenSearch Dashboards sind Open Source unter der Apache-2.0-Lizenz, alle Plugins inklusive und ohne kostenpflichtige Edition. Amazon verkauft eine verwaltete Version: Amazon OpenSearch Service.

OpenSearch oder Elasticsearch: Was ist der Unterschied?

OpenSearch entstand 2021 als Fork von Elasticsearch 7.10.2, daher wirken seine Abfragesprache und seine REST-API vertraut, doch die beiden haben sich seitdem auseinanderentwickelt. OpenSearch steht unter Apache 2.0 und hat Sicherheit, Alerts und Vektorsuche schon eingebaut, während Elastic Elasticsearch unter eigenen Lizenzen und der AGPL verkauft.

Kann ich OpenSearch für Vektorsuche nutzen?

Ja. Sein k-NN-Plugin speichert Vektoren neben deinen Dokumenten und findet die nächstgelegenen, mit den Engines Lucene und Faiss, und sein Plugin für neuronale Suche verbindet das mit Textsuche, für semantische Suche und Retrieval für KI-Apps.

Wie verbinden sich meine Apps mit OpenSearch?

Über seine REST-API auf Port 9200. Füg im Tab „Domains“ des Projekts einen Host hinzu, mit einer Route zum Service opensearch auf diesem Port, und verbinde deine Apps über einen offiziellen Client (Python, JavaScript, Java, Go, Ruby, PHP, .NET oder Rust) oder direkt über HTTPS, angemeldet als admin oder als ein Benutzer, den du für die App anlegst.

Wie viel RAM und Speicherplatz braucht OpenSearch?

OpenSearch läuft auf Java mit einem Heap von 512 MB: im Ruhezustand etwa 1,3 GB RAM mit OpenSearch Dashboards, mehr, wenn die Indizes wachsen; für große Indizes erhöhst du den Heap in OPENSEARCH_JAVA_OPTS. Auf Pethost reicht dafür der Tarif Starter, mit Platz für weitere Apps daneben.

OpenSearch: die Docker-Compose-Datei

Die Vorlage ist diese compose.yaml und die Variablen, die beim Erstellen in die .env des Projekts geschrieben werden. Pethost führt die Datei so aus, wie sie geschrieben ist.

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

Volumes, im nächtlichen Backup: 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:

Mehr in Entwickler-Tools