# syntax=docker/dockerfile:1 FROM node:20-alpine AS web-builder WORKDIR /src/Frontend COPY Frontend/package.json Frontend/package-lock.json ./ RUN npm ci COPY Frontend/ ./ ARG VITE_API_BASE="" ARG VITE_KEYCLOAK_URL="https://auth.arrowstack.dev" ARG VITE_KEYCLOAK_REALM="dev" ARG VITE_KEYCLOAK_CLIENT_ID="learn-platform" ENV VITE_API_BASE=${VITE_API_BASE} \ VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL} \ VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM} \ VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID} RUN npm run build FROM golang:1.22-alpine AS api-builder WORKDIR /src/Backend COPY Backend/go.mod Backend/go.sum ./ RUN go mod download COPY Backend/ ./ RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/learn-platform ./cmd/api FROM alpine:3.20 RUN apk add --no-cache ca-certificates \ && addgroup -S app \ && adduser -S app -G app WORKDIR /app COPY --from=api-builder /out/learn-platform /app/learn-platform COPY --from=web-builder /src/Frontend/dist /app/web ENV PORT=8080 \ WEB_DIR=/app/web \ AUTH_DISABLED=false USER app EXPOSE 8080 HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \ CMD wget -q -O /dev/null http://127.0.0.1:8080/health || exit 1 ENTRYPOINT ["/app/learn-platform"]