services:
 zabbix-build-base:
  build:
   context: ./Dockerfiles/build-base/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
  image: ${BUILD_BASE_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  attach: false

 zabbix-build-pgsql:
  build:
   context: ./Dockerfiles/build-pgsql/${ALPINE_OS_TAG_SHORT}
   additional_contexts:
    - sources=./sources/
    - config_templates=./config_templates/
   args:
    BUILD_BASE_IMAGE: ${BUILD_BASE_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  attach: false
  depends_on:
   - zabbix-build-base

 zabbix-build-mysql:
  build:
   context: ./Dockerfiles/build-mysql/${ALPINE_OS_TAG_SHORT}
   additional_contexts:
    - sources=./sources/
    - config_templates=./config_templates/
   args:
    BUILD_BASE_IMAGE: ${BUILD_BASE_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: ${BUILD_BASE_MYSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  attach: false
  profiles:
   - all
  depends_on:
   - zabbix-build-base

 zabbix-build-sqlite3:
  build:
   context: ./Dockerfiles/build-sqlite3/${ALPINE_OS_TAG_SHORT}
   additional_contexts:
    - sources=./sources/
    - config_templates=./config_templates/
   args:
    BUILD_BASE_IMAGE: ${BUILD_BASE_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: ${BUILD_BASE_SQLITE3_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  attach: false
  profiles:
   - all
  depends_on:
   - zabbix-build-base

 zabbix-server:
  extends:
   file: compose_zabbix_components.yaml
   service: server-pgsql
  build:
   context: ./Dockerfiles/server-pgsql/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-server-pgsql:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - postgres-server
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-proxy-sqlite3:
  extends:
   file: compose_zabbix_components.yaml
   service: proxy-sqlite3
  build:
   context: ./Dockerfiles/proxy-sqlite3/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_SQLITE3_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-proxy-sqlite3:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - zabbix-build-sqlite3
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-proxy-mysql:
  extends:
   file: compose_zabbix_components.yaml
   service: proxy-mysql
  build:
   context: ./Dockerfiles/proxy-mysql/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_MYSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-proxy-mysql:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - mysql-server
   - zabbix-build-mysql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-web-apache-pgsql:
  extends:
   file: compose_zabbix_components.yaml
   service: web-apache-pgsql
  build:
   context: ./Dockerfiles/web-apache-pgsql/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-web-apache-pgsql:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - postgres-server
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-web-nginx-pgsql:
  extends:
   file: compose_zabbix_components.yaml
   service: web-nginx-pgsql
  build:
   context: ./Dockerfiles/web-nginx-pgsql/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-web-nginx-pgsql:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - postgres-server
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-agent:
  extends:
   file: compose_zabbix_components.yaml
   service: agent
  build:
   context: ./Dockerfiles/agent/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-agent:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  volumes:
   - /etc/timezone:/etc/timezone:ro
  depends_on:
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-java-gateway:
  extends:
   file: compose_zabbix_components.yaml
   service: java-gateway
  build:
   context: ./Dockerfiles/java-gateway/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-java-gateway:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  depends_on:
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-snmptraps:
  extends:
   file: compose_zabbix_components.yaml
   service: snmptraps
  build:
   context: ./Dockerfiles/snmptraps/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
  image: zabbix-snmptraps:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 zabbix-web-service:
  extends:
   file: compose_zabbix_components.yaml
   service: web-service
  build:
   context: ./Dockerfiles/web-service/${ALPINE_OS_TAG_SHORT}
   cache_from:
    - "${ALPINE_BASE_IMAGE}"
   args:
    OS_BASE_IMAGE: ${ALPINE_BASE_IMAGE}
    BUILD_BASE_IMAGE: ${BUILD_BASE_PGSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  image: zabbix-web-service:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_LOCAL_IMAGE_TAG_POSTFIX}
  depends_on:
   - zabbix-build-pgsql
  labels:
   com.zabbix.os: "${ALPINE_OS_TAG}"

 mysql-server:
  profiles:
   - all
  extends:
   file: compose_databases.yaml
   service: mysql-server

 postgres-server:
  extends:
   file: compose_databases.yaml
   service: postgres-server

 db-data-mysql:
  profiles:
   - all
  extends:
   file: compose_databases.yaml
   service: db-data-mysql

 db-data-pgsql:
  extends:
   file: compose_databases.yaml
   service: db-data-pgsql

 elasticsearch:
  extends:
   file: compose_databases.yaml
   service: elasticsearch

 selenium:
  extends:
   file: compose_additional_components.yaml
   service: selenium

 selenium-chrome:
  platform: linux/amd64
  extends:
   file: compose_additional_components.yaml
   service: selenium-chrome

 selenium-firefox:
  extends:
   file: compose_additional_components.yaml
   service: selenium-firefox

networks:
  frontend:
    driver: bridge
    enable_ipv6: "${FRONTEND_ENABLE_IPV6}"
    ipam:
      driver: "${FRONTEND_NETWORK_DRIVER}"
      config:
      - subnet: "${FRONTEND_SUBNET}"
  backend:
    driver: bridge
    enable_ipv6: "${BACKEND_ENABLE_IPV6}"
    internal: true
    ipam:
      driver: "${BACKEND_NETWORK_DRIVER}"
      config:
      - subnet: "${BACKEND_SUBNET}"
  database:
    driver: bridge
    enable_ipv6: "${DATABASE_NETWORK_ENABLE_IPV6}"
    internal: true
    ipam:
      driver: "${DATABASE_NETWORK_DRIVER}"
  tools_frontend:
    driver: bridge
    enable_ipv6: "${ADD_TOOLS_ENABLE_IPV6}"
    ipam:
      driver: "${ADD_TOOLS_NETWORK_DRIVER}"
      config:
      - subnet: "${ADD_TOOLS_SUBNET}"

volumes:
  snmptraps:
#  mysql_socket:
#  pgsql_socket:

secrets:
  MYSQL_USER:
    file: ${ENV_VARS_DIRECTORY}/.MYSQL_USER
  MYSQL_PASSWORD:
    file: ${ENV_VARS_DIRECTORY}/.MYSQL_PASSWORD
  MYSQL_ROOT_USER:
    file: ${ENV_VARS_DIRECTORY}/.MYSQL_ROOT_USER
  MYSQL_ROOT_PASSWORD:
    file: ${ENV_VARS_DIRECTORY}/.MYSQL_ROOT_PASSWORD
  POSTGRES_USER:
    file: ${ENV_VARS_DIRECTORY}/.POSTGRES_USER
  POSTGRES_PASSWORD:
    file: ${ENV_VARS_DIRECTORY}/.POSTGRES_PASSWORD
