From df670aef05b36fed0c1ffe601894205d6001f486 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Fri, 28 Nov 2025 11:51:32 +0100 Subject: chore: cleanup dev settings and examples (#200) --- examples/deploy/docker-compose.yaml | 60 ++++++++++++++++++++++ examples/deploy/env-sample.env | 47 +++++++++++++++++ examples/dev/README_TEST_WITH_GPAS.md | 11 ++++ examples/dev/docker-compose.dev.yml | 96 +++++++++++++++++++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 examples/deploy/docker-compose.yaml create mode 100644 examples/deploy/env-sample.env create mode 100644 examples/dev/README_TEST_WITH_GPAS.md create mode 100644 examples/dev/docker-compose.dev.yml (limited to 'examples') diff --git a/examples/deploy/docker-compose.yaml b/examples/deploy/docker-compose.yaml new file mode 100644 index 0000000..754bb23 --- /dev/null +++ b/examples/deploy/docker-compose.yaml @@ -0,0 +1,60 @@ + + +services: + dnpm-etl-processor: + image: ghcr.io/ccc-mf/etl-processor:latest + environment: + LOGGING_LEVEL_DEV: ${DNPM_LOG_LEVEL:-INFO} + SPRING_KAFKA_SECURITY_PROTOCOL: ${DNPM_KAFKA_SECURITY_PROTOCOL:-SSL} + SPRING_KAFKA_SSL_TRUST-STORE-TYPE: PKCS12 + SPRING_KAFKA_SSL_TRUST-STORE-LOCATION: /opt/dnpm-processor/ssl/truststore.jks + SPRING_KAFKA_SSL_TRUST-STORE-PASSWORD: ${KAFKA_TRUST_STORE_PASSWORD} + SPRING_KAFKA_SSL_KEY-STORE-TYPE: PKCS12 + SPRING_KAFKA_SSL_KEY-STORE-LOCATION: /opt/dnpm-processor/ssl/keystore.jks + SPRING_KAFKA_SSL_KEY-STORE-PASSWORD: ${DNPM_PROCESSOR_KEY_STORE_PASSWORD} + SPRING_KAFKA_PRODUCER_COMPRESSION-TYPE: gzip + APP_KAFKA_TOPIC: ${DNPM_KAFKA_TOPIC} + APP_KAFKA_SERVERS: ${KAFKA_BROKERS} + APP_KAFKA_GROUP_ID: ${DNPM_KAFKA_GROUP_ID} + APP_KAFKA_RESPONSE_TOPIC: ${DNPM_KAFKA_RESPONSE_TOPIC} + APP_REST_URI: ${DNPM_BWHC_REST_URI} + APP_REST_USERNAME: ${DNPM_BWHC_REST_USERNAME} + APP_REST_PASSWORD: ${DNPM_BWHC_REST_PASSWORD} + APP_REST_IS_BWHC: ${DNPM_BWHC_REST_IS_BWHC} + APP_SECURITY_ADMIN_USER: ${DNPM_ADMIN_USER} + APP_SECURITY_ADMIN_PASSWORD: ${DNPM_ADMIN_PASSWORD} + SPRING_DATASOURCE_URL: ${DNPM_DATASOURCE_URL} + SPRING_DATASOURCE_PASSWORD: ${DNPM_MARIADB_USER_PW} + SPRING_DATASOURCE_USERNAME: ${DNPM_MARIADB_DB} + APP_PSEUDONYMIZE_GPAS_SSLCALOCATION: /workspace/opt/dnpm-processor/ssl/mosaic.crt + APP_PSEUDONYMIZE_GPAS_PASSWORD: ${DNPM_PSEUDONYMIZE_GPAS_PASSWORD} + APP_PSEUDONYMIZE_GPAS_USERNAME: ${DNPM_PSEUDONYMIZE_GPAS_USERNAME} + APP_PSEUDONYMIZE_GPAS_TARGET: ${DNPM_PSEUDONYMIZE_GPAS_TARGET} + APP_PSEUDONYMIZE_GPAS_URI: ${DNPM_PSEUDONYMIZE_GPAS_URI} + APP_PSEUDONYMIZE_PREFIX: ${DNPM_APP_PSEUDONYMIZE_PREFIX} + APP_PSEUDONYMIZER: ${DNPM_PSEUDONYMIZE_GENERATOR} + volumes: + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro + #- ${DNPM_TO_SSL_KEYSTORE_LOCATION}:/workspace/opt/dnpm-processor/ssl/keystore.jks:ro + #- ${KAFKA_TRUST_STORE_LOCATION}:/workspace/opt/dnpm-processor/ssl/truststore.jks:ro + #- ${DNPM_PSEUDONYMIZE_GPAS_SSLCALOCATION}:/workspace/opt/dnpm-processor/ssl/mosaic.crt + + depends_on: + - dnpm-monitor-db + ports: + - "${DNPM_MONITORING_HTTP_PORT:-8080}:8080" + + # todo add volume + dnpm-monitor-db: + image: mariadb:10 + environment: + MARIADB_DATABASE: ${DNPM_MARIADB_DB} + MARIADB_USER: ${DNPM_MARIADB_USER} + MARIADB_PASSWORD: ${DNPM_MARIADB_USER_PW} + MARIADB_ROOT_PASSWORD: ${DNPM_MARIADB_ROOT_PW} + expose: + - "3306" + + + diff --git a/examples/deploy/env-sample.env b/examples/deploy/env-sample.env new file mode 100644 index 0000000..4888474 --- /dev/null +++ b/examples/deploy/env-sample.env @@ -0,0 +1,47 @@ +# monitoring access port +DNPM_MONITORING_HTTP_PORT=8088 +DNPM_LOG_LEVEL=INFO + +# ADMIN USER CREDENTIALS +DNPM_ADMIN_USER=admin +DNPM_ADMIN_PASSWORD= + +# GPAS or BUILDIN +DNPM_PSEUDONYMIZE_GENERATOR=BUILDIN +DNPM_APP_PSEUDONYMIZE_PREFIX=ANONYM +DNPM_PSEUDONYMIZE_GPAS_URI= +DNPM_PSEUDONYMIZE_GPAS_TARGET= +DNPM_PSEUDONYMIZE_GPAS_USERNAME= +DNPM_PSEUDONYMIZE_GPAS_PASSWORD= + +# path to ca root cert if needed +DNPM_PSEUDONYMIZE_GPAS_SSLCALOCATION= + +DNPM_MARIADB_DB=dnpm_monitoring +DNPM_MARIADB_USER=$DNPM_MARIADB_DB +DNPM_MARIADB_USER_PW=MySuperSecurePassword111 +DNPM_MARIADB_ROOT_PW=MySuperDuperSecurePassword111 + +# monitoring data db +DNPM_DATASOURCE_URL=jdbc:mariadb://dnpm-monitor-db:3306/$DNPM_MARIADB_DB + +## TARGET SYSTEMS CONFIG +# in case of direct access to bwhc enter endpoint url here +DNPM_BWHC_REST_URI= +DNPM_BWHC_REST_USERNAME= +DNPM_BWHC_REST_PASSWORD= +DNPM_BWHC_REST_IS_BWHC=false + +# produce mtb files to this topic - values 'false' disabling kafka processing +DNPM_KAFKA_TOPIC=false +KAFKA_BROKERS=false +DNPM_KAFKA_SECURITY_PROTOCOL=PLAINTEXT + +# here we receive responses from bwhc +DNPM_KAFKA_RESPONSE_TOPIC=dnpm-response +DNPM_KAFKA_GROUP_ID=dnpm + +# SSL or PLAINTEXT +DNPM_PROCESSOR_KEY_STORE_PASSWORD= +DNPM_TO_SSL_KEYSTORE_LOCATION= + diff --git a/examples/dev/README_TEST_WITH_GPAS.md b/examples/dev/README_TEST_WITH_GPAS.md new file mode 100644 index 0000000..ff9f62b --- /dev/null +++ b/examples/dev/README_TEST_WITH_GPAS.md @@ -0,0 +1,11 @@ +# Test with gPAS +1. Download from [Latest Docker-compose version of gPAS](https://www.ths-greifswald.de/gpas/#_download "") +2. copy `./demo/demo_gpas.sql` into `./sqls` folder +3. if needed change port mapping +4. startup via `docker compose up -d` + +By default, PSN are created via `localhost:8080/ttp-fhir/fhir/gpas/$pseudonymizeAllowCreate` endpoint +You can review created PSN via gPAs web interface running at `http://localhost:8080/gpas-web/` + + + diff --git a/examples/dev/docker-compose.dev.yml b/examples/dev/docker-compose.dev.yml new file mode 100644 index 0000000..f8f9183 --- /dev/null +++ b/examples/dev/docker-compose.dev.yml @@ -0,0 +1,96 @@ +version: '3.7' + +services: + + zoo: + image: zookeeper:3.9.2 + restart: unless-stopped + ports: + - "2181:2181" + environment: + ZOO_MY_ID: 1 + ZOO_PORT: 2181 + ZOO_SERVERS: server.1=zoo:2888:3888;2181 + + kafka: + image: confluentinc/cp-kafka:7.6.1 + ports: + - "9092:9092" + environment: + KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka:19092,LISTENER_DOCKER_EXTERNAL://172.17.0.1:9093,LISTENER_EXTERNAL://127.0.0.1:9092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT,LISTENER_EXTERNAL:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL + KAFKA_ZOOKEEPER_CONNECT: zoo:2181 + KAFKA_BROKER_ID: 1 + KAFKA_LOG4J_LOGGERS: kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_MESSAGE_MAX_BYTES: 5242880 + KAFKA_REPLICA_FETCH_MAX_BYTES: 5242880 + KAFKA_COMPRESSION_TYPE: gzip + depends_on: + - zoo + healthcheck: + test: kafka-topics --bootstrap-server kafka:9092 --list + interval: 30s + timeout: 10s + retries: 3 + + akhq: + image: tchiotludo/akhq:0.25.0 + environment: + AKHQ_CONFIGURATION: | + akhq: + ui-options: + topic.show-all-consumer-groups: true + topic-data.sort: NEWEST + connections: + docker-kafka-server: + properties: + bootstrap.servers: "kafka:19092" + ports: + - "9000:8080" + depends_on: + - kafka + + kafka-rest-proxy: + image: confluentinc/cp-kafka-rest:7.2.1 + hostname: kafka-rest-proxy + ports: + - "8082:8082" + environment: + # KAFKA_REST_ZOOKEEPER_CONNECT: zoo1:2181 + KAFKA_REST_LISTENERS: http://0.0.0.0:8082/ + KAFKA_REST_SCHEMA_REGISTRY_URL: http://kafka-schema-registry:8081/ + KAFKA_REST_HOST_NAME: kafka-rest-proxy + KAFKA_REST_BOOTSTRAP_SERVERS: PLAINTEXT://kafka1:19092 + depends_on: + - zoo + - kafka + + kafka-connect: + image: confluentinc/cp-kafka-connect:7.2.1 + hostname: kafka-connect + ports: + - "8083:8083" + environment: + CONNECT_BOOTSTRAP_SERVERS: "kafka1:19092" + CONNECT_REST_PORT: 8083 + CONNECT_GROUP_ID: compose-connect-group + CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs + CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets + CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status + CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.storage.StringConverter" + CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" + CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect" + CONNECT_LOG4J_ROOT_LOGLEVEL: "INFO" + CONNECT_LOG4J_LOGGERS: "org.apache.kafka.connect.runtime.rest=WARN,org.reflections=ERROR" + CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1" + CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1" + CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1" + CONNECT_PLUGIN_PATH: "/usr/share/java,/etc/kafka-connect/jars" + #volumes: + # - ./connectors:/etc/kafka-connect/jars/ + depends_on: + - zoo + - kafka + - kafka-rest-proxy -- cgit v1.2.3