# ============LICENSE_START=======================================================
# Copyright (c) 2020 Pantheon.tech.
# Modifications Copyright (C) 2021 Bell Canada.
# Modification (C) 2021 Nordix Foundation
# ================================================================================
# 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=========================================================

version: "3.7"

services:
  #cps-standalone:
  #  container_name: cps-service
  #  image: cps-service:${VERSION}
  #  volumes:
  #    - "./application.yml:/app/resources/application.yml"
  #  ports:
  #    - "8881:8080"
  #  environment:
  #    DB_HOST: ${DB_HOST}
  #    DB_USERNAME: ${DB_USERNAME}
  #    DB_PASSWORD: ${DB_PASSWORD}
  #  restart: unless-stopped
  #  depends_on:
  #    - dbpostgresql

  #ncmp-standalone:
  #  container_name: cps-ncmp
  #  image: cps-ncmp:${VERSION}
  #  volumes:
  #    - "./application.yml:/app/resources/application.yml"
  #  ports:
  #    - "8882:8080"
  #  environment:
  #    DB_HOST: ${DB_HOST}
  #    DB_USERNAME: ${DB_USERNAME}
  #    DB_PASSWORD: ${DB_PASSWORD}
  #  restart: unless-stopped
  #  depends_on:
  #    - dbpostgresql

  cps-and-ncmp:
    container_name: cps-and-ncmp
    image: cps-and-ncmp:${VERSION}
    ports:
      - "8883:8080"
    environment:
      DB_HOST: dbpostgresql
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
    restart: unless-stopped
    depends_on:
      - dbpostgresql

  dbpostgresql:
    container_name: dbpostgresql
    image: postgres:12.4-alpine
    ports:
      - '5432:5432'
    environment:
      POSTGRES_DB: cpsdb
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
