Multiproyecto configurado con Docker. Incluye: memberflow-data memberflow-api memberflow-frontend
Go to file
Dennis Eckerskorn a1efe5908c Updated DATA README 2025-05-29 22:15:21 +02:00
Documentación Added Database design documentation 2025-05-29 21:45:24 +02:00
docker Added and revised javadoc 2025-05-29 21:40:02 +02:00
memberflow-api Updated API README 2025-05-29 22:05:41 +02:00
memberflow-data Updated DATA README 2025-05-29 22:15:21 +02:00
memberflow-frontend Upload pdf + some more improvemnets, style changes and bug fixes 2025-05-28 00:34:00 +02:00
.gitignore Updated docker file, created backup and changed to local persistence for DB 2025-05-16 00:28:45 +02:00
README.md Created README 2025-05-29 21:55:35 +02:00

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:

  1. Si inicias el proyecto por primera vez:

    • Cambia spring.jpa.hibernate.ddl-auto=validate a create.
    • Activa el perfil de desarrollo: spring.profiles.active=dev.
  2. Una vez creada la base de datos:

    • Regresa ddl-auto a validate.
    • Comenta o elimina el perfil dev.

▶️ Cómo levantar el entorno

  1. Asegúrate de tener Docker y Docker Compose instalados.
  2. 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-restore es opcional y solo útil si deseas restaurar una base de datos desde backup.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.