Este repositorio contiene una aplicación de comercio electrónico completamente funcional construida con una arquitectura de microservicios. El proyecto fue desarrollado con fines didácticos para demostrar patrones de diseño de software modernos, comunicación entre servicios, seguridad centralizada y más.
- Arquitectura de Microservicios: Sistema modular con servicios independientes y bases de datos dedicadas.
- Autenticación y Seguridad: Autenticación de usuarios basada en JWT, almacenados en cookies
HttpOnlypara mayor seguridad contra ataques XSS. - API Gateway Centralizado: Un único punto de entrada para todas las peticiones, manejando el enrutamiento y la seguridad de forma centralizada.
- Descubrimiento de Servicios: Los servicios se registran y descubren dinámicamente usando Eureka.
- Comunicación Asíncrona: Uso de RabbitMQ para desacoplar servicios críticos como la creación de órdenes tras un pago exitoso.
- Bases de Datos Políglotas: Utiliza la base de datos adecuada para cada tarea (PostgreSQL para datos relacionales y Redis para datos volátiles como el carrito).
- Integración de Pagos: Proceso de checkout seguro y desacoplado utilizando la API de Stripe Checkout.
- Contenerización Completa: Todo el ecosistema (aplicaciones, bases de datos, bus de mensajes) está orquestado con Docker y Docker Compose para un fácil despliegue y desarrollo.
- Flujo de Desarrollo Ágil: Configuración para recarga en caliente (
hot-reloading) en el entorno de desarrollo.
- Java 21
- Spring Boot 3
- Spring Cloud:
- API Gateway
- Eureka Service Discovery
- Spring Security: Autenticación con JWT.
- Spring Data:
- JPA (con Hibernate)
- Redis
- Spring AMQP: Integración con RabbitMQ.
- Lombok
- PostgreSQL: Para los servicios de Usuarios, Productos y Órdenes.
- Redis: Para el servicio de Carrito de Compras.
- RabbitMQ: Para la comunicación asíncrona entre servicios.
- Stripe API: Para procesar los pagos de forma segura.
- Docker & Docker Compose
- Maven
Sigue estos pasos para levantar el entorno completo en tu máquina local.
- Git
- Java JDK 17+
- Maven
- Docker y Docker Compose
- Una cuenta de Stripe para obtener tus claves de API (puedes usar el modo de prueba).
-
Clona el repositorio:
git clone [https://github.com/tu-usuario/tu-repositorio.git](https://github.com/tu-usuario/tu-repositorio.git) cd tu-repositorio -
Configura tus variables de entorno: En el
payment-service, dentro desrc/main/resources/application.properties, necesitarás añadir tus claves de Stripe:stripe.api.key=sk_test_... # Tu clave secreta de Stripe del Dashboard stripe.webhook.secret=whsec_... # ¡IMPORTANTE! Usa el secreto que te da la Stripe CLI al ejecutar `stripe listen` stripe.success.url=http://localhost:3000/success # URL de tu frontend stripe.cancel.url=http://localhost:3000/cancel # URL de tu frontend
⚠️ Nota de Seguridad: En un proyecto real, estas claves nunca deben estar directamente en el código. Se gestionarían a través de variables de entorno del sistema o un servicio de secretos.
Hemos configurado dos modos de ejecución:
Este modo construye imágenes ligeras a partir de los archivos .jar y es ideal para un despliegue.
docker compose up --buildEste modo utiliza volúmenes de Docker y Spring Boot DevTools para recargar automáticamente el código de tus servicios cada vez que guardas un cambio.
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --buildUna vez que los servicios estén en marcha, puedes abrir el Dashboard de Eureka en http://localhost:8761 para ver todos los microservicios registrados y el Dashboard de RabbitMQ en http://localhost:15672 (user: guest, pass: guest).