|
|
||
|---|---|---|
| Documentación | ||
| docker | ||
| memberflow-api | ||
| memberflow-data | ||
| memberflow-frontend | ||
| .gitignore | ||
| README.md | ||
README.md
🚀 MemberFlow - Entorno Dockerizado
Este repositorio contiene la configuración necesaria para levantar MemberFlow, una aplicación de gestión para escuelas de artes marciales, usando contenedores Docker. Incluye servicios para base de datos, backend en Spring Boot y frontend en React.
📁 Estructura del Proyecto
memberflow-docker/
│
├── docker/
│ ├── docker-compose.yml # Orquestador de servicios
│ ├── mysql-data/ # Volumen persistente de MySQL (no se sube al repo)
│ ├── Dockerfile-api # Dockerfile para el backend
│ ├── Dockerfile-front # Dockerfile para el frontend
│ ├── nginx.conf # Configuración para Nginx
│ ├── initdb.sh (opcional) # Script para restaurar base desde backup.sql
│ └── backup.sql (opcional) # Backup opcional de base de datos
│
├── memberflow-api/ # Backend en Spring Boot (API)
├── memberflow-data/ # Módulo con entidades, servicios y repositorios
├── memberflow-frontend/ # Frontend en React
├── Documentación/ # Archivos de documentación
└── .gitignore # Excluye mysql-data del control de versiones
🧠 Sobre la persistencia de datos
- Los datos de MySQL se guardan en la carpeta
docker/mysql-data/gracias al volumen configurado en Docker. - Esta carpeta no se sube a Git (está en
.gitignore), por lo tanto si clonas el repositorio en otro equipo, deberás crearla vacía o regenerarla al iniciar la aplicación.
⚙️ Configuración inicial del backend
Archivo: memberflow-api/src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://mysql:3306/mf_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=validate
# Para desarrollo inicial (activar temporalmente):
# spring.jpa.hibernate.ddl-auto=create
# spring.profiles.active=dev
📝 Instrucciones:
-
Si inicias el proyecto por primera vez:
- Cambia
spring.jpa.hibernate.ddl-auto=validateacreate. - Activa el perfil de desarrollo:
spring.profiles.active=dev.
- Cambia
-
Una vez creada la base de datos:
- Regresa
ddl-autoavalidate. - Comenta o elimina el perfil
dev.
- Regresa
▶️ Cómo levantar el entorno
- Asegúrate de tener Docker y Docker Compose instalados.
- Desde la carpeta
docker/, ejecuta:
docker-compose up --build
Esto levantará los siguientes servicios:
| Servicio | Puerto local | Descripción |
|---|---|---|
| MySQL | 3307 | Base de datos |
| Backend | 8080 | API REST en Spring Boot |
| Frontend | 3000 | Interfaz React + Nginx |
🐳 Explicación de archivos Docker
docker-compose.yml
Orquesta los servicios mysql, backend, frontend y db-restore (opcional). El backend depende del estado saludable de MySQL.
Dockerfile-api
Define cómo se construye la imagen de la API:
FROM eclipse-temurin:21-jdk-alpine
WORKDIR /app
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
Dockerfile-front
Construye la app React y la sirve con Nginx:
FROM node:20-alpine as build
WORKDIR /app
COPY memberflow-frontend .
RUN npm install && npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
nginx.conf
Permite rutas amigables con React Router:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri /index.html;
}
}
🔁 Portabilidad
Si se copia todo el proyecto (incluyendo docker/mysql-data), los contenedores se levantarán con todos los datos y configuraciones conservadas.
No es necesario usar backup.sql si ya tienes los datos en la carpeta local.
🛠️ Requisitos del sistema
- Docker
- Docker Compose
- Java 21 (para desarrollo backend local)
- Node.js 20 (para desarrollo frontend local)
✅ Notas adicionales
- El servicio
db-restorees opcional y solo útil si deseas restaurar una base de datos desdebackup.sql. - Puedes eliminar el contenido de
mysql-data/si deseas reiniciar la base completamente. - La API incluye Swagger disponible en:
http://localhost:8080/swagger-ui/index.html
¡Gracias por usar MemberFlow!
Para más información, revisa la carpeta /Documentación o abre un issue.