123 lines
3.5 KiB
YAML
123 lines
3.5 KiB
YAML
services:
|
|
timescaledb:
|
|
image: timescale/timescaledb:2.17.2-pg16
|
|
container_name: mqtt-timescaledb
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:-ingester}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
|
POSTGRES_DB: ${POSTGRES_DB:-telemetry}
|
|
ports:
|
|
- "127.0.0.1:${POSTGRES_PORT:-5432}:5432"
|
|
volumes:
|
|
- timescale-data:/var/lib/postgresql/data
|
|
- ./db/init:/docker-entrypoint-initdb.d:ro
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-ingester} -d ${POSTGRES_DB:-telemetry}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
mqtt-client:
|
|
build:
|
|
context: .
|
|
dockerfile: mqtt-client/Dockerfile
|
|
container_name: mqtt-client
|
|
restart: unless-stopped
|
|
depends_on:
|
|
timescaledb:
|
|
condition: service_healthy
|
|
environment:
|
|
MQTT_BROKER_HOST: ${MQTT_BROKER_HOST}
|
|
MQTT_BROKER_PORT: ${MQTT_BROKER_PORT:-8883}
|
|
MQTT_TOPIC: ${MQTT_TOPIC:-sensors/#}
|
|
MQTT_CLIENT_ID: ${MQTT_CLIENT_ID:-mqtt-ingester}
|
|
MQTT_CA_CERT: /certs/ca.crt
|
|
MQTT_CLIENT_CERT: /certs/client.crt
|
|
MQTT_CLIENT_KEY: /certs/client.key
|
|
MQTT_USERNAME: ${MQTT_USERNAME:-}
|
|
MQTT_PASSWORD: ${MQTT_PASSWORD:-}
|
|
MQTT_PSK_IDENTITY: ${MQTT_PSK_IDENTITY:-}
|
|
MQTT_PSK_HEX: ${MQTT_PSK_HEX:-}
|
|
DB_HOST: timescaledb
|
|
DB_PORT: 5432
|
|
DB_NAME: ${POSTGRES_DB:-telemetry}
|
|
DB_USER: ${POSTGRES_USER:-ingester}
|
|
DB_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
|
DB_BATCH_SIZE: ${DB_BATCH_SIZE:-500}
|
|
DB_FLUSH_SECONDS: ${DB_FLUSH_SECONDS:-1.0}
|
|
LOG_LEVEL: ${LOG_LEVEL:-INFO}
|
|
LOG_TO_FILE: ${LOG_TO_FILE:-true}
|
|
LOG_FILE_PATH: /var/log/mqtt-client/mqtt-client.log
|
|
LOKI_URL: ${LOKI_URL:-}
|
|
LOKI_USER: ${LOKI_USER:-}
|
|
LOKI_PASSWORD: ${LOKI_PASSWORD:-}
|
|
LOKI_FLUSH_SECONDS: ${LOKI_FLUSH_SECONDS:-5}
|
|
LOKI_TIMEOUT_SECONDS: ${LOKI_TIMEOUT_SECONDS:-5}
|
|
volumes:
|
|
- ./certs:/certs:ro
|
|
- mqtt-logs:/var/log/mqtt-client
|
|
|
|
api:
|
|
build:
|
|
context: .
|
|
dockerfile: api/Dockerfile
|
|
container_name: mqtt-api
|
|
restart: unless-stopped
|
|
depends_on:
|
|
timescaledb:
|
|
condition: service_healthy
|
|
environment:
|
|
DB_HOST: timescaledb
|
|
DB_PORT: 5432
|
|
DB_NAME: ${POSTGRES_DB:-telemetry}
|
|
DB_USER: ${POSTGRES_USER:-ingester}
|
|
DB_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
|
DB_POOL_MIN_SIZE: ${DB_POOL_MIN_SIZE:-2}
|
|
DB_POOL_MAX_SIZE: ${DB_POOL_MAX_SIZE:-10}
|
|
API_HOST: 0.0.0.0
|
|
API_PORT: 8443
|
|
API_CA_CERT: /certs/ca.crt
|
|
API_SERVER_CERT: /certs/server.crt
|
|
API_SERVER_KEY: /certs/server.key
|
|
ports:
|
|
- "${API_PORT:-8443}:8443"
|
|
volumes:
|
|
- ./certs:/certs:ro
|
|
|
|
webui:
|
|
build:
|
|
context: .
|
|
dockerfile: webui/Dockerfile
|
|
container_name: mqtt-webui
|
|
restart: unless-stopped
|
|
depends_on:
|
|
timescaledb:
|
|
condition: service_healthy
|
|
environment:
|
|
DB_HOST: timescaledb
|
|
DB_PORT: 5432
|
|
DB_NAME: ${POSTGRES_DB:-telemetry}
|
|
DB_USER: ${POSTGRES_USER:-ingester}
|
|
DB_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-}
|
|
ports:
|
|
- "127.0.0.1:${WEBUI_PORT:-8080}:8080"
|
|
|
|
loki:
|
|
image: grafana/loki:3.4.2
|
|
container_name: mqtt-loki
|
|
restart: unless-stopped
|
|
profiles: ["telemetry"]
|
|
command: -config.file=/etc/loki/local-config.yaml
|
|
ports:
|
|
- "127.0.0.1:3100:3100"
|
|
volumes:
|
|
- loki-data:/loki
|
|
|
|
volumes:
|
|
timescale-data:
|
|
mqtt-logs:
|
|
loki-data:
|