51 lines
1.2 KiB
Docker

# 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"]