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

  #nf-proxy-standalone:
  #  container_name: cps-nf-proxy
  #  image: cps-nf-proxy:${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-nf-proxy:
    container_name: cps-and-nf-proxy
    image: cps-and-nf-proxy:${VERSION}
    volumes:
      - "./application.yml:/app/resources/application.yml"
    ports:
      - "8883:8080"
    environment:
      DB_HOST: ${DB_HOST}
      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}