Français
Commencer

← 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

  1. 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.
  2. Nouveau projet s’ouvre sur OpenSearch. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : Mot de passe administrateur.
  3. 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.
  4. 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