279f2f6de0
- Dockerfile.backend: multi-stage Java 21 build (eclipse-temurin) - docker-compose.yml: PostgreSQL 16 + backend + frontend with health checks - SecurityConfig: CORS for localhost:3000 frontend origin - application-docker.properties: Docker profile with env vars - Spring Boot Actuator health endpoint enabled - Next.js upgraded 15.2.8 → 15.5.18 (security fixes)
39 lines
1.1 KiB
Docker
39 lines
1.1 KiB
Docker
# Multi-stage build for cannamanage-api (Spring Boot + Java 21)
|
|
# Build context: repo root (needs access to all Maven modules)
|
|
|
|
FROM eclipse-temurin:21-jdk-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# Copy Maven wrapper + POM files first (layer caching)
|
|
COPY .mvn/ .mvn/
|
|
COPY mvnw pom.xml ./
|
|
COPY cannamanage-domain/pom.xml cannamanage-domain/pom.xml
|
|
COPY cannamanage-service/pom.xml cannamanage-service/pom.xml
|
|
COPY cannamanage-api/pom.xml cannamanage-api/pom.xml
|
|
|
|
# Download dependencies (cached unless POMs change)
|
|
RUN chmod +x mvnw && ./mvnw dependency:go-offline -B -q 2>/dev/null || true
|
|
|
|
# Copy source code
|
|
COPY cannamanage-domain/src/ cannamanage-domain/src/
|
|
COPY cannamanage-service/src/ cannamanage-service/src/
|
|
COPY cannamanage-api/src/ cannamanage-api/src/
|
|
|
|
# Build the fat JAR
|
|
RUN ./mvnw package -pl cannamanage-api -am -DskipTests -B -q
|
|
|
|
# --- Runtime stage ---
|
|
FROM eclipse-temurin:21-jre-alpine AS runtime
|
|
WORKDIR /app
|
|
|
|
# Create non-root user
|
|
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
|
|
|
COPY --from=builder /app/cannamanage-api/target/*.jar app.jar
|
|
|
|
USER appuser
|
|
|
|
EXPOSE 8080
|
|
|
|
ENTRYPOINT ["java", "-jar", "app.jar"]
|