Post

OpenSearch setup with Docker Compose and Kamal Deploy

OpenSearch setup with Docker Compose and Kamal Deploy

Getting Started

Create Rails Application

Searchkick

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Searchkick.client = OpenSearch::Client.new(
  host: ENV.fetch("OPEN_SEARCH_HOST", "https://blog-opensearch:9200"),
  user: "admin",
  password: ENV.fetch("OPENSEARCH_INITIAL_ADMIN_PASSWORD", "SamplePassword1!"),
  retry_on_failure: true,
  transport_options: {
    ssl: {
      verify: false
    },
    request: {
      timeout: 250
    }
  }
)

Searchkick.index_prefix = Rails.application.class.module_parent_name.underscore

Docker Compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
---
services:
  opensearch-node1:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./certs:/usr/share/opensearch/config/certs
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
    networks:
      - opensearch-net
  opensearch-node2:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./certs:/usr/share/opensearch/config/certs
      - opensearch-data2:/usr/share/opensearch/data
    networks:
      - opensearch-net
  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:latest
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    expose:
      - '5601'
    environment:
      OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]'
    networks:
      - opensearch-net

volumes:
  opensearch-data1:
  opensearch-data2:

networks:
  opensearch-net:
1
docker compose up -d
1
docker compose down

Kamal

1
2
3
4
5
6
7
8
9
10
11
accessories:
  opensearch:
    image: opensearchproject/opensearch:latest
    host: 157.245.197.146
    port: 9200
    env:
      clear:
        discovery.type: single-node
        OPENSEARCH_INITIAL_ADMIN_PASSWORD: SamplePassword1!
    directories:
      - data:/usr/share/opensearch/data

Conclusion

References

  • https://youtu.be/uEv8qxQv7OM?si=oAhhnVjx2SY9p141
  • https://github.com/Instadeploy/logging-opensearch
This post is licensed under CC BY 4.0 by the author.