Microservices-based e-commerce platform with a Spring Boot backend and Angular frontend.
Backend services:
discovery-service(Eureka service registry)gateway-service(single entrypoint, JWT auth, routing)user-service(auth + profile)product-service(catalog management)media-service(image upload + media metadata)
Supporting infrastructure:
- MongoDB
- MinIO (object storage)
Frontend:
- Angular app consuming gateway APIs
backend/discovery-service/README.mdbackend/gateway-service/README.mdbackend/user-service/README.mdbackend/product-service/README.mdbackend/media-service/README.mddocs/backend-unit-testing-guide.md(JUnit + backend testing walkthrough)frontend/README.mddocs/frontend-unit-testing-guide.md(Jasmine/Karma frontend testing walkthrough)docs/jenkins-ci-guide.md(Jenkins setup + CI pipeline walkthrough)
backend/.envfor manual local service runs (dev mode).backend/docker.envfor Docker Compose runs (prod and dev infra).backend/.env.exampleandbackend/docker.env.exampleas templates.- Mongo logical DB isolation uses:
MONGO_USER_DATABASEMONGO_PRODUCT_DATABASEMONGO_MEDIA_DATABASEon the same MongoDB instance.
- Docker + Docker Compose
- OpenSSL
- Java 17
- Node.js + npm
mkdir -p backend/certs
openssl req -x509 -nodes -newkey rsa:2048 -sha256 -days 825 \
-keyout backend/certs/gateway.key \
-out backend/certs/gateway.crt \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
openssl pkcs12 -export \
-out backend/certs/gateway.p12 \
-inkey backend/certs/gateway.key \
-in backend/certs/gateway.crt \
-name gateway \
-passout pass:changeitmkdir -p backend/keys
openssl genpkey -algorithm RSA -out backend/keys/private.pem -pkeyopt rsa_keygen_bits:2048
openssl pkey -in backend/keys/private.pem -pubout -out backend/keys/public.pemFrom repo root:
make prod-upThis starts backend services plus the Dockerized frontend on https://localhost:4200.
Stop:
make prod-downStop and remove volumes:
make prod-down-vDirect Docker Compose equivalent:
docker compose --env-file backend/docker.env -f docker-compose.yml up --build -d- Start infra (
mongo,minio,discovery-service) from repo root:
make dev-infra-up- Run backend services manually (each in a separate terminal):
cd backend/media-service && ./mvnw spring-boot:run
cd backend/user-service && ./mvnw spring-boot:run
cd backend/product-service && ./mvnw spring-boot:run
cd backend/gateway-service && ./mvnw spring-boot:run- Run frontend:
cd frontend
npm install
npm run start:https- Stop infra:
make dev-infra-downNote: in dev mode, backend services load local env values from backend/.env.
Frontend in dev mode still runs manually with npm run start:https.
- Frontend:
https://localhost:4200 - Gateway:
https://localhost:8443 - Eureka:
http://localhost:8761 - MinIO API:
http://localhost:9000 - MinIO Console:
http://localhost:9001
POST /auth/register- Optional avatar upload:
POST /media/profile - Link avatar to profile:
PATCH /users/mewithavatarMediaId
- Create product:
POST /productswithmediaIds: [] - Upload images:
POST /media/imageswithproductId+files[] - Save image IDs on product:
PUT /products/{id}withmediaIds
- Canonical compose files are at repo root:
docker-compose.ymlanddocker-compose.dev.yml. backend/docker-compose.ymlis kept for compatibility with existing commands.- Frontend Docker runtime uses Nginx with TLS certs from
backend/certsand proxies API routes togateway-service.