Devicehive
Open Source IoT Platform with a wide range of integration options.
Directory Structure
- .env
- docker-compose.yml
docker-compose.yml
version: "3.9"
services:
zookeeper:
image: docker.io/bitnami/zookeeper:3.8
ports:
- "2181:2181"
restart: unless-stopped
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
profiles:
- infra
- all
kafka:
image: devicehive/devicehive-kafka:${DH_TAG:-3.5.0}
ports:
- "9092:9092"
links:
- "zookeeper"
restart: unless-stopped
environment:
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_LISTENERS=CLIENT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
healthcheck:
test: /bin/nc -z localhost 9092
interval: 2s
timeout: 2s
retries: 15
profiles:
- infra
- all
postgres:
image: postgres:14.4
ports:
- "5432:5432"
restart: unless-stopped
environment:
POSTGRES_USER: ${DH_POSTGRES_USERNAME:-postgres}
POSTGRES_PASSWORD: ${DH_POSTGRES_PASSWORD:-mysecretpassword}
POSTGRES_DB: ${DH_POSTGRES_DB:-postgres}
volumes:
- devicehive-db:/var/lib/postgresql/data
profiles:
- infra
- all
wsproxy:
image: devicehive/devicehive-ws-proxy:${DH_WS_PROXY_TAG:-1.1.0}
ports:
- "3000:3000"
links:
- "kafka"
depends_on:
kafka:
condition: service_healthy
restart: unless-stopped
environment:
FRANZ.KAFKA_HOSTS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
PROXY.WEB_SOCKET_SERVER_HOST: 'wsproxy'
PROXY.ENABLE_PLUGIN_MANAGER: 'false'
PROXY.APP_LOG_LEVEL: 'debug'
profiles:
- infra
- all
wsproxy_external:
image: devicehive/devicehive-ws-proxy:${DH_WS_PROXY_TAG:-1.1.0}
ports:
- "3001:3000"
links:
- "kafka"
- "dh_auth"
- "dh_plugin"
restart: unless-stopped
environment:
FRANZ.KAFKA_HOSTS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
PLUGIN_MANAGER.AUTH_SERVICE_ENDPOINT: http://dh_auth:8090/auth/rest
PLUGIN_MANAGER.PLUGIN_MANAGEMENT_SERVICE_ENDPOINT: http://dh_plugin:8110/plugin/rest
PROXY.WEB_SOCKET_SERVER_HOST: 'wsproxy_external'
PROXY.ENABLE_PLUGIN_MANAGER: 'true'
profiles:
- dev
- all
dh_plugin:
image: devicehive/devicehive-plugin:${DH_TAG:-3.5.0}
ports:
- "8110:8110"
links:
- "postgres"
- "kafka"
- "zookeeper"
- "dh_frontend"
- "dh_auth"
- "wsproxy"
restart: unless-stopped
environment:
DH_ZK_ADDRESS: ${DH_ZK_ADDRESS:-zookeeper}
DH_ZK_PORT: ${DH_ZK_PORT:-2181}
DH_KAFKA_BOOTSTRAP_SERVERS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
DH_POSTGRES_ADDRESS: ${DH_POSTGRES_ADDRESS:-postgres}
DH_POSTGRES_PORT: ${DH_POSTGRES_PORT:-5432}
DH_POSTGRES_USERNAME: ${DH_POSTGRES_USERNAME:-postgres}
DH_POSTGRES_PASSWORD: ${DH_POSTGRES_PASSWORD:-mysecretpassword}
DH_POSTGRES_DB: ${DH_POSTGRES_DB:-postgres}
DH_RPC_CLIENT_RES_CONS_THREADS: ${DH_RPC_CLIENT_RES_CONS_THREADS:-3}
DH_LOG_LEVEL: ${DH_LOG_LEVEL:-INFO}
ROOT_LOG_LEVEL: ${ROOT_LOG_LEVEL:-WARN}
DH_WS_PROXY: wsproxy:3000
DH_PROXY_PLUGIN_CONNECT: ${DH_PROXY_PLUGIN_CONNECT:-ws://localhost/plugin/proxy}
DH_AUTH_URL: http://dh_auth:8090/auth/rest
REDIS_MASTER_HOST: ${REDIS_MASTER_HOST:-redis_master}
REDIS_MASTER_PORT: ${REDIS_MASTER_PORT:-6379}
JWT_SECRET: ${JWT_SECRET}
SPRING_PROFILES_ACTIVE: ${DH_PLUGIN_SPRING_PROFILES_ACTIVE:-ws-kafka-proxy}
profiles:
- front
- all
dh_frontend:
image: devicehive/devicehive-frontend:${DH_TAG:-3.5.0}
ports:
- "8080:8080"
links:
- "postgres"
- "kafka"
- "zookeeper"
- "dh_backend"
- "dh_auth"
- "wsproxy"
restart: unless-stopped
environment:
DH_ZK_ADDRESS: ${DH_ZK_ADDRESS:-zookeeper}
DH_ZK_PORT: ${DH_ZK_PORT:-2181}
DH_KAFKA_BOOTSTRAP_SERVERS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
DH_POSTGRES_ADDRESS: ${DH_POSTGRES_ADDRESS:-postgres}
DH_POSTGRES_PORT: ${DH_POSTGRES_PORT:-5432}
DH_POSTGRES_USERNAME: ${DH_POSTGRES_USERNAME:-postgres}
DH_POSTGRES_PASSWORD: ${DH_POSTGRES_PASSWORD:-mysecretpassword}
DH_POSTGRES_DB: ${DH_POSTGRES_DB:-postgres}
DH_RPC_CLIENT_RES_CONS_THREADS: ${DH_RPC_CLIENT_RES_CONS_THREADS:-3}
DH_LOG_LEVEL: ${DH_LOG_LEVEL:-INFO}
DH_WS_PROXY: wsproxy:3000
ROOT_LOG_LEVEL: ${ROOT_LOG_LEVEL:-WARN}
DH_AUTH_URL: ${DH_AUTH_URL:-http://dh_auth:8090/auth/rest}
REDIS_MASTER_HOST: ${REDIS_MASTER_HOST:-redis_master}
REDIS_MASTER_PORT: ${REDIS_MASTER_PORT:-6379}
JWT_SECRET: ${JWT_SECRET}
SPRING_PROFILES_ACTIVE: ${DH_FE_SPRING_PROFILES_ACTIVE:-ws-kafka-proxy-frontend}
profiles:
- front
- all
dh_auth:
image: devicehive/devicehive-auth:${DH_TAG:-3.5.0}
ports:
- "8090:8090"
links:
- "kafka"
- "postgres"
- "wsproxy"
- "zookeeper"
- "dh_backend"
restart: unless-stopped
environment:
DH_ZK_ADDRESS: ${DH_ZK_ADDRESS:-zookeeper}
DH_ZK_PORT: ${DH_ZK_PORT:-2181}
DH_KAFKA_BOOTSTRAP_SERVERS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
DH_POSTGRES_ADDRESS: ${DH_POSTGRES_ADDRESS:-postgres}
DH_POSTGRES_PORT: ${DH_POSTGRES_PORT:-5432}
DH_POSTGRES_USERNAME: ${DH_POSTGRES_USERNAME:-postgres}
DH_POSTGRES_PASSWORD: ${DH_POSTGRES_PASSWORD:-mysecretpassword}
DH_POSTGRES_DB: ${DH_POSTGRES_DB:-postgres}
DH_LOG_LEVEL: ${DH_LOG_LEVEL:-INFO}
ROOT_LOG_LEVEL: ${ROOT_LOG_LEVEL:-WARN}
REDIS_MASTER_HOST: ${REDIS_MASTER_HOST:-redis_master}
REDIS_MASTER_PORT: ${REDIS_MASTER_PORT:-6379}
JWT_SECRET: ${JWT_SECRET}
DH_WS_PROXY: wsproxy:3000
SPRING_PROFILES_ACTIVE: ${DH_AUTH_SPRING_PROFILES_ACTIVE:-ws-kafka-proxy}
profiles:
- front
- all
redis_master:
image: bitnami/redis:7.0
ports:
- "6379:6379"
volumes:
- devicehive-redis:/bitnami
environment:
- REDIS_REPLICATION_MODE=master
- ALLOW_EMPTY_PASSWORD=yes
profiles:
- infra
- all
redis_replica:
image: bitnami/redis:7.0
ports:
- "7001:6379"
depends_on:
- redis_master
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis_master
- REDIS_MASTER_PORT_NUMBER=6379
- ALLOW_EMPTY_PASSWORD=yes
profiles:
- infra
- all
dh_backend:
image: devicehive/devicehive-backend:${DH_TAG:-3.5.0}
links:
- "kafka"
- "postgres"
- "zookeeper"
- "wsproxy"
- "redis_master"
restart: unless-stopped
environment:
DH_ZK_ADDRESS: ${DH_ZK_ADDRESS:-zookeeper}
DH_ZK_PORT: ${DH_ZK_PORT:-2181}
DH_KAFKA_BOOTSTRAP_SERVERS: ${DH_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
DH_POSTGRES_ADDRESS: ${DH_POSTGRES_ADDRESS:-postgres}
DH_POSTGRES_PORT: ${DH_POSTGRES_PORT:-5432}
DH_POSTGRES_USERNAME: ${DH_POSTGRES_USERNAME:-postgres}
DH_POSTGRES_PASSWORD: ${DH_POSTGRES_PASSWORD:-mysecretpassword}
DH_POSTGRES_DB: ${DH_POSTGRES_DB:-postgres}
DH_RPC_SERVER_REQ_CONS_THREADS: ${DH_RPC_SERVER_REQ_CONS_THREADS:-3}
DH_RPC_SERVER_WORKER_THREADS: ${DH_RPC_SERVER_WORKER_THREADS:-3}
DH_LOG_LEVEL: ${DH_LOG_LEVEL:-INFO}
DH_WS_PROXY: wsproxy:3000
REDIS_MASTER_HOST: ${REDIS_MASTER_HOST:-redis_master}
REDIS_MASTER_PORT: ${REDIS_MASTER_PORT:-6379}
ROOT_LOG_LEVEL: ${ROOT_LOG_LEVEL:-INFO}
SPRING_PROFILES_ACTIVE: ${DH_BE_SPRING_PROFILES_ACTIVE:-ws-kafka-proxy-backend}
profiles:
- backend
- all
dh_proxy:
image: devicehive/devicehive-proxy:${DH_PROXY_TAG:-3.5.0}
links:
- "dh_auth"
- "dh_frontend"
- "dh_plugin"
ports:
- "80:8080"
restart: unless-stopped
profiles:
- dev
- all
volumes:
devicehive-db:
devicehive-redis:Resources
Website: https://www.devicehive.com/
GitHub: https://github.com/devicehive/devicehive-java-server
Docker Hub: https://hub.docker.com/u/devicehive
Configuration: https://github.com/devicehive/devicehive-docker/tree/master/rdbms-image