services: ndc-elasticsearch: image: ghcr.io/hasura/ndc-elasticsearch:latest build: context: . volumes: - ./resources/configuration.json:/etc/connector/configuration.json - certs:/usr/share/elasticsearch/config/certs user: "0" ports: - 8080:8080 environment: HASURA_CONNECTOR_PORT: 8080 HASURA_CONFIGURATION_DIRECTORY: /etc/connector OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4318" OTEL_SERVICE_NAME: "ndc-elasticsarch" ELASTICSEARCH_URL: https://es01:9200 ELASTICSEARCH_USERNAME: elastic ELASTICSEARCH_PASSWORD: ${ELASTIC_PASSWORD:-default} ELASTICSEARCH_CA_CERT_PATH: /usr/share/elasticsearch/config/certs/es01/es01.crt HASURA_LOG_LEVEL: debug command: serve depends_on: jaeger: condition: service_started es01: condition: service_healthy setup: image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} volumes: - certs:/usr/share/elasticsearch/config/certs user: "0" command: > bash -c ' if [ ! -f config/certs/ca.zip ]; then echo "Creating CA"; bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; unzip config/certs/ca.zip -d config/certs; fi; if [ ! -f config/certs/ca.zip ]; then echo "Creating CA"; bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; unzip config/certs/ca.zip -d config/certs; fi; if [ ! -f config/certs/certs.zip ]; then echo "Creating certs"; echo -ne \ "instances:\n"\ " - name: es01\n"\ " dns:\n"\ " - es01\n"\ " - localhost\n"\ " ip:\n"\ " - 127.0.0.1\n"\ > config/certs/instances.yml; bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; unzip config/certs/certs.zip -d config/certs; fi; echo "Setting file permissions" chown -R root:root config/certs; find . -type d -exec chmod 750 \{\} \;; find . -type f -exec chmod 640 \{\} \;; echo "All done!"; ' healthcheck: test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] interval: 1s timeout: 5s retries: 120 es01: depends_on: setup: condition: service_completed_successfully image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} volumes: - certs:/usr/share/elasticsearch/config/certs - esdata01:/usr/share/elasticsearch/data ports: - ${ES_PORT:-9200}:9200 environment: - node.name=es01 - cluster.name=${CLUSTER_NAME:-docker-cluster} - cluster.initial_master_nodes=es01 - ELASTIC_PASSWORD=${ELASTIC_PASSWORD:-default} - bootstrap.memory_lock=true - xpack.security.enabled=true - xpack.security.http.ssl.enabled=true - xpack.security.http.ssl.key=certs/es01/es01.key - xpack.security.http.ssl.certificate=certs/es01/es01.crt - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - xpack.security.transport.ssl.enabled=true - xpack.security.transport.ssl.key=certs/es01/es01.key - xpack.security.transport.ssl.certificate=certs/es01/es01.crt - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - xpack.security.transport.ssl.verification_mode=certificate - xpack.license.self_generated.type=${LICENSE:-basic} mem_limit: ${MEM_LIMIT:-1073741824} ulimits: memlock: soft: -1 hard: -1 healthcheck: test: [ "CMD-SHELL", "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", ] interval: 10s timeout: 10s retries: 120 kibana: depends_on: es01: condition: service_healthy image: docker.elastic.co/kibana/kibana:${STACK_VERSION:-8.13.4} volumes: - certs:/usr/share/kibana/config/certs - kibanadata:/usr/share/kibana/data ports: - ${KIBANA_PORT:-5601}:5601 environment: - SERVERNAME=kibana - ELASTICSEARCH_HOSTS=https://es01:9200 - ELASTICSEARCH_USERNAME=kibana_system - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD:-default} - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt mem_limit: ${MEM_LIMIT:-1073741824} healthcheck: test: [ "CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'", ] interval: 10s timeout: 10s retries: 120 engine: image: ghcr.io/hasura/v3-engine:latest platform: linux/amd64 environment: - METADATA_PATH=/metadata/metadata.json - AUTHN_CONFIG_PATH=/metadata/auth_config.json - OTLP_ENDPOINT=http://jaeger:4317 ports: - 3000:3000 volumes: - ./resources:/metadata depends_on: ndc-elasticsearch: condition: service_started jaeger: condition: service_started auth_hook: condition: service_started develop: watch: - path: ./resources/metadata.json target: /metadata.json action: sync+restart - path: ./resources/auth_config.json target: /auth_config.json action: sync+restart auth_hook: image: ghcr.io/hasura/v3-dev-auth-webhook platform: linux/amd64 environment: OTLP_ENDPOINT: "http://jaeger:4317" ports: - "3050:3050" depends_on: jaeger: condition: service_started jaeger: image: jaegertracing/all-in-one:1.55 restart: always ports: - 5775:5775/udp - 6831:6831/udp - 6832:6832/udp - 5778:5778 - 4002:16686 - 14250:14250 - 14268:14268 - 14269:14269 - 4317:4317 # OTLP gRPC - 4318:4318 # OTLP HTTP - 9411:9411 environment: COLLECTOR_OTLP_ENABLED: "true" COLLECTOR_ZIPKIN_HOST_PORT: "9411" prometheus: image: prom/prometheus container_name: prometheus command: - "--config.file=/etc/prometheus/prometheus.yaml" ports: - 9090:9090 restart: unless-stopped volumes: - type: bind source: ./resources/prometheus/prometheus.yaml target: /etc/prometheus/prometheus.yaml volumes: certs: driver: local esdata01: driver: local kibanadata: driver: local