OCS.io Applications

This section covers the OCS.io Applications setup required for OCS.io deployment.

Basically, you do not need to change anything in the docker-compose-app.yml file:

version: "3.4"


x-common-spring-env-variables: &common-spring-env-variables
  OCS_ENVIRONMENT: ${OCS_ENVIRONMENT}
  OCS_PREFIX: ${OCS_PREFIX}
  OCS_DEPLOYMENT_ID: ${OCS_DEPLOYMENT_ID}
  OCS_DEPLOYMENT_MANAGER: ${OCS_DEPLOYMENT_MANAGER}
  OCS_PLATFORM_APP_ID: ${OCS_PLATFORM_APP_ID}
  OCS_PLATFORM_API_KEY: ${OCS_PLATFORM_API_KEY}
  OCS_PLATFORM_TIME_ZONE: ${OCS_PLATFORM_TIME_ZONE}
  OCS_POSTGRES_URL: jdbc:postgresql://${DNS_DB_SERVER}/${POSTGRES_DATABASE}?currentSchema=${POSTGRES_SCHEMA}&ApplicationName=ocs
  OCS_POSTGRES_USERNAME: ${POSTGRES_USERNAME}
  OCS_POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  OCS_REDIS_URL: ${DNS_CACHE_SERVER}
  OCS_REDIS_PORT: ${REDIS_PORT_EXT}
  OCS_RABBIT_URL: ${DNS_RABBITMQ}
  OCS_RABBIT_PORT: ${RABBIT_PORT_EXT}
  OCS_RABBIT_USERNAME: ${RABBIT_USERNAME}
  OCS_RABBIT_PASSWORD: ${RABBIT_PASSWORD}


networks:
  ocs-app-network:
    external: true


services:

  # *** App Updater ***
  ocs-app-updater:
    container_name: ${DNS_OCS_APP_UPDATER}
    image: ${REGISTRY}/app-updater:latest
    environment:
      <<: *common-spring-env-variables
    networks:
      - ocs-app-network

  # *** Config Server ***
  ocs-config-server:
    container_name: ${DNS_OCS_CONFIG_SERVER}
    image: ${REGISTRY}/config-server:latest
    depends_on: 
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_CONFIG_SERVER_PORT_INT}
      SERVER_DOMAIN_NAME: ${OCS_CONFIG_SERVER_DOMAIN_NAME}
    ports:
      - "${OCS_CONFIG_SERVER_PORT_EXT}:${OCS_CONFIG_SERVER_PORT_INT}"
    networks:
      - ocs-app-network
    
  # *** CASM Server ***
  ocs-casm-server:
    container_name: ${DNS_OCS_CASM_SERVER}
    image: ${REGISTRY}/casm-server:latest
    depends_on:
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_CASM_SERVER_PORT_INT}
      SERVER_DOMAIN_NAME: ${OCS_CASM_SERVER_DOMAIN_NAME}
    ports:
      - "${OCS_CASM_SERVER_PORT_EXT}:${OCS_CASM_SERVER_PORT_INT}"
    networks:
      - ocs-app-network

  # *** Billing & Invoicing Server ***
  ocs-billing-server:
    container_name: ${DNS_OCS_BILLING_SERVER}
    image: ${REGISTRY}/billing-server:latest
    depends_on: 
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_BILLING_SERVER_PORT_INT}
    ports:
      - "${OCS_BILLING_SERVER_PORT_EXT}:${OCS_BILLING_SERVER_PORT_INT}"
    networks:
      - ocs-app-network

  # *** Data Extractor ***
  ocs-data-extractor:
    container_name: ${DNS_OCS_DATA_EXTRACTOR}
    image: ${REGISTRY}/data-extractor:latest
    depends_on: 
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_DATA_EXTRACTOR_PORT_INT}
      OCS_NFS_ROOT: ${FS_OCS_DATA}
    ports:
      - "${OCS_DATA_EXTRACTOR_PORT_EXT}:${OCS_DATA_EXTRACTOR_PORT_INT}"
    networks:
      - ocs-app-network

  # *** Data Extractor ***
  ocs-edr-processor:
    container_name: ${DNS_OCS_EDR_PROCESSOR}
    image: ${REGISTRY}/edr-processor:latest
    depends_on: 
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_EDR_PROCESSOR_PORT_INT}
      OCS_NFS_ROOT: ${FS_OCS_DATA}
    ports:
      - "${OCS_EDR_PROCESSOR_PORT_EXT}:${OCS_EDR_PROCESSOR_PORT_INT}"
    networks:
      - ocs-app-network

Now, let’s break down each component of the OCS.io Applications:

Spring Boot

Following section is essential for correct running of Java Spring Boot based applications:

x-common-spring-env-variables: &common-spring-env-variables
  OCS_ENVIRONMENT: ${OCS_ENVIRONMENT}
  OCS_PREFIX: ${OCS_PREFIX}
  OCS_DEPLOYMENT_ID: ${OCS_DEPLOYMENT_ID}
  OCS_DEPLOYMENT_MANAGER: ${OCS_DEPLOYMENT_MANAGER}
  OCS_PLATFORM_APP_ID: ${OCS_PLATFORM_APP_ID}
  OCS_PLATFORM_API_KEY: ${OCS_PLATFORM_API_KEY}
  OCS_PLATFORM_TIME_ZONE: ${OCS_PLATFORM_TIME_ZONE}
  OCS_CONN_POSTGRES_URL: jdbc:postgresql://${DNS_DB_SERVER}/${POSTGRES_DATABASE}?currentSchema=${POSTGRES_SCHEMA}&ApplicationName=ocs
  OCS_CONN_POSTGRES_USERNAME: ${POSTGRES_USERNAME}
  OCS_CONN_POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  OCS_CONN_REDIS_URL: ${DNS_CACHE_SERVER}
  OCS_CONN_REDIS_PORT: ${REDIS_PORT_EXT}
  OCS_CONN_RABBIT_URL: ${DNS_RABBITMQ}
  OCS_CONN_RABBIT_PORT: ${RABBIT_PORT_EXT}
  OCS_CONN_RABBIT_USERNAME: ${RABBIT_USERNAME}
  OCS_CONN_RABBIT_PASSWORD: ${RABBIT_PASSWORD}

All listed attributes must be populate from the environment variables.

Application Updater

Application Updater is component responsible for applying DB changes and configuration to the OCS.io Database.

It is standard Java Spring Boot application, hence passing common-spring-env-variables we explained in previous step is mandatory.

  # *** App Updater ***
  ocs-app-updater:
    container_name: ${DNS_OCS_APP_UPDATER}
    image: ${REGISTRY}/app-updater:latest
    environment:
      <<: *common-spring-env-variables
    networks:
      - ocs-app-network

Difference from other modules is, that this Service is not running as a daemon and hence there is no restart: always flag.

Java Applications

Following there is typical Java Spring Boot based service, in this case OCS Configuration Server:

  # *** Config Server ***
  ocs-config-server:
    container_name: ${DNS_OCS_CONFIG_SERVER}
    image: ${REGISTRY}/config-server:latest
    depends_on:
      - ocs-app-updater
    restart: always
    environment:
      <<: *common-spring-env-variables
      SERVER_PORT: ${OCS_CONFIG_SERVER_PORT_INT}
    ports:
      - "${OCS_CONFIG_SERVER_PORT_EXT}:${OCS_CONFIG_SERVER_PORT_INT}"
    networks:
      - ocs-app-network

Service depends on ocs-app-updater service explained in previous chapter. Again, passing of common-spring-env-variables is mandatory.

As service is running as a daemon, it require restart: always to be set.