This project uses Docker to containerize both the frontend and backend, enabling consistent builds and simplified deployment. Each service is defined with a multi-stage Dockerfile to optimize image size and build performance.

Backend (docker/backend.dockerfile)

The backend is a Spring Boot application built with Gradle and JDK 17. Its Dockerfile is split into two stages:

  1. Build Stage (gradle:8.3-jdk17):
  2. Runtime Stage (eclipse-temurin:17-jre):

Frontend (docker/frontend.dockerfile)

The frontend is a Vite-based React application served by Nginx. Its Dockerfile also uses two stages:

  1. Build Stage (node:22-alpine):
  2. Runtime Stage (nginx:alpine):

Nginx Configuration (docker/nginx.conf)

The custom Nginx config serves the frontend and proxies API calls to the backend: