App web familiar de rutinas visuales para niños con TDAH: muestra cada día el material del cole y las rutinas de tarde, con gamificación por monedas y tienda de recompensas. Multi-niño y bilingüe ES/CA. Uso doméstico/homelab. Backend (Spring Boot 3.5 / Java 21 / Gradle): - Dominio por capas, PostgreSQL + Liquibase, datos semilla. - API REST con DTOs: /today, toggle con monedas y bonos de bloque/día, monedero, tienda/canje, ajustes y CRUD del panel de padres. - Seguridad ligera por PIN (BCrypt + sesion en memoria), sin Keycloak. - Tests JUnit: generacion del dia, monedas/bonos con reversion, canje, seguridad. Frontend (Angular 19, standalone + signals): - Perfiles, Home (Tablero y Foco), Tienda y panel de padres (5 pestañas). - Tipografia OpenDyslexic conmutable (accesibilidad), i18n ES/CA, TTS y sonido. - Tokens de diseño fieles al handoff (paleta, animaciones, monedas voladoras). Empaquetado: - Docker multi-stage + docker-compose (PostgreSQL + backend + Nginx). - Decisiones de arquitectura documentadas en docs/adr.
34 lines
1.1 KiB
Docker
34 lines
1.1 KiB
Docker
# --- Etapa 1: build ---
|
|
# Compila el jar con el Gradle wrapper del proyecto (no requiere Gradle en host).
|
|
FROM eclipse-temurin:21-jdk AS build
|
|
WORKDIR /app
|
|
|
|
# Primero solo lo necesario para resolver dependencias y aprovechar la caché de capas.
|
|
COPY gradlew settings.gradle build.gradle ./
|
|
COPY gradle ./gradle
|
|
RUN chmod +x gradlew && ./gradlew --no-daemon dependencies > /dev/null 2>&1 || true
|
|
|
|
# Ahora el código fuente y el empaquetado.
|
|
COPY src ./src
|
|
RUN ./gradlew --no-daemon clean bootJar
|
|
|
|
# --- Etapa 2: runtime ---
|
|
# Imagen mínima con JRE 21. Usuario no-root y zona horaria del negocio.
|
|
FROM eclipse-temurin:21-jre AS runtime
|
|
WORKDIR /app
|
|
ENV TZ=Europe/Madrid
|
|
|
|
# Usuario sin privilegios.
|
|
RUN useradd --system --uid 10001 --create-home appuser
|
|
USER appuser
|
|
|
|
COPY --from=build /app/build/libs/*.jar app.jar
|
|
|
|
EXPOSE 8080
|
|
|
|
# Healthcheck contra el endpoint de Actuator (solo health expuesto).
|
|
HEALTHCHECK --interval=15s --timeout=3s --start-period=40s --retries=5 \
|
|
CMD wget -qO- http://localhost:8080/actuator/health | grep -q '"status":"UP"' || exit 1
|
|
|
|
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
|