---
title: "OpenSearch: Docker Compose і хостинг в один клік"
description: "OpenSearch — рушій пошуку й аналітики з відкритим кодом, форк Elasticsearch. Self-hosted OpenSearch з OpenSearch Dashboards в один клік."
---

[← Усі шаблони](https://pethost.dev/uk/templates/) · [Інструменти розробника](https://pethost.dev/uk/templates/developer-tools/)

# Задеплойте OpenSearch в один клік

Рушій пошуку й аналітики з відкритим кодом, разом з OpenSearch Dashboards: повнотекстовий і векторний пошук, логи й дашборди

Альтернатива Elasticsearch і Algolia на вашій машині.

[Задеплоїти на Pethost](https://console.pethost.dev/?template=opensearch)

## Що таке OpenSearch?

OpenSearch — рушій пошуку й аналітики: ви надсилаєте йому JSON-документи через REST API, а він знаходить їх повнотекстовим пошуком, фільтрує, агрегує й за допомогою плагіна k-NN шукає за векторами для ШІ-застосунків. OpenSearch Dashboards — його вебінтерфейс: дашборди й графіки, «Discover» для перегляду логів і подій, «Dev Tools» для надсилання запитів і сторінки його плагінів, як-от безпеки, сповіщень і виявлення аномалій.

OpenSearch з’явився в 2021 році як форк Elasticsearch 7.10.2 і Kibana, коли компанія Elastic змінила їхню ліцензію, і має відкритий код за ліцензією Apache 2.0. З 2024 року ним керує OpenSearch Software Foundation, частина Linux Foundation. Цей шаблон запускає один вузол з OpenSearch Dashboards за адресою проєкту, з увімкненим плагіном безпеки: його єдині користувачі — адміністратор, створений з полів ще до того, як OpenSearch комусь відповість, і власний користувач Dashboards, тож жодного з демонстраційних користувачів образу з опублікованими паролями тут немає. Підводний камінь: OpenSearch працює на Java й займає більше пам’яті, ніж легші пошукові рушії, а один вузол не тримає жодної репліки своїх індексів.

## Хостинг OpenSearch на Pethost

1. Ви входите в Pethost — з ключем доступу, через GitHub або Google. Машини ще немає? Ви обираєте тариф, і посилання чекає, доки машина не буде готова.
2. Вікно «Новий проєкт» відкривається на застосунку OpenSearch. Ви заповнюєте те, що він просить, і натискаєте «Створити проєкт»: **Пароль адміністратора**.
3. За хвилину-дві OpenSearch працює за власною адресою з HTTPS. Секрети створюються випадково, а дані потрапляють у щонічний бекап.
4. Це проєкт як будь-який інший: ви або ваш агент можете його змінити, відкотити або відновити.

## Питання про OpenSearch

**OpenSearch безкоштовний?**

Так. OpenSearch і OpenSearch Dashboards мають відкритий код за ліцензією Apache 2.0, з усіма плагінами в комплекті й без платної редакції. Amazon продає керовану версію — Amazon OpenSearch Service.

**OpenSearch і Elasticsearch: у чому різниця?**

OpenSearch з’явився в 2021 році як форк Elasticsearch 7.10.2, тож його мова запитів і REST API виглядають знайомо, але відтоді проєкти розійшлися. OpenSearch виходить за ліцензією Apache 2.0 із вбудованими безпекою, сповіщеннями й векторним пошуком, а Elasticsearch компанія Elastic продає за власними ліцензіями та за AGPL.

**Чи можна використовувати OpenSearch для векторного пошуку?**

Так. Його плагін k-NN зберігає вектори поруч із вашими документами й знаходить найближчі за допомогою рушіїв Lucene і Faiss, а плагін нейронного пошуку поєднує це з текстовим пошуком — для семантичного пошуку й отримання даних для ШІ-застосунків.

**Як мої застосунки підключаються до OpenSearch?**

Через його REST API на порту 9200. Додайте хост на вкладці «Домени» проєкту з маршрутом на цей порт сервісу opensearch і підключайтеся офіційним клієнтом (Python, JavaScript, Java, Go, Ruby, PHP, .NET або Rust) чи звичайним HTTPS, входячи як admin або як користувач, якого ви створите для застосунку.

**Скільки пам’яті й диска потрібно OpenSearch?**

OpenSearch працює на Java з хіпом 512 MB: у спокої близько 1,3 GB пам’яті разом з OpenSearch Dashboards, більше — з ростом індексів; для великих індексів збільште хіп в OPENSEARCH_JAVA_OPTS. На Pethost йому вистачить тарифу Starter, і поруч залишиться місце для інших застосунків.

## OpenSearch: файл Docker Compose

Шаблон — це цей compose.yaml і змінні, які записуються в .env проєкту під час його створення. Pethost запускає файл так, як його написано.

**Контейнери:** opensearch (opensearchproject/opensearch:3), dashboards (opensearchproject/opensearch-dashboards:3).

**Томи, у щонічному бекапі:** 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:
```

[compose.yaml](https://pethost.dev/templates/opensearch/compose.yaml)[Відкрити на GitHub](https://github.com/pethost-dev/templates/tree/main/opensearch)

## [Ще в категорії «Інструменти розробника»](https://pethost.dev/uk/templates/developer-tools/)

- [**Gitea**Git-хостинг із пул-реквестами й задачами](https://pethost.dev/uk/templates/gitea/)
- [**code-server**VS Code у браузері](https://pethost.dev/uk/templates/code-server/)
- [**Kroki**Діаграми з тексту: PlantUML, Mermaid, Graphviz та інші](https://pethost.dev/uk/templates/kroki/)
- [**Coder**Віддалені середовища розробки з шаблонів Terraform, які відкриваються у VS Code, JetBrains, браузері або через SSH](https://pethost.dev/uk/templates/coder/)
- [**Hasura**Готові GraphQL- і REST-API поверх бази Postgres, із правами доступу, подіями й вебконсоллю](https://pethost.dev/uk/templates/hasura/)
- [**InsForge**Бекенд для застосунків, які пишуть AI-агенти: Postgres, авторизація, файли та edge functions](https://pethost.dev/uk/templates/insforge/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Шаблони](https://pethost.dev/uk/templates/)
- [Про нас](https://pethost.dev/about/)
- [Документація](https://pethost.dev/docs/)
- [Блог](https://pethost.dev/uk/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Плагін](https://github.com/pethost-dev/plugin)
- [Умови](https://pethost.dev/terms/)
- [Конфіденційність](https://pethost.dev/privacy/)
- [Повернення коштів](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Бази даних

- [Postgres](https://pethost.dev/uk/postgres/)

Порівняння

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/uk/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/uk/blog/coolify-cloud-vs-dokploy-cloud/)
- [Ціни Railway vs Render vs Fly.io](https://pethost.dev/uk/blog/railway-vs-render-vs-fly-io-pricing/)
- [Керований хостинг Docker Compose](https://pethost.dev/uk/blog/managed-docker-compose-hosting/)

Альтернативи

- [Альтернативи Railway](https://pethost.dev/uk/blog/railway-alternatives/)
- [Альтернативи Heroku](https://pethost.dev/uk/blog/heroku-alternatives/)
- [Альтернативи Dokploy](https://pethost.dev/uk/blog/dokploy-alternatives/)
- [Альтернативи Coolify](https://pethost.dev/uk/blog/coolify-alternatives/)
- [Альтернативи Render](https://pethost.dev/uk/blog/render-alternatives/)
- [Альтернативи Sliplane](https://pethost.dev/uk/blog/sliplane-alternatives/)
