# ============LICENSE_START======================================================= # Copyright (c) 2020 Pantheon.tech. # Modifications Copyright (C) 2021 Bell Canada. # 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. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============LICENSE_END========================================================= 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: ${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-template: image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest} ### DEBUG: Uncomment next line to enable java debugging (ensure 'ports' aligns with 'deploy') ### ports: ### - ${CPS_CORE_DEBUG_PORT:-5005}:5005 environment: 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:29092 notification.enabled: 'true' 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: condition: service_healthy ### 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:7.8.0 container_name: ${ZOOKEEPER_CONTAINER_NAME:-zookeeper} ports: - ${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:7.8.0 container_name: ${KAFKA_CONTAINER_NAME:-kafka} ports: - ${KAFKA_PORT:-9092}:9092 depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 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 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_DEMO_STUB_PORT:-8784}:8092 environment: 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