← Tous les templates · Outils de développement
Déployez OpenSearch en un clic
Moteur de recherche et d’analyse open source, avec OpenSearch Dashboards : recherche plein texte et vectorielle, logs et tableaux de bord
Une alternative auto-hébergée à Elasticsearch et Algolia.
Qu’est-ce que OpenSearch ?
OpenSearch est un moteur de recherche et d’analyse : vous lui envoyez des documents JSON par une API REST, et il les retrouve par recherche plein texte, les filtre et les agrège, et les cherche par vecteur pour les applications d’IA avec son plugin k-NN. OpenSearch Dashboards est son interface web : tableaux de bord et graphiques, Discover pour explorer les logs et les événements, Dev Tools pour envoyer des requêtes, et des pages pour ses plugins, comme la sécurité, les alertes et la détection d’anomalies.
OpenSearch est né en 2021 d’un fork d’Elasticsearch 7.10.2 et de Kibana, quand Elastic en a changé la licence, et il est open source sous licence Apache 2.0. Depuis 2024, il est dirigé par l’OpenSearch Software Foundation, qui fait partie de la Linux Foundation. Ce template fait tourner un nœud avec OpenSearch Dashboards à l’adresse du projet, avec le plugin de sécurité activé : ses seuls utilisateurs sont l’administrateur, créé à partir des champs avant qu’OpenSearch ne réponde à quiconque, et celui de Dashboards, donc aucun des utilisateurs de démonstration de l’image, aux mots de passe publiés. Le revers : il tourne sur Java et prend plus de mémoire que des moteurs de recherche plus légers, et un seul nœud ne garde aucune réplique de ses index.
Hébergement de OpenSearch sur Pethost
- Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
- Nouveau projet s’ouvre sur OpenSearch. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : Mot de passe administrateur.
- En une minute ou deux, OpenSearch tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
- C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.
Questions sur OpenSearch
OpenSearch est-il gratuit ?
Oui. OpenSearch et OpenSearch Dashboards sont open source sous licence Apache 2.0, avec tous les plugins inclus et sans édition payante. Amazon vend une version gérée, Amazon OpenSearch Service.
OpenSearch ou Elasticsearch : quelle différence ?
OpenSearch est né d’un fork d’Elasticsearch 7.10.2 en 2021 : son langage de requête et son API REST semblent donc familiers, mais les deux ont divergé depuis. OpenSearch est sous licence Apache 2.0, avec la sécurité, les alertes et la recherche vectorielle intégrées, alors qu’Elastic vend Elasticsearch sous ses propres licences et l’AGPL.
Puis-je utiliser OpenSearch pour la recherche vectorielle ?
Oui. Son plugin k-NN stocke des vecteurs à côté de vos documents et trouve les plus proches, avec les moteurs Lucene et Faiss, et son plugin de recherche neuronale combine cela avec la recherche textuelle, pour la recherche sémantique et la récupération dans les applications d’IA.
Comment mes applications se connectent-elles à OpenSearch ?
Par son API REST, sur le port 9200. Ajoutez un hôte dans l’onglet Domaines du projet avec une route vers le service opensearch sur ce port, et connectez vos applications avec un client officiel (Python, JavaScript, Java, Go, Ruby, PHP, .NET ou Rust) ou directement en HTTPS, avec l’utilisateur admin ou un utilisateur que vous créez pour l’application.
De combien de mémoire et de disque OpenSearch a-t-il besoin ?
OpenSearch tourne sur Java avec un heap de 512 MB : environ 1,3 GB de mémoire au repos avec OpenSearch Dashboards, davantage à mesure que les index grossissent ; pour de gros index, augmentez le heap dans OPENSEARCH_JAVA_OPTS. Sur Pethost, l’offre Starter lui suffit, avec de la place pour d’autres applications à côté.
Le fichier Docker Compose de OpenSearch
Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.
Conteneurs : opensearch (opensearchproject/opensearch:3), dashboards (opensearchproject/opensearch-dashboards:3).
Volumes, dans la sauvegarde nocturne : 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:
Aussi dans Outils de développement
- GiteaHébergement Git avec pull requests et issues
- code-serverVS Code dans le navigateur
- KrokiDes diagrammes à partir de texte : PlantUML, Mermaid, Graphviz et plus
- CoderDes environnements de développement distants issus de modèles Terraform, ouverts dans VS Code, JetBrains, le navigateur ou en SSH
- HasuraDes API GraphQL et REST instantanées sur une base Postgres, avec des permissions, des événements et une console web
- InsForgeUn backend pour les applications que construisent les agents de code : Postgres, authentification, stockage et edge functions