# Context: project root # docker build -f server/Dockerfile -t containarr-server . # ── Stage 1 : build SvelteKit ───────────────────────────────────────────────── FROM node:20-alpine AS web-builder WORKDIR /web COPY web/package*.json ./ RUN npm ci COPY web/ ./ RUN npm run build # Output: /web/build/ # ── Stage 2 : build Go server ───────────────────────────────────────────────── FROM golang:1.23-alpine AS go-builder RUN apk add --no-cache gcc musl-dev WORKDIR /src COPY server/go.mod server/go.sum ./ RUN go mod download COPY server/ ./ RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-s -w" -o /bin/containarr-server ./cmd/server # ── Stage 3 : image finale ──────────────────────────────────────────────────── FROM alpine:3.20 RUN apk add --no-cache ca-certificates tzdata WORKDIR /app COPY --from=go-builder /bin/containarr-server ./containarr-server COPY --from=web-builder /web/build ./web/build VOLUME ["/data"] EXPOSE 8080 9090 ENTRYPOINT ["/app/containarr-server"]