version: '3.6' services: ##----Start: EIS Base Images -- This Base images must be included for building any EIS servcies ---- ## Define ia_eisbase service ia_eisbase: build: context: $PWD/../common dockerfile: $PWD/../common/dockerfiles/Dockerfile.eisbase args: UBUNTU_IMAGE_VERSION: ${UBUNTU_IMAGE_VERSION} EIS_VERSION: ${EIS_VERSION} DOCKER_REGISTRY: ${DOCKER_REGISTRY} image: ${DOCKER_REGISTRY}ia_eisbase:${EIS_VERSION} ## Define ia_common service ia_common: depends_on: - ia_eisbase build: context: $PWD/../common dockerfile: $PWD/../common/dockerfiles/Dockerfile.common args: EIS_VERSION: ${EIS_VERSION} # set CMAKE_BUILD_TYPE value to "Debug" to generate debug symbols CMAKE_BUILD_TYPE: "Release" DOCKER_REGISTRY: ${DOCKER_REGISTRY} read_only: true image: ${DOCKER_REGISTRY}ia_common:${EIS_VERSION} ## Define ia_openvino_base service ia_openvino_base: depends_on: - ia_common build: context: $PWD/../common/openvino dockerfile: $PWD/../common/openvino/Dockerfile.openvino args: EIS_VERSION: ${EIS_VERSION} DOCKER_REGISTRY: ${DOCKER_REGISTRY} read_only: true image: ${DOCKER_REGISTRY}ia_openvino_base:${EIS_VERSION} ##----End: EIS Base Images---- -- This Base images must be included for building any EIS servcies ---- ## Define ETCD UI service - must be included to view ETCD data over web UI ia_etcd_ui: depends_on: - ia_common build: context: $PWD/../EtcdUI dockerfile: $PWD/../EtcdUI/Dockerfile args: ETCD_KEEPER_VERSION: ${ETCD_KEEPER_VERSION} EIS_VERSION: ${EIS_VERSION} DOCKER_REGISTRY: ${DOCKER_REGISTRY} read_only: true image: ${DOCKER_REGISTRY}ia_etcd_ui:${EIS_VERSION} container_name: ia_etcd_ui hostname: ia_etcd_ui network_mode: host restart: unless-stopped environment: AppName: "EtcdUi" DEV_MODE: ${DEV_MODE} NGINX_PORT: 7071 CertType: "pem" no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} volumes: - "vol_etcd_keeper:/tmp/nginx" user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_root_cert # - etcd_root_key ##----Start: EIS Containers ---- ## Define VideoIngestion service ia_video_ingestion: depends_on: - ia_openvino_base build: context: $PWD/../VideoIngestion dockerfile: $PWD/../VideoIngestion/Dockerfile args: EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} EIS_USER_NAME: ${EIS_USER_NAME} # set CMAKE_BUILD_TYPE value to "Debug" to generate debug symbols CMAKE_BUILD_TYPE: "Release" WITH_PROFILE: "OFF" DOCKER_REGISTRY: ${DOCKER_REGISTRY} image: ${DOCKER_REGISTRY}ia_video_ingestion:${EIS_VERSION} container_name: ia_video_ingestion hostname: ia_video_ingestion network_mode: host restart: unless-stopped environment: AppName: "VideoIngestion" DEV_MODE: ${DEV_MODE} PROFILING_MODE: ${PROFILING_MODE} no_proxy: ${eis_no_proxy},${RTSP_CAMERA_IP},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # MessageBus Endpoint Configuration # Setting Visualizer as a subscriber here for FpsCalculator Clients: "VideoAnalytics,Visualizer,RestDataExport,WebVisualizer,TLS_RemoteAgent" CertType: "zmq" ZMQ_RECV_HWM: "1000" # Use IPC mode (zmq_ipc) when VideoIngestion and VideoAnalytics based # containers are running on the same host. If they are running on diff # host, please use TCP mode for communication. # Eg: Stream cfg for # IPC: zmq_ipc, # TPC: zmq_tcp, : PubTopics: "camera1_stream" camera1_stream_cfg: "zmq_ipc,${SOCKET_DIR}/" volumes: - "vol_eis_socket:${SOCKET_DIR}" - "/dev:/dev" - "/var/tmp:/var/tmp" - "/opt/Intel/OpenCL/Boards:/opt/Intel/OpenCL/Boards" - "/opt/altera:/opt/altera" - "/opt/intel/intelFPGA:/opt/intel/intelFPGA" privileged: true devices: - "/dev/dri" # We are volume mounting the entire /dev filesystem here for the usecase # of reading from multiple USB cameras - "/dev/:/dev/" - "/dev/acla10_1150_sg10:/dev/acla10_1150_sg10" # secrets: # - ca_etcd # - etcd_VideoIngestion_cert # - etcd_VideoIngestion_key ## Define VideoAnalytics service ia_video_analytics: depends_on: - ia_openvino_base build: context: $PWD/../VideoAnalytics dockerfile: $PWD/../VideoAnalytics/Dockerfile args: EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} EIS_USER_NAME: ${EIS_USER_NAME} # set CMAKE_BUILD_TYPE value to "Debug" to generate debug symbols CMAKE_BUILD_TYPE: "Release" DOCKER_REGISTRY: ${DOCKER_REGISTRY} image: ${DOCKER_REGISTRY}ia_video_analytics:${EIS_VERSION} container_name: ia_video_analytics hostname: ia_video_analytics network_mode: host restart: unless-stopped environment: AppName: "VideoAnalytics" DEV_MODE: ${DEV_MODE} PROFILING_MODE: ${PROFILING_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # MessageBus Endpoint Configuration Clients : "Visualizer,FactoryControlApp,OpcuaExport,ImageStore,InfluxDBConnector,RestDataExport,WebVisualizer,TLS_RemoteAgent" CertType: "zmq" ZMQ_RECV_HWM: "1000" # Use IPC mode (zmq_ipc) when VideoIngestion and VideoAnalytics based # containers are running on the same host. If they are running on diff # host, please use TCP mode for communication. # Eg: Stream cfg for # IPC: zmq_ipc, # TPC: zmq_tcp, : SubTopics: "VideoIngestion/camera1_stream" camera1_stream_cfg: "zmq_ipc,${SOCKET_DIR}/" PubTopics: "camera1_stream_results" camera1_stream_results_cfg: "zmq_tcp,127.0.0.1:65013" # camera1_stream_results_cfg: "zmq_ipc,${SOCKET_DIR}/" privileged: true volumes: - "/var/tmp:/var/tmp" - "/dev:/dev" - "vol_eis_socket:${SOCKET_DIR}" - "/opt/Intel/OpenCL/Boards:/opt/Intel/OpenCL/Boards" - "/opt/altera:/opt/altera" - "/opt/intel/intelFPGA:/opt/intel/intelFPGA" devices: - "/dev/dri" - "/dev/ion:/dev/ion" - "/dev/acla10_1150_sg10:/dev/acla10_1150_sg10" # secrets: # - ca_etcd # - etcd_VideoAnalytics_cert # - etcd_VideoAnalytics_key ## Define Visualizer service ia_visualizer: depends_on: - ia_common build: context: $PWD/../Visualizer dockerfile: $PWD/../Visualizer/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} EIS_USER_NAME: ${EIS_USER_NAME} #read_only: true image: ${DOCKER_REGISTRY}ia_visualizer:${EIS_VERSION} container_name: ia_visualizer hostname: ia_visualizer network_mode: host restart: unless-stopped environment: AppName: "Visualizer" DISPLAY: ${DISPLAY} HOSTXAUTH: "/tmp/host-xauth" XAUTHORITY: /tmp/.Xauthority IMAGE_DIR: ${EIS_INSTALL_PATH}/saved_images DEV_MODE: ${DEV_MODE} PROFILING_MODE: ${PROFILING_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # MessageBus Endpoint Configuration CertType: "zmq" ZMQ_RECV_HWM: "1000" # Use IPC mode (zmq_ipc) when VideoIngestion, VideoAnalytics and Visualizer # based containers are running on the same host. If they are running on diff # host, please use TCP mode for communication. # Eg: Stream cfg for # IPC: zmq_ipc, # TPC: zmq_tcp, : # For default video streaming usecase alone SubTopics: "VideoAnalytics/camera1_stream_results" camera1_stream_results_cfg : "zmq_tcp,127.0.0.1:65013" volumes: - "${EIS_INSTALL_PATH}/saved_images:${EIS_INSTALL_PATH}/saved_images" - "/tmp/.X11-unix:/tmp/.X11-unix" - "vol_eis_socket:${SOCKET_DIR}" - "${HOME}/.Xauthority:/tmp/host-xauth:ro" #user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_Visualizer_cert # - etcd_Visualizer_key ## Start Grafana service ia_grafana: depends_on: - ia_common build: context: $PWD/../Grafana dockerfile: $PWD/../Grafana/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} GRAFANA_VERSION: ${GRAFANA_VERSION} EIS_UID: ${EIS_UID} image: ${DOCKER_REGISTRY}ia_grafana:${EIS_VERSION} container_name: ia_grafana hostname: ia_grafana network_mode: host restart: unless-stopped environment: AppName: "Grafana" InfluxDbAppName: "InfluxDBConnector" CertType: "pem" DEV_MODE: ${DEV_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # secrets: # - ca_etcd # - etcd_Grafana_cert # - etcd_Grafana_key # - etcd_InfluxDBConnector_cert # - etcd_InfluxDBConnector_key ## Define telegraf service ia_telegraf: depends_on: - ia_common build: context: $PWD/../Telegraf dockerfile: $PWD/../Telegraf/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} container_name: ia_telegraf hostname: ia_telegraf network_mode: host image: ${DOCKER_REGISTRY}ia_telegraf:${EIS_VERSION} restart: unless-stopped environment: AppName: "Telegraf" InfluxDbAppName: "InfluxDBConnector" CertType: "" DEV_MODE: ${DEV_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_InfluxDBConnector_cert # - etcd_InfluxDBConnector_key ## Define influxdb connector service ia_influxdbconnector: depends_on: - ia_common build: context: $PWD/../InfluxDBConnector dockerfile: $PWD/../InfluxDBConnector/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} INFLUXDB_VERSION: ${INFLUXDB_VERSION} image: ${DOCKER_REGISTRY}ia_influxdbconnector:${EIS_VERSION} container_name: ia_influxdbconnector hostname: ia_influxdbconnector network_mode: host restart: unless-stopped environment: AppName: "InfluxDBConnector" CertType: "zmq,pem" DEV_MODE: ${DEV_MODE} PROFILING_MODE: ${PROFILING_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # MessageBus Endpoint Configuration Clients: "Visualizer,DiscoveryCreek" Server: "zmq_tcp,127.0.0.1:8675" # Server: "zmq_ipc,${SOCKET_DIR}/" INFLUXDB_TLS_CIPHERS: ${TLS_CIPHERS} # Use IPC mode (zmq_ipc) when VideoIngestion, VideoAnalytics and Visualizer # based containers are running on the same host. If they are running on diff # host, please use TCP mode for communication. # Eg: Stream cfg for # IPC: zmq_ipc, # TPC: zmq_tcp, : SubTopics: "VideoAnalytics/camera1_stream_results,DiscoveryCreek/dc_point_data_results" dc_point_data_results_cfg: "zmq_tcp,127.0.0.1:65014" camera1_stream_results_cfg: "zmq_tcp,127.0.0.1:65013" PubTopics: "point_data,point_classifier_results" point_data_cfg: "zmq_tcp,127.0.0.1:65015" # point_data_cfg: "zmq_ipc,${SOCKET_DIR}/" point_classifier_results_cfg: "zmq_tcp,127.0.0.1:65016" volumes: - "vol_influxdb_data:/influxdata" - "vol_eis_socket:${SOCKET_DIR}" user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_InfluxDBConnector_cert # - etcd_InfluxDBConnector_key ## Define Discovery Creek service ia_dc: depends_on: - ia_common build: context: $PWD/../DiscoveryCreek/ dockerfile: $PWD/../DiscoveryCreek/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} EIS_USER_NAME: ${EIS_USER_NAME} image: ${DOCKER_REGISTRY}ia_dc:${EIS_VERSION} container_name: ia_dc hostname: ia_dc network_mode: host restart: unless-stopped read_only: true tmpfs: /tmp environment: AppName: "DiscoveryCreek" DEV_MODE: ${DEV_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} # MessageBus Endpoint Configuration Clients : "InfluxDBConnector,Visualizer" CertType: "zmq" # Use IPC mode (zmq_ipc) when VideoIngestion, VideoAnalytics and Visualizer # based containers are running on the same host. If they are running on diff # host, please use TCP mode for communication. # Eg: Stream cfg for # IPC: zmq_ipc, # TPC: zmq_tcp, : SubTopics: "InfluxDBConnector/point_data" point_data_cfg: "zmq_tcp,127.0.0.1:65015" PubTopics: "dc_point_data_results" dc_point_data_results_cfg: "zmq_tcp,127.0.0.1:65014" volumes: - "vol_eis_socket:${SOCKET_DIR}" user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_DiscoveryCreek_cert # - etcd_DiscoveryCreek_key ## Define DataAnalytics service ia_data_analytics: depends_on: - ia_common build: context: $PWD/../TimeSeriesAnalytics/ dockerfile: $PWD/../TimeSeriesAnalytics/Dockerfile args: DOCKER_REGISTRY: ${DOCKER_REGISTRY} EIS_VERSION: ${EIS_VERSION} EIS_UID: ${EIS_UID} image: ${DOCKER_REGISTRY}ia_data_analytics:${EIS_VERSION} container_name: ia_data_analytics hostname: ia_data_analytics network_mode: host restart: unless-stopped environment: AppName: "Kapacitor" DEV_MODE: ${DEV_MODE} no_proxy: ${eis_no_proxy},${ETCD_HOST} ETCD_HOST: ${ETCD_HOST} CertType: "pem" user: ${EIS_UID} # secrets: # - ca_etcd # - etcd_Kapacitor_cert # - etcd_Kapacitor_key volumes: vol_influxdb_data: driver: local driver_opts: type: local o: bind device: ${EIS_INSTALL_PATH}/data/influxdata vol_imagestore_data: driver: local driver_opts: type: local o: bind device: ${EIS_INSTALL_PATH}/data vol_eis_socket: driver: local driver_opts: type: local o: bind device: ${EIS_INSTALL_PATH}/sockets vol_etcd_keeper: driver: local driver_opts: type: tmpfs device: tmpfs secrets: ca_etcd: file: provision/Certificates/ca/ca_certificate.pem etcd_Grafana_cert: file: provision/Certificates/Grafana/Grafana_client_certificate.pem etcd_Grafana_key: file: provision/Certificates/Grafana/Grafana_client_key.pem etcd_Kapacitor_cert: file: provision/Certificates/Kapacitor/Kapacitor_client_certificate.pem etcd_Kapacitor_key: file: provision/Certificates/Kapacitor/Kapacitor_client_key.pem etcd_DiscoveryCreek_cert: file: provision/Certificates/DiscoveryCreek/DiscoveryCreek_client_certificate.pem etcd_DiscoveryCreek_key: file: provision/Certificates/DiscoveryCreek/DiscoveryCreek_client_key.pem etcd_InfluxDBConnector_cert: file: provision/Certificates/InfluxDBConnector/InfluxDBConnector_client_certificate.pem etcd_InfluxDBConnector_key: file: provision/Certificates/InfluxDBConnector/InfluxDBConnector_client_key.pem etcd_VideoAnalytics_cert: file: provision/Certificates/VideoAnalytics/VideoAnalytics_client_certificate.pem etcd_VideoAnalytics_key: file: provision/Certificates/VideoAnalytics/VideoAnalytics_client_key.pem etcd_VideoIngestion_cert: file: provision/Certificates/VideoIngestion/VideoIngestion_client_certificate.pem etcd_VideoIngestion_key: file: provision/Certificates/VideoIngestion/VideoIngestion_client_key.pem etcd_Visualizer_cert: file: provision/Certificates/Visualizer/Visualizer_client_certificate.pem etcd_Visualizer_key: file: provision/Certificates/Visualizer/Visualizer_client_key.pem etcd_root_cert: file: provision/Certificates/root/root_client_certificate.pem etcd_root_key: file: provision/Certificates/root/root_client_key.pem