🎉 Initial commit

This commit is contained in:
Jonas Bengtsson
2026-08-30 09:56:33 +02:00
commit c2ae24818e
14 changed files with 1058 additions and 0 deletions
+98
View File
@@ -0,0 +1,98 @@
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: ./mqtt-client
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: ./api
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
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: