31 lines
1.0 KiB
Docker
31 lines
1.0 KiB
Docker
|
|
# syntax=docker/dockerfile:1.7
|
||
|
|
|
||
|
|
FROM --platform=$BUILDPLATFORM node:20-alpine AS frontend-builder
|
||
|
|
WORKDIR /app/frontend
|
||
|
|
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
||
|
|
RUN corepack enable && pnpm install --frozen-lockfile
|
||
|
|
COPY frontend/ ./
|
||
|
|
RUN pnpm build
|
||
|
|
|
||
|
|
FROM --platform=$BUILDPLATFORM golang:1.24 AS backend-builder
|
||
|
|
WORKDIR /app/backend
|
||
|
|
COPY backend/go.mod backend/go.sum ./
|
||
|
|
RUN go mod download
|
||
|
|
COPY backend/ ./
|
||
|
|
COPY --from=frontend-builder /app/frontend/dist ./web
|
||
|
|
ARG TARGETARCH
|
||
|
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH:-amd64} go build -trimpath -ldflags="-s -w" -o /out/shooting-event .
|
||
|
|
|
||
|
|
FROM --platform=$TARGETPLATFORM alpine:3.21
|
||
|
|
RUN addgroup -S app && adduser -S app -G app && apk add --no-cache ca-certificates
|
||
|
|
WORKDIR /app
|
||
|
|
COPY --from=backend-builder /out/shooting-event /app/shooting-event
|
||
|
|
COPY --from=backend-builder /app/backend/web /app/web
|
||
|
|
RUN mkdir -p /app/data && chown -R app:app /app
|
||
|
|
USER app
|
||
|
|
ENV PORT=8080
|
||
|
|
ENV DB_PATH=/app/data/shooting.db
|
||
|
|
ENV WEB_DIR=/app/web
|
||
|
|
EXPOSE 8080
|
||
|
|
ENTRYPOINT ["/app/shooting-event"]
|