FROM node:24-alpine AS web-build WORKDIR /src/web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ ./ RUN npm run build FROM golang:1.25-alpine AS server-build WORKDIR /src/server COPY server/go.mod server/go.sum ./ RUN go mod download COPY server/ ./ RUN go test ./... RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/box-manifest-server ./cmd/box-manifest-server FROM alpine:3.22 RUN addgroup -g 10001 box-manifest \ && adduser -D -H -u 10001 -G box-manifest box-manifest \ && apk add --no-cache ca-certificates WORKDIR /app COPY --from=server-build /out/box-manifest-server ./box-manifest-server COPY --from=web-build /src/web/dist ./web RUN mkdir /data && chown box-manifest:box-manifest /data USER 10001:10001 EXPOSE 8080 VOLUME ["/data"] ENTRYPOINT ["/app/box-manifest-server"] CMD ["-address", ":8080", "-database", "/data/box-manifest.db", "-web", "/app/web"]