diff --git a/Dockerfile b/Dockerfile index b6c7e88..86c75db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,47 @@ -# Stage 1: Build +# --- Stage 1: Build & Dependencies --- FROM maven:3.9-eclipse-temurin-21-alpine AS build WORKDIR /app -# Copiamos todo el proyecto -COPY . . +# 1. Copiamos los archivos de configuración (Estructura de poms) +COPY pom.xml . +COPY application/pom.xml ./application/ +COPY bootstrap/pom.xml ./bootstrap/ +COPY domain/pom.xml ./domain/ +COPY infrastructure/pom.xml ./infrastructure/ -# Compilamos todo el proyecto (todos los módulos) -RUN mvn clean package -DskipTests +# 2. Descargamos dependencias (Cacheamos esta capa) +# Usamos install de los poms para que los módulos se reconozcan entre sí +RUN mvn dependency:go-offline -B -# Stage 2: Run -FROM openjdk:21-jdk +# 3. Copiamos el código fuente y compilamos +COPY application/src ./application/src +COPY bootstrap/src ./bootstrap/src +COPY domain/src ./domain/src +COPY infrastructure/src ./infrastructure/src + +RUN mvn clean package -DskipTests -B + +# --- Stage 2: Run (Imagen final ligera) --- +FROM eclipse-temurin:21-jre-alpine WORKDIR /app + +# Seguridad: Usuario no-root +RUN addgroup -S spring && adduser -S spring -G spring +USER spring:spring + +# Copiamos solo el JAR final (ajustado a tu módulo bootstrap) COPY --from=build /app/bootstrap/target/*.jar app.jar + +# Configuración de Memoria y Rendimiento para Microservicios +# -XX:+UseSerialGC: Menos consumo de RAM para apps < 1GB +# -XX:TieredStopAtLevel=1: Arranque más rápido y menos uso de RAM del compilador JIT +# -XX:MaxRAMPercentage: Se ajusta dinámicamente al límite de Docker +ENV JAVA_OPTS="-XX:+UseContainerSupport \ + -XX:MaxRAMPercentage=75.0 \ + -XX:+UseSerialGC \ + -XX:TieredStopAtLevel=1 \ + -Xms128m" + EXPOSE 80 -ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-Xmx512m", "-Xms256m", "-jar", "app.jar"] \ No newline at end of file + +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index b753785..7cf137a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -70,5 +70,8 @@ pipeline { failure { echo "❌ Pipeline failed!" } + always { + deleteDir() + } } } \ No newline at end of file diff --git a/Makefile b/Makefile index 26a9cc4..2df135d 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +STACK=pablotj-portfolio APP_NAME=pablotj-portfolio-api IMAGE_NAME=$(APP_NAME) @@ -6,7 +7,7 @@ NAMESPACE=andromeda TAG?=latest HOST_PORT=8181 -CONTAINER_PORT=80 +CONTAINER_PORT=8080 IMAGE_FULL=$(REGISTRY_URL)/$(NAMESPACE)/$(IMAGE_NAME):$(TAG) @@ -22,6 +23,9 @@ push: run: docker run -d \ --name $(APP_NAME) \ + --label com.docker.compose.service="$(APP_NAME)" \ + --label com.docker.compose.project="$(STACK)" \ + --network andromeda \ -p $(HOST_PORT):$(CONTAINER_PORT) \ --env-file .env \ $(IMAGE_FULL) diff --git a/infrastructure/src/main/resources/ddl.sql b/infrastructure/src/main/resources/ddl.sql index aaa34af..48fe643 100644 --- a/infrastructure/src/main/resources/ddl.sql +++ b/infrastructure/src/main/resources/ddl.sql @@ -124,11 +124,6 @@ alter table if exists experience_skill foreign key (experience_id) references experience; -alter table if exists profile_social_link - add constraint FKfh1pbfvvg3palcr1yip6jffik - foreign key (PROFILE_ID) - references profile; - alter table if exists project_feature add constraint FKdifppyvrfito5in15ox4db0up foreign key (project_id)