OpenSearch
Overview
The following document will cover
- Our local development images
 - How to setup a decoupled local development environment
 
Local Development Images
Skpr provides developers with local development images for OpenSearch 1.x, 2.x and 3.x.
docker.io/skpr/opensearch:dev-v2-1.x
docker.io/skpr/opensearch:dev-v2-2.x
docker.io/skpr/opensearch:dev-v2-3.x
Decoupled Local Development Environment
Docker Compose
The below Docker Compose file can be used as a reference for your local environment.
It does not include the full stack eg. PHP, Mysql, Node, Mail etc.
services:
  # This container is used for all other containers to connect to for a shared network stack.
  network:
    image: alpine:3.21
    stdin_open: true
    ports:
      - "${OPENSEARCH_PORT:-9200}:9200"
  nginx:
    image: skpr/nginx-drupal:dev-v2-latest
    network_mode: service:network
    volumes:
      - ./docker/compose/nginx/overrides.d/opensearch.conf:/etc/nginx/conf.d/location/60-opensearch.conf
  opensearch:
    image: docker.io/skpr/opensearch:dev-v2-2.x
    network_mode: service:network
    volumes:
      - opensearch-data:/usr/share/opensearch/data
volumes:
  opensearch-data:
Nginx
The configuration file below will add a route /api/v1/opensearch for decoupled applications which uses read only credentials.
location /api/v1/opensearch/ {
  proxy_pass http://127.0.0.1:9200/;
  proxy_set_header Authorization "Basic cmVhZGVyOnJlYWRlcg==";
}
Drupal
Finally, using the Search API OpenSearch Drupal module you can index content into OpenSearch so it can be directly queried using our new endpoint.
Below is example settings.php configuration for connecting to the OpenSearch instance.
<?php
$config['search_api.server.CHANGE_ME']['backend_config']['connector_config']['url'] = $skpr->get('opensearch.writer.endpoint', 'http://127.0.0.1:9200');
$config['search_api.server.CHANGE_ME']['backend_config']['connector_config']['username'] = $skpr->get('opensearch.writer.username', 'writer');
$config['search_api.server.CHANGE_ME']['backend_config']['connector_config']['password'] = $skpr->get('opensearch.writer.password', 'writer');
$config['search_api.server.CHANGE_ME']['backend_config']['advanced']['prefix'] = $skpr->get('opensearch.writer.index_prefix', 'local_');