← Все шаблоны · Инструменты разработчика
Задеплойте OpenSearch в один клик
Движок поиска и аналитики с открытым кодом, вместе с OpenSearch Dashboards: полнотекстовый и векторный поиск, логи и дашборды
Альтернатива Elasticsearch и Algolia на вашей машине.
Что такое 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
- Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
- Окно «Новый проект» открывается на приложении OpenSearch. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: Пароль администратора.
- Через минуту-две OpenSearch работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
- Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.
Вопросы про 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:
Еще в категории «Инструменты разработчика»
- GiteaGit-хостинг с пул-реквестами и задачами
- code-serverVS Code в браузере
- KrokiДиаграммы из текста: PlantUML, Mermaid, Graphviz и другие
- CoderУдалённые среды разработки из шаблонов Terraform, которые открываются в VS Code, JetBrains, браузере или по SSH
- HasuraГотовые GraphQL- и REST-API поверх базы Postgres, с правами доступа, событиями и веб-консолью
- InsForgeБэкенд для приложений, которые пишут AI-агенты: Postgres, авторизация, файлы и edge functions