← 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
- 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.
- „Neues Projekt“ öffnet sich bei OpenSearch. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: Admin-Passwort.
- 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.
- 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
- GiteaGit-Hosting mit Pull-Requests und Issues
- code-serverVS Code im Browser
- KrokiDiagramme aus Text: PlantUML, Mermaid, Graphviz und mehr
- CoderEntfernte Entwicklungsumgebungen aus Terraform-Vorlagen, geöffnet in VS Code, JetBrains, im Browser oder per SSH
- HasuraSofortige GraphQL- und REST-APIs über einer Postgres-Datenbank, mit Berechtigungen, Events und einer Web-Konsole
- InsForgeEin Backend für Apps, die Coding-Agenten bauen: Postgres, Auth, Speicher und Edge Functions