If you want to do some development against Snomed CT terminology server, you can download Snowstorm, an open source terminogy server with support for Snomed CT.
It is primarily written in Java and built on top of ElasticSerach.
The easiest way of getting Snowstorm running in your local development server (or on an actual server if desired), is to download the Docker images for Elasticsearch and Snowstorm.
I have added a Yaml file on my Github repo for installing both Elasticsearch and Snowstorm here:
docker-compose.yml
The Yaml file sets up the following for Elastsearch and Snowstorm :
Elasticsearch
- Sets up Elasticsearch as a service that Snowstorm depends upon on port 9200
- Pulls Elasticsearch version 8.19.8. You obviously want to test out even newer versions of Elasticsearch later on
- Sets up a durable volume for Elasticseachon elastic:/usr/share/elasticsearch/data
- Snomed depends upon Elasticsearch and the condition must be healthy of Elasticsearch from the healthchecks
- Memory reservation is set to 4 GB for ElasticSearch
- Since in this example Elasticsearch is set up to run in LocalDEV, xpack.security.enabled is set to false. This turns off authorization, authentication, TLS and audit since the example setup in this docker compose file is meant for development environments, not for production.
Snowstorm
- Sets up Snowstorm to use Elasticsearch as a service on port 9200
- Snowstorm is set up to run on 8080 (HTTP)
- A bind mount is set up on ./rf2 that is on the host computer and mapped to the ./rf2 folder in the container. We use this bind mount to import the Rf2 file later on
docker-compose.yml
# https://github.com/IHTSDO/snowstorm/blob/master/docker-compose.yml
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.19.8
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- node.name=snowstorm
- cluster.name=snowstorm-cluster
- "ES_JAVA_OPTS=-Xms4g -Xmx4g"
volumes:
- elastic:/usr/share/elasticsearch/data
networks:
elastic:
aliases:
- es
healthcheck:
test: ["CMD", "curl", "-f", "http://es:9200"]
interval: 1s
timeout: 1s
retries: 60
ports:
- 127.0.0.1:9200:9200
mem_reservation: 4g
snowstorm:
image: snomedinternational/snowstorm:latest
depends_on:
elasticsearch:
condition: service_healthy
environment:
- elasticsearch.urls=http://elasticsearch:9200
- JAVA_TOOL_OPTIONS=-Xms2g -Xmx4g --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED
command: [
"--elasticsearch.urls=http://es:9200",
]
networks:
elastic:
aliases:
- snowstorm
ports:
- "8080:8080"
volumes:
- ./rf2:/rf2
networks:
elastic:
name: elastic
volumes:
elastic:
A component diagram (UML) of the Rf2 format is shown below. Note that RefsetItem is extensible and contain additional fields depending on the refset type.