This article gives an example of how to deploy MQTT Client, Broker, Publisher and the correspoding database.

Basic

docker ps --filter "status=exited"
docker ps -a grep 
docker inspect  --format='{{.State.ExitCode}}'

Docker Compose Exit Code

  • Exit Code 0: Absence of an attached foreground process
  • Exit Code 1: Indicates failure due to application error
  • Exit Code 137: Indicates failure as container received SIGKILL (Manual intervention or ‘oom-killer’ [OUT-OF-MEMORY])
  • Exit Code 139: Indicates failure as container received SIGSEGV
  • Exit Code 143: Indicates failure as container received SIGTERM

Makefile

  1. sample example fromMakefile

Makefile

version.sh

# Example version script.
# Please choose one version or create your own

# Node.js: grep the version from a package.json file with jq
jq -rM '.version' package.json

# Elixir: grep the version from a mix file
cat mix.exs | grep version | grep '\([0-9]\+\.\?\)\{3\}' -o

Dockerfile and Docker-compose

docker-compose.yml

version: "3.9"

services:
  mqtt_client:
    build: 
      context: services/mqtt_client/.
    env_file:
      - ./env.dev
  broker:
    build: services/development_broker/.
    ports:
      - "1883:1883"
  db:
    image: postgres:12-alpine
    ports:
      - "5432:5432"
    volumes:
        - db-data:/var/lib/postgresql/data/
    environment:
        - POSTGRES_USER=test
        - POSTGRES_PASSWORD=test
        - POSTGRES_DB=test
  s3:
    image: minio/minio
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - s3-data:/data
    environment: 
      - MINIO_ROOT_USER=develop
      - MINIO_ROOT_PASSWORD=develop1
    entrypoint: minio server /data  --console-address ":9001"

volumes:
  s3-data:
  db-data:

env.dev

DATABASE_URL=postgresql://test:test@db:5432

MQTT_BROKER_URL=broker
MQTT_TOPIC=raw-frames

S3_URL=s3:9000
S3_ACCESS_KEY=develop
S3_SECRET_KEY=develop1
S3_BUCKET_NAME=raw-frames
S3_FORCE_SSL=False

Dockerfile-MQTT CLient

FROM python as intermediate
RUN git clone https://gitlab+deploy-token-819163:soMJjpdajTYA51PAThqG@gitlab.com/incoretex/libraries/pycoretex.git
RUN cd /pycoretex && git checkout 5-package

FROM python
COPY --from=intermediate /pycoretex /src/pycoretex
RUN (cd /src/pycoretex && pip3 install .)
COPY src/* /src/app/
WORKDIR /src/app/
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD python3 client.py

requirement.txt

boto3==1.21.0
botocore==1.24.0
certifi==2021.10.8
jmespath==0.10.0
minio==7.1.3
numpy==1.22.2
paho-mqtt==1.6.1
protobuf==3.19.4
psycopg2==2.9.3
python-dateutil==2.8.2
s3transfer==0.5.1
six==1.16.0
SQLAlchemy==1.4.31
urllib3==1.26.8

Dockerfile-MQTT Broker

FROM eclipse-mosquitto:2.0.14
COPY mosquitto.conf /mosquitto/config/mosquitto.conf

mosquitto.conf

allow_anonymous true
listener 1883
persistence true

to be continue ...