From fa01e187819f58366d910792a6d7a3302f40a30a Mon Sep 17 00:00:00 2001 From: JacobLef Date: Fri, 2 Jan 2026 14:57:42 -0500 Subject: [PATCH 1/6] Add dockerfiles and docker-compose file. --- backend/Dockerfile | 0 docker-compose.yml | 0 frontend/Dockerfile | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..e69de29 From 61586d23d488b26ef781875cde1b7cdb2b3c6e1c Mon Sep 17 00:00:00 2001 From: JacobLef Date: Fri, 2 Jan 2026 19:53:11 -0500 Subject: [PATCH 2/6] add a dockerignore and template the docker compose and docker files. --- .dockerignore | 2 ++ backend/Dockerfile | 3 +++ docker-compose.yml | 24 ++++++++++++++++++++++++ frontend/Dockerfile | 12 ++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..45e1bbd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +Dockerfile +docker-compose.yml diff --git a/backend/Dockerfile b/backend/Dockerfile index e69de29..8ce3551 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -0,0 +1,3 @@ +FROM dvmarques/openjdk-17-jdk-alpine-with-timezone; + + diff --git a/docker-compose.yml b/docker-compose.yml index e69de29..75f80de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +services: + api: + image: openjdk-17 + build: . + ports: + - "80:80" + volumes: + - ./app/api + networks: + - buzy_network + + frontend: + image: nginx + build: . + ports: + - "5173:5174" + volumes: + - ./app/frontend + networks: + - buzy_network + +networks: + buzy_network: + driver: bridge diff --git a/frontend/Dockerfile b/frontend/Dockerfile index e69de29..3a54984 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:20-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 5173 + +CMD ["nmp", "run", "dev"] From c48eeeea8a380447feb469b880660340882eaf41 Mon Sep 17 00:00:00 2001 From: JacobLef Date: Wed, 7 Jan 2026 19:51:23 -0500 Subject: [PATCH 3/6] Complete backend and frontend docker files for general skeletal structure. --- backend/Dockerfile | 22 +++++++++++++++++++++- frontend/Dockerfile | 11 ++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 8ce3551..39e21df 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,3 +1,23 @@ -FROM dvmarques/openjdk-17-jdk-alpine-with-timezone; +# Build stage +FROM maven:3.9-eclipse-temurin-17 AS build +WORKDIR /app +COPY .mvn/ .mvn/ +COPY mvnw pom.xml ./ + +RUN chmod +x mvnw +RUN ./mvnw dependency:go-offline + +COPY src ./src + +RUN ./mvnw clean package -DskipTests + +FROM eclipse-temurin:17-jre +WORKDIR /app + +COPY --from=build /app/target/*.jar app.jar + +EXPOSE 8080 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 3a54984..16e36b0 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,5 +1,4 @@ -FROM node:20-alpine - +FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ @@ -7,6 +6,12 @@ RUN npm install COPY . . +RUN npm run build + +FROM nginx:alpine + +COPY --from=build /app/dist /usr/share/nginx/html + EXPOSE 5173 -CMD ["nmp", "run", "dev"] +CMD ["nginx", "-g", "daemon off;"] From 5292bbd85552790ef7ebacd5776ef5b1cf614726 Mon Sep 17 00:00:00 2001 From: JacobLef Date: Wed, 7 Jan 2026 19:58:51 -0500 Subject: [PATCH 4/6] Update the docker compose file to conform to the new docker file names. --- docker-compose.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 75f80de..8fdf6e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,19 @@ services: - api: - image: openjdk-17 - build: . + backend: + build: ./backend + container_name: backend ports: - "80:80" - volumes: - - ./app/api networks: - buzy_network frontend: - image: nginx - build: . + build: ./frontend + container_name: frontend ports: - - "5173:5174" - volumes: - - ./app/frontend + - "5173:80" + depends_on: + - backend networks: - buzy_network From d1b148b3fd53d9ac2151b3b64820656a0b59e6e9 Mon Sep 17 00:00:00 2001 From: JacobLef Date: Sat, 10 Jan 2026 17:01:16 -0500 Subject: [PATCH 5/6] Update docker compose to have mysql configuration. --- .../main/java/app/common/util/DatabaseSeeder.java | 2 -- docker-compose.yml | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/app/common/util/DatabaseSeeder.java b/backend/src/main/java/app/common/util/DatabaseSeeder.java index 18afbf7..1577663 100644 --- a/backend/src/main/java/app/common/util/DatabaseSeeder.java +++ b/backend/src/main/java/app/common/util/DatabaseSeeder.java @@ -42,8 +42,6 @@ public class DatabaseSeeder implements CommandLineRunner { private static final StringConverter CONVERTER = new StringConverterImpl(); private static final String CSV_PREFIX = "data/csv"; - // ==================== Log Message Enum ==================== - // @formatter:off private enum LogMessage { SEEDING_DISABLED("Database seeding is disabled"), diff --git a/docker-compose.yml b/docker-compose.yml index 8fdf6e6..12b6e33 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,20 @@ services: + docker-mysql: + image: mysql:9.5 + environment: + - MY_SQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} + - MY_SQL_PASSWORD=${DB_PASSWORD} + - MY_SQL_DATABASE=database + - MY_SQL_USERNAME=${DB_USERNAME} + ports: + - 3307:3006 backend: build: ./backend container_name: backend ports: - - "80:80" + - 8080:8080 + depends_on: + - docker-mysql networks: - buzy_network @@ -11,7 +22,7 @@ services: build: ./frontend container_name: frontend ports: - - "5173:80" + - 5173:80 depends_on: - backend networks: From 9b8a8ea1fe302b9ad2ef4f5d99d136f9015ac29e Mon Sep 17 00:00:00 2001 From: JacobLef Date: Mon, 12 Jan 2026 21:38:18 -0500 Subject: [PATCH 6/6] Update the docker compose file to properly configure the springboot configuration with regards to the application properties. Update the application properties file to match that the env variables now come from the docker compose configuration. --- .env.example | 6 ++++ backend/Dockerfile | 2 +- .../src/main/resources/application.properties | 7 ++-- docker-compose.yml | 34 ++++++++++++++----- frontend/Dockerfile | 8 +---- 5 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7cbb237 --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +DB_ROOT_PASSWORD=your_root_password +DB_PASSWORD=your_password +DB_USERNAME=root +DB_URL=jdbc:mysql://docker-mysql:3306/database?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC +JWT_SECRET=your_jwt_secret_here +CORS_ORIGINS=http://localhost:5173 diff --git a/backend/Dockerfile b/backend/Dockerfile index 39e21df..e55aa47 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,7 +13,7 @@ COPY src ./src RUN ./mvnw clean package -DskipTests -FROM eclipse-temurin:17-jre +FROM amazoncorretto:17-alpine-jdk WORKDIR /app COPY --from=build /app/target/*.jar app.jar diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index c574358..59d0f40 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -3,15 +3,15 @@ spring.application.name=business-management-platform server.port=8080 # MySQL Database Configuration -spring.datasource.url=jdbc:mysql://localhost:3306/business_management_db?createDatabaseIfNotExist=true +spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:mysql://localhost:3306/business_management_db?createDatabaseIfNotExist=true} spring.datasource.username=${DB_USERNAME:root} spring.datasource.password=${DB_PASSWORD:} spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # JPA/Hibernate Settings - Auto-generate tables from entity classes -spring.jpa.hibernate.ddl-auto=create +spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.format_sql=true # File Upload Settings (for CSV imports) @@ -26,6 +26,7 @@ logging.level.org.springframework.web=INFO payroll.default.tax.rate=0.20 payroll.default.insurance.rate=0.05 payroll.calculation.precision=2 + # JWT Configuration jwt.secret=${JWT_SECRET:Pgcdtg888o+XX18Wkqf+J2X7/a+VJHbj4zvwfAMFtA0=} jwt.expiration=86400000 diff --git a/docker-compose.yml b/docker-compose.yml index 12b6e33..ac8808f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,35 @@ services: docker-mysql: image: mysql:9.5 + container_name: docker-mysql environment: - - MY_SQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - - MY_SQL_PASSWORD=${DB_PASSWORD} - - MY_SQL_DATABASE=database - - MY_SQL_USERNAME=${DB_USERNAME} + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_DATABASE: database ports: - - 3307:3006 + - "3307:3306" + networks: + - buzy_network + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + volumes: + - mysql_data:/var/lib/mysql + backend: build: ./backend container_name: backend ports: - - 8080:8080 + - "8080:8080" depends_on: - - docker-mysql + docker-mysql: + condition: service_healthy + environment: + SPRING_DATASOURCE_URL: ${DB_URL} + SPRING_DATASOURCE_USERNAME: ${DB_USERNAME} + SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD} networks: - buzy_network @@ -22,7 +37,7 @@ services: build: ./frontend container_name: frontend ports: - - 5173:80 + - "5173:80" depends_on: - backend networks: @@ -31,3 +46,6 @@ services: networks: buzy_network: driver: bridge + +volumes: + mysql_data: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 16e36b0..3b6d5af 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,17 +1,11 @@ FROM node:20-alpine AS build WORKDIR /app - COPY package*.json ./ RUN npm install - COPY . . - RUN npm run build FROM nginx:alpine - COPY --from=build /app/dist /usr/share/nginx/html - -EXPOSE 5173 - +EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]