Proyecto web completo con arquitectura de microservicios utilizando Docker, que incluye un frontend moderno, backend robusto y base de datos MySQL.
- Frontend: Node.js + JavaScript + Tailwind CSS (Puerto 3000)
- Backend: Spring Boot (Java 17) + REST API (Puerto 8081)
- Base de Datos: MySQL 8.0 (Puerto 3306)
- Administrador BD: Adminer (Puerto 8080)
- Docker Desktop instalado y en ejecución
- Windows: Descargar Docker Desktop
- Mínimo 4GB RAM asignados a Docker
- WSL2 habilitado (en Windows)
git clone [URL_DEL_REPOSITORIO]
cd Proyectoinstall.batEste script verificará:
- ✅ Instalación de Docker
- ✅ Estado de ejecución de Docker
- ✅ Disponibilidad de Docker Compose
- ✅ Configuración de variables de entorno
start.batEste script:
- Construirá todas las imágenes Docker
- Iniciará todos los contenedores
- Verificará el estado de los servicios
- Mostrará las URLs de acceso
Una vez iniciado el proyecto, los servicios estarán disponibles en:
| Servicio | URL | Descripción |
|---|---|---|
| Frontend | http://localhost:3000 | Interfaz web principal |
| Backend API | http://localhost:8081/api | API REST |
| Adminer | http://localhost:8080 | Administrador de base de datos |
| MySQL | localhost:3306 | Base de datos (acceso directo) |
Para acceder a Adminer o conectarse directamente a MySQL:
- Sistema: MySQL
- Servidor:
mysql(desde Docker) olocalhost(desde host) - Usuario:
root - Contraseña:
rootpassword - Base de Datos:
projectdb
Proyecto/
├── frontend/ # Aplicación Node.js + Tailwind
│ ├── public/ # Archivos estáticos
│ │ ├── index.html # Página principal
│ │ ├── js/
│ │ │ └── app.js # Lógica del frontend
│ │ └── styles/ # Estilos Tailwind
│ ├── server.js # Servidor Express
│ ├── package.json # Dependencias Node.js
│ ├── tailwind.config.js
│ └── Dockerfile
│
├── backend/ # Aplicación Spring Boot
│ ├── src/
│ │ └── main/
│ │ ├── java/com/proyecto/backend/
│ │ │ ├── BackendApplication.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── model/
│ │ │ │ └── User.java
│ │ │ ├── repository/
│ │ │ │ └── UserRepository.java
│ │ │ └── service/
│ │ │ └── UserService.java
│ │ └── resources/
│ │ └── application.properties
│ ├── pom.xml # Dependencias Maven
│ └── Dockerfile
│
├── database/ # Configuración de BD
│ └── init.sql # Script de inicialización
│
├── docker-compose.yml # Orquestación de servicios
├── install.bat # Script de instalación
├── start.bat # Script de inicio
└── README.md # Este archivo
# Iniciar todos los servicios
docker compose up -d
# Ver logs de todos los servicios
docker compose logs -f
# Ver logs de un servicio específico
docker compose logs -f backend
# Detener todos los servicios
docker compose down
# Detener y eliminar volúmenes (¡elimina datos de BD!)
docker compose down -v
# Reconstruir imágenes
docker compose build
# Reiniciar un servicio específico
docker compose restart frontend# Ver contenedores en ejecución
docker compose ps
# Ver uso de recursos
docker stats# Acceder al shell del backend
docker exec -it proyecto-backend sh
# Acceder al shell del frontend
docker exec -it proyecto-frontend sh
# Acceder a MySQL
docker exec -it proyecto-mysql mysql -uroot -prootpassword projectdb- ✅ Interfaz moderna con Tailwind CSS
- ✅ Gestión de usuarios (CRUD)
- ✅ Verificación de estado del backend
- ✅ Comunicación con API REST
- ✅ Diseño responsive
- ✅ API REST completa
- ✅ Endpoints de usuarios (CRUD)
- ✅ Health check endpoint
- ✅ Integración con JPA/Hibernate
- ✅ CORS habilitado
- ✅ Validación de datos
- ✅ MySQL 8.0
- ✅ Inicialización automática con datos de ejemplo
- ✅ Persistencia de datos con volúmenes
- ✅ Adminer para gestión visual
GET /api/health
Response: { "status": "ok", "service": "backend" }
Obtener todos los usuarios
GET /api/users
Response: [{ "id": 1, "name": "Juan", "email": "juan@example.com" }, ...]
Obtener un usuario
GET /api/users/{id}
Response: { "id": 1, "name": "Juan", "email": "juan@example.com" }
Crear usuario
POST /api/users
Body: { "name": "María", "email": "maria@example.com" }
Response: { "id": 2, "name": "María", "email": "maria@example.com" }
Actualizar usuario
PUT /api/users/{id}
Body: { "name": "María García", "email": "maria.garcia@example.com" }
Response: { "id": 2, "name": "María García", "email": "maria.garcia@example.com" }
Eliminar usuario
DELETE /api/users/{id}
Response: 204 No Content
- Verifica que Docker Desktop esté instalado y actualizado
- En Windows, asegúrate de tener WSL2 habilitado
- Reinicia Docker Desktop
- Espera 30-60 segundos después de iniciar (primera vez puede tardar más)
- Verifica logs:
docker compose logs -f - Verifica puertos no estén ocupados:
netstat -ano | findstr "3000 8080 8081 3306"
- Verifica que MySQL esté running:
docker ps - Espera a que MySQL termine de inicializarse (check logs)
- Reinicia el backend:
docker compose restart backend
docker compose down -v
docker compose up -d --build- Edita archivos en
frontend/ - Reconstruye:
docker compose build frontend - Reinicia:
docker compose restart frontend
- Edita archivos en
backend/src/ - Reconstruye:
docker compose build backend - Reinicia:
docker compose restart backend
- Edita
database/init.sql - Elimina volumen:
docker compose down -v - Reinicia:
docker compose up -d
- Los datos de MySQL se persisten en un volumen Docker
- El backend espera a que MySQL esté listo antes de iniciar (healthcheck)
- El frontend se comunica con el backend a través de la red interna de Docker
- Adminer es extremadamente ligero (<10MB) y fácil de usar
Para contribuir al proyecto:
- Crea un fork del repositorio
- Crea una rama para tu feature
- Realiza tus cambios
- Envía un pull request
Este proyecto está bajo licencia MIT.
Proyecto creado para demostración de arquitectura de microservicios con Docker.
¿Necesitas ayuda? Abre un issue en el repositorio o consulta la documentación de Docker.