diff --git a/README.md b/README.md index aa9dbe7..6d72927 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ This repository aims to promote the development of a multi-vendor management pla Run app using Docker:
 user@user-laptop:~$ cd oktopus/deploy/compose
-user@user-laptop:~/oktopus/deploy/compose$ docker compose up
+user@user-laptop:~/oktopus/deploy/compose$ COMPOSE_PROFILES=nats,controller,mqtt,stomp,ws,adapter,frontend,portainer docker compose up -d
 
  • diff --git a/backend/services/controller/build/Dockerfile b/backend/services/controller/build/Dockerfile new file mode 100644 index 0000000..e15053a --- /dev/null +++ b/backend/services/controller/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o controller cmd/controller/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/controller / +ENTRYPOINT ["/controller"] \ No newline at end of file diff --git a/backend/services/controller/build/Makefile b/backend/services/controller/build/Makefile new file mode 100644 index 0000000..80cdc95 --- /dev/null +++ b/backend/services/controller/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= controller +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest \ No newline at end of file diff --git a/backend/services/mtp/adapter/build/Dockerfile b/backend/services/mtp/adapter/build/Dockerfile new file mode 100644 index 0000000..8c8be7d --- /dev/null +++ b/backend/services/mtp/adapter/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o adapter cmd/adapter/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/adapter / +ENTRYPOINT ["/adapter"] \ No newline at end of file diff --git a/backend/services/mtp/adapter/build/Makefile b/backend/services/mtp/adapter/build/Makefile new file mode 100644 index 0000000..7f8855d --- /dev/null +++ b/backend/services/mtp/adapter/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= adapter +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/mtp/mqtt-adapter/build/Dockerfile b/backend/services/mtp/mqtt-adapter/build/Dockerfile new file mode 100644 index 0000000..f2a2c02 --- /dev/null +++ b/backend/services/mtp/mqtt-adapter/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o mqtt-adapter cmd/mqtt-adapter/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/mqtt-adapter / +ENTRYPOINT ["/mqtt-adapter"] \ No newline at end of file diff --git a/backend/services/mtp/mqtt-adapter/build/Makefile b/backend/services/mtp/mqtt-adapter/build/Makefile new file mode 100644 index 0000000..f7cd384 --- /dev/null +++ b/backend/services/mtp/mqtt-adapter/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= mqtt-adapter +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/mtp/mqtt/build/Dockerfile b/backend/services/mtp/mqtt/build/Dockerfile index 187e660..2d59c5e 100644 --- a/backend/services/mtp/mqtt/build/Dockerfile +++ b/backend/services/mtp/mqtt/build/Dockerfile @@ -5,5 +5,4 @@ RUN CGO_ENABLED=0 GOOS=linux go build -o mqtt cmd/mqtt/main.go FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed COPY --from=builder /app/mqtt / -EXPOSE 1883 8883 ENTRYPOINT ["/mqtt"] \ No newline at end of file diff --git a/backend/services/mtp/mqtt/build/Makefile b/backend/services/mtp/mqtt/build/Makefile index d83ef70..b1dc36d 100644 --- a/backend/services/mtp/mqtt/build/Makefile +++ b/backend/services/mtp/mqtt/build/Makefile @@ -1,6 +1,6 @@ .PHONY: help build push start stop release remove delete run logs bash -DOCKER_USER ?= oktopus +DOCKER_USER ?= oktopusp DOCKER_APP ?= mqtt DOCKER_TAG ?= $(shell git log --format="%h" -n 1) CONTAINER_SHELL ?= /bin/sh diff --git a/backend/services/mtp/mqtt/internal/config/config.go b/backend/services/mtp/mqtt/internal/config/config.go index 7c79b22..157b93b 100644 --- a/backend/services/mtp/mqtt/internal/config/config.go +++ b/backend/services/mtp/mqtt/internal/config/config.go @@ -45,8 +45,8 @@ func NewConfig() Config { fullchain := flag.String("full_chain_path", lookupEnvOrString("FULL_CHAIN_PATH", ""), "path to fullchain.pem certificate") privkey := flag.String("private_key_path", lookupEnvOrString("PRIVATE_KEY_PATH", ""), "path to privkey.pem certificate") authFile := flag.String("auth_file_path", lookupEnvOrString("AUTH_FILE_PATH", ""), "path to MQTT RBAC auth file") - redisEnable := flag.Bool("redis_enable", lookupEnvOrBool("REDIS_ENABLE", false), "enable/disable Redis db") - redisAddr := flag.String("redis_addr", lookupEnvOrString("REDIS_ADDR", "172.17.0.2:6379"), "address of redis db") + redisEnable := flag.Bool("redis_enable", lookupEnvOrBool("REDIS_ENABLE", true), "enable/disable Redis db") + redisAddr := flag.String("redis_addr", lookupEnvOrString("REDIS_ADDR", "localhost:6379"), "address of redis db") redisPassword := flag.String("redis_passwd", lookupEnvOrString("REDIS_PASSWD", ""), "redis db password") wsEnable := flag.Bool("ws_enable", lookupEnvOrBool("WS_ENABLE", false), "enable/disable Websocket listener") wsPort := flag.String("ws_port", lookupEnvOrString("WS_PORT", ":80"), "port for Websocket listener") diff --git a/backend/services/mtp/stomp-adapter/build/Dockerfile b/backend/services/mtp/stomp-adapter/build/Dockerfile new file mode 100644 index 0000000..883470a --- /dev/null +++ b/backend/services/mtp/stomp-adapter/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o stomp-adapter cmd/stomp-adapter/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/stomp-adapter / +ENTRYPOINT ["/stomp-adapter"] \ No newline at end of file diff --git a/backend/services/mtp/stomp-adapter/build/Makefile b/backend/services/mtp/stomp-adapter/build/Makefile new file mode 100644 index 0000000..d9bbcd2 --- /dev/null +++ b/backend/services/mtp/stomp-adapter/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= stomp-adapter +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/mtp/stomp/build/Dockerfile b/backend/services/mtp/stomp/build/Dockerfile new file mode 100644 index 0000000..9ba08f0 --- /dev/null +++ b/backend/services/mtp/stomp/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o stomp cmd/stomp/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/stomp / +ENTRYPOINT ["/stomp"] \ No newline at end of file diff --git a/backend/services/mtp/stomp/build/Makefile b/backend/services/mtp/stomp/build/Makefile new file mode 100644 index 0000000..6fc2066 --- /dev/null +++ b/backend/services/mtp/stomp/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= stomp +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} -p 61613:61613 ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/mtp/ws-adapter/build/Dockerfile b/backend/services/mtp/ws-adapter/build/Dockerfile new file mode 100644 index 0000000..f467047 --- /dev/null +++ b/backend/services/mtp/ws-adapter/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o ws-adapter cmd/ws-adapter/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/ws-adapter / +ENTRYPOINT ["/ws-adapter"] \ No newline at end of file diff --git a/backend/services/mtp/ws-adapter/build/Makefile b/backend/services/mtp/ws-adapter/build/Makefile new file mode 100644 index 0000000..79d6c96 --- /dev/null +++ b/backend/services/mtp/ws-adapter/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= ws-adapter +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/mtp/ws/build/Dockerfile b/backend/services/mtp/ws/build/Dockerfile new file mode 100644 index 0000000..64c7d44 --- /dev/null +++ b/backend/services/mtp/ws/build/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22@sha256:82e07063a1ac3ee59e6f38b1222e32ce88469e4431ff6496cc40fb9a0fc18229 as builder +WORKDIR /app +COPY ../ . +RUN CGO_ENABLED=0 GOOS=linux go build -o ws cmd/ws/main.go + +FROM alpine:3.14@sha256:0f2d5c38dd7a4f4f733e688e3a6733cb5ab1ac6e3cb4603a5dd564e5bfb80eed +COPY --from=builder /app/ws / +ENTRYPOINT ["/ws"] \ No newline at end of file diff --git a/backend/services/mtp/ws/build/Makefile b/backend/services/mtp/ws/build/Makefile new file mode 100644 index 0000000..f78b9b0 --- /dev/null +++ b/backend/services/mtp/ws/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= ws +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} -p 8080:8080 ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/backend/services/utils/socketio/build/Dockerfile b/backend/services/utils/socketio/build/Dockerfile new file mode 100644 index 0000000..e89cae8 --- /dev/null +++ b/backend/services/utils/socketio/build/Dockerfile @@ -0,0 +1,11 @@ +FROM node:16.20.2-alpine + +WORKDIR /app + +COPY ../package*.json ./ + +RUN npm install + +COPY ../ . + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/backend/services/utils/socketio/build/Makefile b/backend/services/utils/socketio/build/Makefile new file mode 100644 index 0000000..657f527 --- /dev/null +++ b/backend/services/utils/socketio/build/Makefile @@ -0,0 +1,61 @@ +.PHONY: help build push start stop release remove delete run logs bash + +DOCKER_USER ?= oktopusp +DOCKER_APP ?= socketio +DOCKER_TAG ?= $(shell git log --format="%h" -n 1) +CONTAINER_SHELL ?= /bin/sh + +.DEFAULT_GOAL := help + +help: + @echo "Makefile arguments:" + @echo "" + @echo "DOCKER_USER - docker user to build image" + @echo "DOCKER_APP - docker image name" + @echo "DOCKER_TAG - docker image tag" + @echo "CONTAINER_SHELL - container shell e.g:'/bin/bash'" + @echo "" + @echo "Makefile commands:" + @echo "" + @echo "build - docker image build" + @echo "push - push docker iamge to registry" + @echo "run - create and start docker container with the image" + @echo "start - start existent docker container with the image" + @echo "stop - stop docker container running the image" + @echo "remove - remove docker container running the image" + @echo "delete - delete docker image" + @echo "logs - show logs of docker container" + @echo "bash - access container shell" + @echo "release - tag image as latest and push to registry" + +build: + @docker build -t ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} -f Dockerfile ../ + +run: + @docker run -d --name ${DOCKER_USER}-${DOCKER_APP} -p 5000:5000${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +stop: + @docker stop ${DOCKER_USER}-${DOCKER_APP} + +remove: stop + @docker rm ${DOCKER_USER}-${DOCKER_APP} + +delete: + @docker rmi ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +start: + @docker start ${DOCKER_USER}-${DOCKER_APP} + +push: + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + +logs: + @docker logs -f ${DOCKER_USER}-${DOCKER_APP} + +bash: + @docker exec -it ${DOCKER_USER}-${DOCKER_APP} ${CONTAINER_SHELL} + +release: build + @docker push ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} + @docker tag ${DOCKER_USER}/${DOCKER_APP}:${DOCKER_TAG} ${DOCKER_USER}/${DOCKER_APP}:latest + @docker push ${DOCKER_USER}/${DOCKER_APP}:latest diff --git a/deploy/compose/.env b/deploy/compose/.env new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/deploy/compose/.env @@ -0,0 +1 @@ + diff --git a/deploy/compose/docker-compose.yaml b/deploy/compose/docker-compose.yaml index 8ef0e27..0b18b76 100644 --- a/deploy/compose/docker-compose.yaml +++ b/deploy/compose/docker-compose.yaml @@ -1,23 +1,6 @@ services: - controller: - image: 'golang:1.21.4' - container_name: controlller - tty: true - stdin_open: true - volumes: - - ../:/app/oktopus - command: bash -c "cd /app/oktopus/backend/services/controller && go run cmd/oktopus/main.go -mongo mongodb://172.16.235.2:27017 -a 172.16.235.4 -p 1883 -ws_addr 172.16.235.8" - ports: - - 8000:8000 - depends_on: - - mongodb - - mqtt - - websockets - networks: - usp_network: - ipv4_address: 172.16.235.7 - +#/* ----------------------------- Message Broker ----------------------------- */ nats: image: 'nats:latest' container_name: nats @@ -25,68 +8,138 @@ services: - 4222:4222 - 8222:8222 command: -n oktopus -m 8222 -js - networks: - usp_network: - ipv4_address: 172.16.235.9 - - mongodb: - image: mongo - container_name: mongodb_usp networks: usp_network: ipv4_address: 172.16.235.2 + profiles: [nats] +#/* -------------------------------------------------------------------------- */ - redis: - image: redis - container_name: redis_usp +#/* ------------------------ API REST / USP Controller ----------------------- */ + controller: + image: 'oktopusp/controller' + container_name: controlller + ports: + - 8000:8000 + depends_on: + - mongo_usp networks: usp_network: ipv4_address: 172.16.235.3 + profiles: [controller] +#/* -------------------------------------------------------------------------- */ - mqtt: - image: 'golang:1.21.4' - container_name: mqtt - tty: true - stdin_open: true - volumes: - - ../:/app/oktopus - command: bash -c "cd /app/oktopus/backend/services/mqtt/cmd/ && go run main.go -redis 'redis:6379' -info :8081" +#/* ---------------------------- Databases / Cache --------------------------- */ + mongo_usp: + image: mongo + container_name: mongo_usp ports: - - 1883:1883 - depends_on: - - redis + - 27017:27017 networks: usp_network: ipv4_address: 172.16.235.4 - websockets: - image: 'golang:1.21.6' + redis: + image: redis + container_name: redis_usp + ports: + - 6379:6379 + networks: + usp_network: + ipv4_address: 172.16.235.5 + profiles: [mqtt] +#/* -------------------------------------------------------------------------- */ + +#/* ----------------------- Message Transfer Protocols ----------------------- */ + mqtt: + image: 'oktopusp/mqtt' + container_name: mqtt + ports: + - 1883:1883 + - 8883:8883 + depends_on: + - redis + networks: + usp_network: + ipv4_address: 172.16.235.6 + profiles: [mqtt] + + ws: + image: 'oktopusp/ws' container_name: websockets - tty: true - stdin_open: true - volumes: - - ../:/app/oktopus - command: bash -c "cd /app/oktopus/backend/services/ws/ && go run cmd/main.go" ports: - 8080:8080 + networks: + usp_network: + ipv4_address: 172.16.235.7 + profiles: [ws] + + stomp: + image: 'oktopusp/stomp' + container_name: stomp + ports: + - 61613:61613 networks: usp_network: ipv4_address: 172.16.235.8 + profiles: [stomp] +#/* -------------------------------------------------------------------------- */ +#/* --------------- Message transfer Protocols Adapters to NATS -------------- */ + mqtt-adapter: + image: 'oktopusp/mqtt-adapter' + container_name: mqtt-adapter + depends_on: + - mqtt + networks: + usp_network: + ipv4_address: 172.16.235.9 + profiles: [mqtt] + + + ws-adapter: + image: 'oktopusp/ws-adapter' + container_name: ws-adapter + depends_on: + - ws + networks: + usp_network: + ipv4_address: 172.16.235.10 + profiles: [ws] + + stomp-adapter: + image: 'oktopusp/stomp-adapter' + container_name: stomp-adapter + depends_on: + - stomp + networks: + usp_network: + ipv4_address: 172.16.235.11 + profiles: [stomp] + + adapter: + image: 'oktopusp/adapter' + container_name: adapter + depends_on: + - mongo_usp + networks: + usp_network: + ipv4_address: 172.16.235.12 + profiles: [adapter] +#/* -------------------------------------------------------------------------- */ + +#/* ------------- SocketIO Real Time Communication With Frontend ------------- */ socketio: - image: 'node:16.20.2' + image: 'oktopusp/adapter' container_name: socketio - tty: true - stdin_open: true - volumes: - - ../:/app/oktopus - command: bash -c "cd /app/oktopus/backend/services/socketio/ && npm i && node server.js" ports: - 5000:5000 networks: usp_network: - ipv4_address: 172.16.235.5 + ipv4_address: 172.16.235.12 + profiles: [frontend] +#/* -------------------------------------------------------------------------- */ +#/* -------------------------------- Frontend -------------------------------- */ frontend: image: 'node:16.20.2' container_name: frontend @@ -99,7 +152,21 @@ services: - 3000:3000 networks: usp_network: - ipv4_address: 172.16.235.6 + ipv4_address: 172.16.235.13 + profiles: [frontend] +#/* -------------------------------------------------------------------------- */ + + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + ports: + - 9443:9443 + networks: + usp_network: + ipv4_address: 172.16.235.14 + profiles: [portainer] + volumes: + - /var/run/docker.sock:/var/run/docker.sock networks: usp_network: