From 72cd3b592ec74448a3eec71b4169ca14ddb7f7fe Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Mon, 19 May 2025 15:00:11 -0700 Subject: [PATCH] add a docker config for a monolithic app --- docker/dist-mono/build_images.sh | 29 +++++++++++++++++++++++ docker/dist-mono/docker-compose.yaml | 35 ++++++++++++++++++++++++++++ docker/dist-mono/mongoDB.Dockerfile | 3 +++ docker/dist-mono/redis.Dockerfile | 2 ++ docker/dist-mono/server.Dockerfile | 25 ++++++++++++++++++++ 5 files changed, 94 insertions(+) create mode 100755 docker/dist-mono/build_images.sh create mode 100755 docker/dist-mono/docker-compose.yaml create mode 100755 docker/dist-mono/mongoDB.Dockerfile create mode 100755 docker/dist-mono/redis.Dockerfile create mode 100644 docker/dist-mono/server.Dockerfile diff --git a/docker/dist-mono/build_images.sh b/docker/dist-mono/build_images.sh new file mode 100755 index 000000000..b56b9052c --- /dev/null +++ b/docker/dist-mono/build_images.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Change directory to root Server directory for correct Docker Context +cd "$(dirname "$0")" +cd ../.. + +# Define service names and their corresponding Dockerfiles in parallel arrays +services=("mono_mongo" "mono_redis" "mono_server") +dockerfiles=( + "./docker/dist-mono/mongoDB.Dockerfile" + "./docker/dist-mono/redis.Dockerfile" + "./docker/dist-mono/server.Dockerfile" +) + +# Loop through each service and build the corresponding image +for i in "${!services[@]}"; do + service="${services[$i]}" + dockerfile="${dockerfiles[$i]}" + + docker build -f "$dockerfile" -t "$service" . + + # Check if the build succeeded + if [ $? -ne 0 ]; then + echo "Error building $service image. Exiting..." + exit 1 + fi +done + +echo "All images built successfully" \ No newline at end of file diff --git a/docker/dist-mono/docker-compose.yaml b/docker/dist-mono/docker-compose.yaml new file mode 100755 index 000000000..204881d4a --- /dev/null +++ b/docker/dist-mono/docker-compose.yaml @@ -0,0 +1,35 @@ +services: + server: + image: mono_server:latest + restart: always + ports: + - "52345:52345" + env_file: + - server.env + depends_on: + - redis + - mongodb + redis: + image: mono_redis:latest + restart: always + volumes: + - ./redis/data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 5s + mongodb: + image: mono_mongo:latest + restart: always + command: ["mongod", "--quiet", "--replSet", "rs0", "--bind_ip_all"] + volumes: + - ./mongo/data:/data/db + healthcheck: + test: echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'mongodb:27017'}]}) }" | mongosh --port 27017 --quiet + interval: 5s + timeout: 30s + start_period: 0s + start_interval: 1s + retries: 30 diff --git a/docker/dist-mono/mongoDB.Dockerfile b/docker/dist-mono/mongoDB.Dockerfile new file mode 100755 index 000000000..969a320c2 --- /dev/null +++ b/docker/dist-mono/mongoDB.Dockerfile @@ -0,0 +1,3 @@ +FROM mongo +EXPOSE 27017 +CMD ["mongod"] diff --git a/docker/dist-mono/redis.Dockerfile b/docker/dist-mono/redis.Dockerfile new file mode 100755 index 000000000..af68ec61e --- /dev/null +++ b/docker/dist-mono/redis.Dockerfile @@ -0,0 +1,2 @@ +FROM redis +EXPOSE 6379 \ No newline at end of file diff --git a/docker/dist-mono/server.Dockerfile b/docker/dist-mono/server.Dockerfile new file mode 100644 index 000000000..f28c834ea --- /dev/null +++ b/docker/dist-mono/server.Dockerfile @@ -0,0 +1,25 @@ +FROM node:20-alpine AS frontend-build + +WORKDIR /app/client + +COPY client/package*.json ./ +RUN npm install + +COPY client ./ +RUN npm run build + +FROM node:20-alpine AS app + +WORKDIR /app/server + +COPY server ./ + +COPY --from=frontend-build /app/client/dist ./public + +RUN npm install + +RUN chmod +x ./scripts/inject-vars.sh + +EXPOSE 52345 + +CMD ./scripts/inject-vars.sh && node ./index.js