Alarmy Dockerization

Structure

of the system

of the client

Broker

Database

Logger

Controller

NodeJS

NodeJS

HiveMQ

MySql

infamous

GLOBAL PROXY

HTTP Server

Website

Golang

Nginx

React.js

Container structure

2 compose files

Client

Server

4 Container

2 Container

version: "3.1"

services:
  alarmy-broker:
    container_name: alarmy-broker
    image: alarmy-broker:latest
    build: ./broker
    expose:
      - 1883
      - 8000
      - 8080
    ports:
      - 1883:1883
      - 8000:8000
    networks:
      - docker-network

  alarmy-db:
    container_name: alarmy-db
    image: alarmy-db:latest
    build: ./db
    expose:
      - 3306
    ports:
      - 3306:3306
    networks:
      - docker-network

  alarmy-logger:
    container_name: alarmy-logger
    image: alarmy-logger:latest
    build: ./logger
    restart: always
    expose:
      - 1883
      - 3306
    networks:
      - docker-network

  alarmy-controller:
    container_name: alarmy-controller
    image: alarmy-controller:latest
    build: ./controller
    restart: always
    ports:
      - 3000:3000
      - 8082:8082
    expose:
      - 1883
    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge

Client

version: "3.1"

services:
  alarmy-globproxy:
    container_name: alarmy-globproxy
    image: alarmy-globproxy:latest
    build: ./globproxy
    ports:
      - 8082:8082
    networks:
      - docker-network

  alarmy-web:
    container_name: alarmy-web
    image: alarmy-web:latest
    build: ./web
    ports:
      - "80:80"
      - "443:443"
    # volumes:
    #   - ./production.conf:/etc/nginx/conf.d/default.conf
    #   - /docker-volumes/etc/letsencrypt/live/shorty.codes/fullchain.pem:/etc/letsencrypt/live/shorty.codes/fullchain.pem
    #   - /docker-volumes/etc/letsencrypt/live/shorty.codes/privkey.pem:/etc/letsencrypt/live/shorty.codes/privkey.pem
    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge

Server

Docker containers

FROM java:8-jdk

RUN apt-get install -y wget unzip &&\
    wget --content-disposition http://www.hivemq.com/download.php?token=9468da1a04b017984af053ffc166dbf5 &&\
    unzip hivemq-*.zip -d /opt/ &&\
    rm hivemq-*.zip &&\
    mv /opt/hivemq-* /opt/hivemq

WORKDIR /opt/hivemq
 
ENV HIVEMQ_HOME /opt/hivemq

COPY config.xml /opt/hivemq/conf/config.xml
 
# Expose MQTT port
EXPOSE 1883
# Expose MQTT over Websocket port
EXPOSE 8000
# Expose webinterface
EXPOSE 8080

CMD /opt/hivemq/bin/run.sh

Broker

FROM node:carbon

WORKDIR /opt/alarmy/controller

COPY . .

RUN npm install

# For mqtt
EXPOSE 1883
# For local secret swap
EXPOSE 3000
# For global proxy
EXPOSE 8082

CMD npm start

Controller

FROM mysql:5.5

ENV MYSQL_ROOT_PASSWORD=Rh1NMO8AfmWaDiM0QnS6dyKZClA5YxNp
ENV MYSQL_DATABASE=alarmy
ENV MYSQL_USER=nodelogger
ENV MYSQL_PASSWORD=nodelogger.password

EXPOSE 3306

Database

FROM node:carbon

WORKDIR /opt/alarmy/logger

COPY . .

RUN npm install &&\
    npm run-script build

# For database
EXPOSE 3306
# For mqtt
EXPOSE 1883

CMD npm start

Logger

FROM golang:latest as builder

WORKDIR /opt/alarmy/globproxy

COPY ./main.go ./main.go

RUN go get github.com/gorilla/websocket &&\
    GOOS=linux GOARCH=amd64 go build -a -o globproxy &&\
    chown 777 ./globproxy

EXPOSE 8082

CMD ./globproxy "0.0.0.0:8082"

Global Proxy

FROM node:carbon as build

WORKDIR /opt/alarmy/web

COPY . .

RUN npm install &&\
    npm run build

FROM nginx:latest

WORKDIR /opt/alarmy/web

COPY --from=build /opt/alarmy/web/build /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

# RUN apt-get update && apt-get install openssl &&\
#     mkdir dh-param &&\
#     openssl dhparam -out ./dh-param/dhparam-4096.pem 4096

EXPOSE 80
EXPOSE 443

Website

Made with Slides.com