From a487e61b4cbceff397e364f08d3a612798bf3620 Mon Sep 17 00:00:00 2001 From: abdu <abdukiran@gmail.com> Date: Sun, 10 Nov 2024 18:40:59 +0100 Subject: [PATCH] add Dockerfile for build process, add docker-compose file for container properties, remove passwords from application properties --- Dockerfile.backend | 39 ++++++++++++++++++ docker-compose.yml | 50 +++++++++++++++++++++++ src/main/resources/application.properties | 2 +- 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 Dockerfile.backend create mode 100644 docker-compose.yml diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 0000000..8e43db1 --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,39 @@ +# need node/npm to run "npm run build" for our vue frontend +FROM node:20-alpine as build-frontend + +# working directory for our frontend +WORKDIR /app + +# copying package.json to root folder and installing dependencies +COPY ./frontend/package*.json ./ +RUN npm install + +# copying all of frontend to root folder in container +COPY ./frontend . + +# building frontend +RUN npm run build + +################################################################ +# getting jdk 17 (we use this version in development too) +FROM eclipse-temurin:17-jre-alpine as build-backend + +# working directory for backend +WORKDIR /app + +# copying frontend to static folder so spring can serve it +COPY --from build-frontend /app/dist /app/src/main/resources/static + +# copying backend to root folder in container +COPY . . + +# making maven executable (we had permission issues before adding this) +RUN chmod +x ./mvnw + +# building backend with maven wrapper +RUN ./mvnw clean package -DskipTests + +# exposing port, same port as we used in development +EXPOSE 9876 + +ENTRYPOINT ["java", "-jar", "target/todo-0.0.1-SNAPSHOT.jar"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e63bd26 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,50 @@ +services: + # mongodb stuff + mongodb: + # official mongodb container + image: mongo:latest + # container-name + container_name: mongodb + # env variables + environment: + # creates user with name tododbuser + MONGO_INITDB_ROOT_USERNAME: tododbuser + # sets password for user + MONGO_INITDB_ROOT_PASSWORD: tododbadminpassword + # creates collection/table + MONGO_INITDB_DATABASE: todo + # default mongo port + ports: + - "27017:27017" + # for data persistence, if I understood correctly its like a + # virtual drive for storage of the db between reboots + volumes: + - ./data/db:/data/db + + # backend stuff + backend: + # builds backend from root + build: . + # the internal network our backend will be using + networks: + - todo-network + # mongodb env variables for connection + environment: + MONGO_USER: tododbuser + MONGO_PASSWORD: tododbadminpassword + MONGO_HOST: mongodb + MONGO_PORT: 27017 + MONGO_DB: todo + # same port as we use in our application properties + # and for fetch requests in our frontend + ports: + - "9876:9876" + depends_on: + - mongodb + +# were gonna use this network for both our backend and frontend +networks: + # network name + todo-network: + # default driver I guess? idk, saw it on the official docs + driver: bridge \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 765f795..853c00d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.application.name=todo server.port=9876 -spring.data.mongodb.uri=mongodb://tododbuser:tododbadminpassword@192.168.179.24:27017/todo +spring.data.mongodb.uri=mongodb://${MONGO_USER}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}/${MONGO_DB} #openapi setup springdoc.api-docs.path=/v3/api-docs -- GitLab