Merge "Part 1: Refactor CPS Delta code to utility class"
[cps.git] / docker-compose / docker-compose.yml
index ed37f58..e9fd9da 100644 (file)
@@ -1,7 +1,7 @@
 # ============LICENSE_START=======================================================
 # Copyright (c) 2020 Pantheon.tech.
 # Modifications Copyright (C) 2021 Bell Canada.
-# Modifications Copyright (C) 2022 Nordix Foundation.
+# Modifications Copyright (C) 2022-2025 OpenInfra Foundation Europe.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 
 services:
 
-  ### docker-compose up -d -> run ALL services ###
-  ### to disable notifications make notification.enabled to false & comment out kafka/zookeeper services ###
+  ### docker-compose up -d -> run CPS with stubbed dmi-plugin (DMI-stub, and monitoring services for k6 testing)
+  ### docker-compose --profile tracing up -d -> run CPS with stubbed dmi-plugin (DMI-stub for k6 testing with jaeger tracing)
+  ### docker-compose -f dmi-services.yml up -d -> run ONAP-DMI plugin, and related services such as SDNC, and PNF-Simulator
+  ### docker-compose -f docker-compose.yml -f dmi-services.yml up -d -> run CPS with dmi-plugin (cps-base, and ONAP-DMI services for CSIT testing)
+  ### docker-compose --project-name endurance --env-file env/endurance.env up -d -> run CPS with DMI-stub for Endurance testing
+  ### docker-compose --project-name endurance down --volumes -> stop and remove containers and volumes
+  ### To disable notification make notification.enabled to false and comment out kafka/zookeeper services
+  ### DEBUG: Look for '### DEBUG' comments to enable CPS-NCMP debugging
 
   dbpostgresql:
-    container_name: dbpostgresql
-    image: postgres:13.2-alpine
+    container_name: ${DB_CONTAINER_NAME:-dbpostgresql}
+    image: postgres:14.1-alpine
     ports:
       - ${DB_PORT:-5432}:5432
     environment:
       POSTGRES_DB: cpsdb
       POSTGRES_USER: ${DB_USERNAME:-cps}
       POSTGRES_PASSWORD: ${DB_PASSWORD:-cps}
+    volumes:
+      - ./config/postgres-init.sql:/docker-entrypoint-initdb.d/postgres-init.sql
+    deploy:
+      resources:
+        reservations:
+          cpus: '1'
+          memory: 1G
+        limits:
+          cpus: '6'
+          memory: 3G
+    healthcheck:
+      test: pg_isready -U ${DB_USERNAME:-cps} -d cpsdb || exit 1 # This command runs inside the container, returning 0 for success, non-zero for failure.
+      timeout: 110s               # Time-out of the above test command.
+      interval: 10s               # How often the health is run.
+      retries: 10                 # If 10 health checks fail, the container is unhealthy.
 
-  cps-and-ncmp:
-    container_name: cps-and-ncmp
+  cps-and-ncmp-template:
     image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest}
-    ports:
-      - ${CPS_CORE_PORT:-8883}:8080
-      - ${CPS_CORE_MANAGEMENT_PORT:-8887}:8081
+    ### DEBUG: Uncomment next line to enable java debugging (ensure 'ports' aligns with 'deploy')
+    ### ports:
+    ### - ${CPS_CORE_DEBUG_PORT:-5005}:5005
     environment:
-      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
-      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
       DB_HOST: ${DB_HOST:-dbpostgresql}
       DB_USERNAME: ${DB_USERNAME:-cps}
       DB_PASSWORD: ${DB_PASSWORD:-cps}
       DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
       DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
-      KAFKA_BOOTSTRAP_SERVER: kafka:9092
+      KAFKA_BOOTSTRAP_SERVER: kafka:29092
       notification.enabled: 'true'
-      notification.async.executor.time-out-value-in-ms: 2000
-      NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
-      TIMERS_ADVISED-MODULES-SYNC_SLEEP-TIME-MS: 2000
-      TIMERS_CM-HANDLE-DATA-SYNC_SLEEP-TIME-MS: 2000
-    restart: unless-stopped
+      ONAP_TRACING_ENABLED: 'false'
+      ONAP_OTEL_SAMPLER_JAEGER_REMOTE_ENDPOINT: http://jaeger-service:14250
+      ONAP_OTEL_EXPORTER_ENDPOINT: http://jaeger-service:4317
+      POLICY_SERVICE_ENABLED: 'false'
+      POLICY_SERVICE_DEFAULT_DECISION: 'deny from env'
+      CPS_MONITORING_MICROMETER_JVM_EXTRAS: 'true'
+      JAVA_TOOL_OPTIONS: "-XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0"
+      ### DEBUG: Uncomment next line to enable java debugging
+      ### JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
+    restart: on-failure:3
+    deploy:
+      replicas: 0
+      resources:
+        limits:
+          cpus: '3'
+          memory: 3G
+    memswap_limit: 3G
+    healthcheck:
+      test: wget -q -O - http://localhost:8080/actuator/health/readiness | grep -q '{"status":"UP"}' || exit 1
+      interval: 10s
+      timeout: 10s
+      retries: 10
+      start_period: 60s
+
+  cps-and-ncmp-0:
+    extends:
+      service: cps-and-ncmp-template
+    container_name: ${CPS_INSTANCE_0_CONTAINER_NAME:-cps-and-ncmp-0}
+    deploy:
+      replicas: 1
+    hostname: cps-ncmp-0
+    ports:
+      - ${CPS_INSTANCE_0_REST_PORT:-8698}:8080
     depends_on:
-      - dbpostgresql
+        dbpostgresql:
+            condition: service_healthy
 
-  ### if kafka is not required comment out zookeeper and kafka ###
+  ### DEBUG: For easier debugging use just 1 instance and comment out below
+  cps-and-ncmp-1:
+    extends:
+      service: cps-and-ncmp-template
+    container_name: ${CPS_INSTANCE_1_CONTAINER_NAME:-cps-and-ncmp-1}
+    deploy:
+      replicas: 1
+    hostname: cps-ncmp-1
+    ports:
+      - ${CPS_INSTANCE_1_REST_PORT:-8699}:8080
+    depends_on:
+      dbpostgresql:
+        condition: service_healthy
+
+  nginx:
+    container_name: ${NGINX_CONTAINER_NAME:-nginx-loadbalancer}
+    image: nginx:latest
+    ports:
+      - ${CPS_CORE_PORT:-8883}:80
+    depends_on:
+      - cps-and-ncmp-0
+      ### DEBUG: For easier debugging use just 1 instance and comment out below
+      - cps-and-ncmp-1
+    volumes:
+      - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf
+      - ./config/nginx/proxy_params:/etc/nginx/proxy_params
+    healthcheck:
+      test: curl -fs http://localhost/actuator/health/readiness || exit 1
+      interval: 10s
+      timeout: 10s
+      retries: 3
+      start_period: 60s
+
+  ### if kafka is not required, comment out zookeeper and kafka
   zookeeper:
-    image: confluentinc/cp-zookeeper:6.2.1
-    container_name: zookeeper
+    image: confluentinc/cp-zookeeper:7.8.0
+    container_name: ${ZOOKEEPER_CONTAINER_NAME:-zookeeper}
     ports:
-      - '2181:2181'
+      - ${ZOOKEEPER_PORT:-2181}:2181
     environment:
       ZOOKEEPER_CLIENT_PORT: 2181
+    healthcheck:
+      test: nc -z localhost 2181 || exit 1
+      interval: 10s
+      timeout: 10s
+      retries: 3
+      start_period: 30s
 
   kafka:
-    image: confluentinc/cp-kafka:6.2.1
-    container_name: kafka
+    image: confluentinc/cp-kafka:7.8.0
+    container_name: ${KAFKA_CONTAINER_NAME:-kafka}
     ports:
-      - "19092:19092"
+      - ${KAFKA_PORT:-9092}:9092
     depends_on:
       - zookeeper
     environment:
       KAFKA_BROKER_ID: 1
       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
-      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,CONNECTIONS_FROM_HOST://localhost:19092
       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT
+      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,CONNECTIONS_FROM_HOST://localhost:9092
       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+    healthcheck:
+      test: kafka-topics --bootstrap-server kafka:29092 --list || exit 1
+      interval: 10s
+      timeout: 10s
+      retries: 3
+      start_period: 30s
 
-  ### Comment out this section if dmi plugin is not required ###
-  ncmp-dmi-plugin:
-    container_name: ncmp-dmi-plugin
-    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/ncmp-dmi-plugin:${DMI_VERSION:-1.2.0-SNAPSHOT-latest}
+  ncmp-dmi-plugin-demo-and-csit-stub:
+    container_name: ${NCMP_DMI_PLUGIN_DEMO_AND_CSIT_STUB_CONTAINER_NAME:-ncmp-dmi-plugin-demo-and-csit-stub}
+    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/dmi-stub:${DMI_DEMO_STUB_VERSION:-1.8.0-SNAPSHOT}
     ports:
-      - ${DMI_PORT:-8783}:8080
-      - ${DMI_MANAGEMENT_PORT:-8787}:8081
+      - ${DMI_DEMO_STUB_PORT:-8784}:8092
     environment:
-      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
-      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
-      CPS_CORE_HOST: ${CPS_CORE_HOST:-cps-and-ncmp}
-      CPS_CORE_PORT: ${CPS_CORE_PORT:-8080}
-      CPS_CORE_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
-      CPS_CORE_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
-      SDNC_HOST: ${SDNC_HOST:-sdnc}
-      SDNC_PORT: ${SDNC_PORT:-8181}
-      SDNC_USERNAME: ${SDNC_USERNAME:-admin}
-      SDNC_PASSWORD: ${SDNC_PASSWORD:-Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U}
-      DMI_SERVICE_URL: ${DMI_SERVICE_URL:-http://ncmp-dmi-plugin:8783}
-      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
-      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
-      KAFKA_BOOTSTRAP_SERVER: kafka:9092
-      notification.data-updated.enabled: 'true'
-      NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
+      KAFKA_BOOTSTRAP_SERVER: kafka:29092
+      NCMP_CONSUMER_GROUP_ID: ncmp-group
+      NCMP_ASYNC_M2M_TOPIC: ncmp-async-m2m
+      MODULE_INITIAL_PROCESSING_DELAY_MS: 180000
+      MODULE_REFERENCES_DELAY_MS: 100
+      MODULE_RESOURCES_DELAY_MS: 1000
+      READ_DATA_FOR_CM_HANDLE_DELAY_MS: 300
+      WRITE_DATA_FOR_CM_HANDLE_DELAY_MS: 670
+    restart: unless-stopped
+    healthcheck:
+      test: wget -q -O - http://localhost:8092/actuator/health/readiness | grep -q '{"status":"UP"}' || exit 1
+      interval: 10s
+      timeout: 10s
+      retries: 3
+      start_period: 30s
+
+  policy-executor-stub:
+    container_name: ${POLICY_EXECUTOR_STUB_CONTAINER_NAME:-policy-executor-stub}
+    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/policy-executor-stub:latest
+    ports:
+      - ${POLICY_EXECUTOR_STUB_PORT:-8785}:8093
+    restart: unless-stopped
+    # Note policy-executor-stub does not have a healthcheck as it does not expose /actuator/health endpoint
+
+  prometheus:
+    container_name: ${PROMETHEUS_CONTAINER_NAME:-prometheus}
+    image: prom/prometheus:latest
+    ports:
+      - ${PROMETHEUS_PORT:-9090}:9090
+    restart: always
+    volumes:
+      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
+      - prometheus_data:/prometheus
+    environment:
+      - PROMETHEUS_RETENTION_TIME=${PROMETHEUS_RETENTION_TIME:-30d}
+
+
+  grafana:
+    image: grafana/grafana:latest
+    container_name: ${GRAFANA_CONTAINER_NAME:-grafana}
+    depends_on:
+      - prometheus
+    ports:
+      - ${GRAFANA_PORT:-3000}:3000
+    volumes:
+      - ./config/grafana/provisioning/:/etc/grafana/provisioning/
+      - ./config/grafana/jvm-micrometer-dashboard.json:/var/lib/grafana/dashboards/jvm-micrometer-dashboard.json
+      - ./config/grafana/inventory-dashboard.json:/var/lib/grafana/dashboards/inventory-dashboard.json
+      - ./config/grafana/data-dashboard.json:/var/lib/grafana/dashboards/data-dashboard.json
+      - ./config/grafana/postgresql-statistics-dashboard.json:/var/lib/grafana/dashboards/postgresql-statistics-dashboard.json
+      - ./config/grafana/cps-database-pool.json:/var/lib/grafana/dashboards/cps-database-pool.json
+      - grafana:/var/lib/grafana
+    environment:
+      - GF_SECURITY_ADMIN_PASSWORD=admin
+      - GF_SERVER_DOMAIN=localhost
+
+
+  kafka-ui:
+    container_name: ${KAFKA_UI_CONTAINER_NAME:-kafka-ui}
+    image: provectuslabs/kafka-ui:latest
+    ports:
+      - ${KAFKA_UI_PORT:-8089}:8080
+    environment:
+      DYNAMIC_CONFIG_ENABLED: 'true'
+      KAFKA_CLUSTERS_0_NAME: 'cps-kafka-local'
+      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
+
+
+  jaeger-service:
+    container_name: ${JAEGER_SERVICE_CONTAINER_NAME:-jaeger-service}
+    image: jaegertracing/all-in-one:latest
+    ports:
+      - ${JAEGER_SERVICE_PORT:-16686}:16686
     restart: unless-stopped
+    profiles:
+      - tracing
+
+  postgres-exporter:
+    container_name: ${POSTGRES_EXPORTER_CONTAINER_NAME:-postgres-exporter}
+    image: quay.io/prometheuscommunity/postgres-exporter
+    environment:
+      - DATA_SOURCE_NAME=postgresql://${DB_USERNAME:-cps}:${DB_PASSWORD:-cps}@${DB_CONTAINER_NAME:-dbpostgresql}:5432/postgres?sslmode=disable
+    ports:
+      - ${POSTGRES_EXPORTER_PORT:-9187}:9187
+    depends_on:
+      - dbpostgresql
+
+volumes:
+  grafana:
+    driver: local
+  prometheus_data:
+    driver: local