kids-first / kf-task-fhir-etl

:fire: Kids First FHIR ETL Task Service running against Dataservice
Apache License 2.0
1 stars 0 forks source link

Add docker-compose for local testing and development #7

Open znatty22 opened 1 year ago

znatty22 commented 1 year ago

It be great if we had a docker-compose.yaml so that a developer can get this up and running locally fairly quickly. We could use the free HAPI FHIR server for our FHIR service and the KF dataservice image from kfdrc/kf-api-dataservice

znatty22 commented 1 year ago

I stole this bit from dewrangle since we use HAPI. You'd have to add the blocks for dataservice and dataservice postgres

# docker-compose
version: "3.7"

services:
  fhir:
    image: "hapiproject/hapi:latest"
    depends_on:
      - fhir_postgres
    ports:
      - "8080:8080"
    configs:
      - source: fhir
        target: /data/hapi/application.yaml
    volumes:
      - ./.data/hapi:/data/hapi
    environment:
      POSTGRES_FHIR_HOST: fhir_postgres
      POSTGRES_FHIR_PORT: 5433
      POSTGRES_FHIR_DATABASE: hapi
      POSTGRES_FHIR_USER: postgres
      POSTGRES_FHIR_PASSWORD: postgres
      SPRING_CONFIG_LOCATION: "file:///data/hapi/application.yaml"
  fhir_postgres:
    image: "postgres:14"
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: hapi
    command: -p 5433
    expose:
      - "5433"
    ports:
      - "5433:5433"
    volumes:
      - ./.data/fhir_postgres:/var/lib/postgresql/data

configs:
  fhir:
    file: ./fhir.yaml
# fhir.yaml

#Adds the option to go to eg. http://localhost:8080/actuator/health for seeing the running configuration
#see https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints
management:
  endpoints:
    web:
      exposure:
        include: "health,prometheus"
spring:
  main:
    allow-circular-references: true
    #allow-bean-definition-overriding: true
  flyway:
    enabled: false
    check-location: false
    baselineOnMigrate: true
  datasource:
    url: "jdbc:postgresql://${POSTGRES_FHIR_HOST}:${POSTGRES_FHIR_PORT}/${POSTGRES_FHIR_DATABASE}"
    username: ${POSTGRES_FHIR_USER}
    password: ${POSTGRES_FHIR_PASSWORD}
    driverClassName: org.postgresql.Driver

    # datasource:
    #   url: "jdbc:h2:file:./target/database/h2"
    #   #url: jdbc:h2:mem:test_mem
    #   username: sa
    #   password: null
    #   driverClassName: org.h2.Driver
    #   max-active: 15

    # database connection pool size
    hikari:
      maximum-pool-size: 10
  jpa:
    properties:
      hibernate.format_sql: false
      hibernate.show_sql: false
      #Hibernate dialect is automatically detected except Postgres and H2.
      #If using H2, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect
      #If using postgres, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgres94Dialect
      hibernate.dialect: ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgres94Dialect
      # hibernate.dialect: ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect
      #      hibernate.hbm2ddl.auto: update
      #      hibernate.jdbc.batch_size: 20
      #      hibernate.cache.use_query_cache: false
      #      hibernate.cache.use_second_level_cache: false
      #      hibernate.cache.use_structured_entries: false
      #      hibernate.cache.use_minimal_puts: false
      ###    These settings will enable fulltext search with lucene
      hibernate.search.enabled: false
  #      hibernate.search.backend.type: lucene
  #      hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiLuceneAnalysisConfigurer
  #      hibernate.search.backend.directory.type: local-filesystem
  #      hibernate.search.backend.directory.root: target/lucenefiles
  #      hibernate.search.backend.lucene_version: lucene_current
  batch:
    job:
      enabled: false
hapi:
  fhir:
    ### This enables the swagger-ui at /fhir/swagger-ui/index.html as well as the /fhir/api-docs (see https://hapifhir.io/hapi-fhir/docs/server_plain/openapi.html)
    openapi_enabled: true
    ### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5
    fhir_version: R4
    ### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers
    ### to determine the FHIR server address
    #   use_apache_address_strategy: false
    ### forces the use of the https:// protocol for the returned server address.
    ### alternatively, it may be set using the X-Forwarded-Proto header.
    #   use_apache_address_strategy_https: false
    ### enable to set the Server URL
    #    server_address: http://hapi.fhir.org/baseR4
    #    defer_indexing_for_codesystems_of_size: 101
    #    install_transitive_ig_dependencies: true
    #    implementationguides:
    ###    example from registry (packages.fhir.org)
    #      swiss:
    #        name: swiss.mednet.fhir
    #        version: 0.8.0
    #      example not from registry
    #      ips_1_0_0:
    #        url: https://build.fhir.org/ig/HL7/fhir-ips/package.tgz
    #        name: hl7.fhir.uv.ips
    #        version: 1.0.0
    #    supported_resource_types:
    #      - Patient
    #      - Observation
    #    allow_cascading_deletes: true
    #    allow_contains_searches: true
    #    allow_external_references: true
    #    allow_multiple_delete: true
    #    allow_override_default_search_params: true
    #    auto_create_placeholder_reference_targets: false
    #    cql_enabled: true
    #    default_encoding: JSON
    #    default_pretty_print: true
    #    default_page_size: 20
    #    delete_expunge_enabled: true
    #    enable_repository_validating_interceptor: false
    #    enable_index_missing_fields: false
    #    enable_index_of_type: true
    #    enable_index_contained_resource: false
    ###  !!Extended Lucene/Elasticsearch Indexing is still a experimental feature, expect some features (e.g. _total=accurate) to not work as expected!!
    ###  more information here: https://hapifhir.io/hapi-fhir/docs/server_jpa/elastic.html
    advanced_lucene_indexing: false
    #    enforce_referential_integrity_on_delete: false
    # This is an experimental feature, and does not fully support _total and other FHIR features.
    #    enforce_referential_integrity_on_delete: false
    #    enforce_referential_integrity_on_write: false
    #    etag_support_enabled: true
    #    expunge_enabled: true
    #    daoconfig_client_id_strategy: null
    #    client_id_strategy: ALPHANUMERIC
    #    fhirpath_interceptor_enabled: false
    #    filter_search_enabled: true
    #    graphql_enabled: true
    #    narrative_enabled: true
    #    mdm_enabled: true
    #    local_base_urls:
    #      - https://hapi.fhir.org/baseR4
    mdm_enabled: false
    #    partitioning:
    #      allow_references_across_partitions: false
    #      partitioning_include_in_search_hashes: false
    cors:
      allow_Credentials: true
      # These are allowed_origin patterns, see: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#setAllowedOriginPatterns-java.util.List-
      allowed_origin:
        - "*"

    # Search coordinator thread pool sizes
    search-coord-core-pool-size: 20
    search-coord-max-pool-size: 100
    search-coord-queue-capacity: 200

    # Threadpool size for BATCH'ed GETs in a bundle.
    #    bundle_batch_pool_size: 10
    #    bundle_batch_pool_max_size: 50

    #    logger:
    #      error_format: 'ERROR - ${requestVerb} ${requestUrl}'
    #      format: >-
    #        Path[${servletPath}] Source[${requestHeader.x-forwarded-for}]
    #        Operation[${operationType} ${operationName} ${idOrResourceName}]
    #        UA[${requestHeader.user-agent}] Params[${requestParameters}]
    #        ResponseEncoding[${responseEncodingNoDefault}]
    #      log_exceptions: true
    #      name: fhirtest.access
    #    max_binary_size: 104857600
    #    max_page_size: 200
    #    retain_cached_searches_mins: 60
    #    reuse_cached_search_results_millis: 60000
    tester:
      home:
        name: Local Tester
        server_address: "http://localhost:8080/fhir"
        refuse_to_fetch_third_party_urls: false
        fhir_version: R4
      global:
        name: Global Tester
        server_address: "http://hapi.fhir.org/baseR4"
        refuse_to_fetch_third_party_urls: false
        fhir_version: R4
#    validation:
#      requests_enabled: true
#      responses_enabled: true
#    binary_storage_enabled: true
#    bulk_export_enabled: true
#    subscription:
#      resthook_enabled: true
#      websocket_enabled: false
#      email:
#        from: some@test.com
#        host: google.com
#        port:
#        username:
#        password:
#        auth:
#        startTlsEnable:
#        startTlsRequired:
#        quitWait:
#    lastn_enabled: true
#    store_resource_in_lucene_index_enabled: true
###  This is configuration for normalized quantity serach level default is 0
###   0: NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED - default
###   1: NORMALIZED_QUANTITY_STORAGE_SUPPORTED
###   2: NORMALIZED_QUANTITY_SEARCH_SUPPORTED
#    normalized_quantity_search_level: 2
#elasticsearch:
#  debug:
#    pretty_print_json_log: false
#    refresh_after_write: false
#  enabled: false
#  password: SomePassword
#  required_index_status: YELLOW
#  rest_url: 'localhost:9200'
#  protocol: 'http'
#  schema_management_strategy: CREATE
#  username: SomeUsername