diff --git a/conf/search.yml b/conf/search.yml new file mode 100644 --- /dev/null +++ b/conf/search.yml @@ -0,0 +1,5 @@ +search: + cls: elasticsearch + args: + hosts: + - elasticsearch:9200 diff --git a/conf/search_journal_client_objects.yml b/conf/search_journal_client_objects.yml new file mode 100644 --- /dev/null +++ b/conf/search_journal_client_objects.yml @@ -0,0 +1,10 @@ +search: + cls: remote + args: + url: http://swh-search:5010/ +journal: + brokers: + - kafka + group_id: swh.search.journal_client.objects + prefix: swh.journal.objects + diff --git a/docker-compose.search.yml b/docker-compose.search.yml new file mode 100644 --- /dev/null +++ b/docker-compose.search.yml @@ -0,0 +1,39 @@ +version: '2' + +services: + elasticsearch: + image: elasticsearch:7.3.2 + env_file: + - ./env/elasticsearch.env + ports: + - 9200:9200 + volumes: + - elasticsearch-data:/usr/share/elasticsearch/data + + swh-search: + image: swh/stack + build: ./ + entrypoint: /entrypoint.sh + ports: + - 5010:5010 + depends_on: + - elasticsearch + environment: + SWH_CONFIG_FILENAME: /search.yml + volumes: + - "./conf/search.yml:/search.yml:ro" + - "./services/swh-search/entrypoint.sh:/entrypoint.sh:ro" + + swh-search-journal-client-objects: + image: swh/stack + build: ./ + entrypoint: /entrypoint.sh + depends_on: + - swh-search + - kafka + volumes: + - "./conf/search_journal_client_objects.yml:/etc/softwareheritage/search/journal_client_objects.yml:ro" + - "./services/swh-search-journal-client-objects/entrypoint.sh:/entrypoint.sh:ro" + +volumes: + elasticsearch-data: diff --git a/env/elasticsearch.env b/env/elasticsearch.env new file mode 100644 --- /dev/null +++ b/env/elasticsearch.env @@ -0,0 +1 @@ +discovery.type=single-node diff --git a/services/swh-search-journal-client-objects/entrypoint.sh b/services/swh-search-journal-client-objects/entrypoint.sh new file mode 100755 --- /dev/null +++ b/services/swh-search-journal-client-objects/entrypoint.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +source /srv/softwareheritage/utils/pyutils.sh +setup_pip + +case "$1" in + "shell") + exec bash -i + ;; + *) + echo "Starting swh-indexer-journal client" + exec wait-for-it -s kafka:9092 -s --timeout=0 -- \ + wait-for-it -s swh-search:5010 -s --timeout=0 -- \ + swh --log-level DEBUG search --config-file /etc/softwareheritage/search/journal_client_objects.yml journal-client objects + ;; +esac + diff --git a/services/swh-search/entrypoint.sh b/services/swh-search/entrypoint.sh new file mode 100755 --- /dev/null +++ b/services/swh-search/entrypoint.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -e + +source /srv/softwareheritage/utils/pyutils.sh +setup_pip + +case "$1" in + "shell") + exec bash -i + ;; + *) + echo Starting the swh-search API server + wait-for-it elasticsearch:9200 -s --timeout=0 + echo "Waiting for ElasticSearch cluster to be up" + cat << EOF | python3 +import elasticsearch +es = elasticsearch.Elasticsearch(['elasticsearch:9200']) +es.cluster.health(wait_for_status='yellow') +EOF + echo "ElasticSearch cluster is up" + swh search -C $SWH_CONFIG_FILENAME initialize + exec gunicorn --bind 0.0.0.0:5010 \ + --reload \ + --threads 4 \ + --workers 2 \ + --log-level DEBUG \ + --timeout 3600 \ + 'swh.search.api.server:make_app_from_configfile()' + ;; +esac