# MyClub E-shop backend Dockerfile # Separate lightweight Go build, sharing the same module and internal packages as the main backend. # Build stage ARG GO_IMAGE_TAG=1.25.8-bookworm FROM golang:${GO_IMAGE_TAG} AS builder WORKDIR /app ENV GOPROXY=https://proxy.golang.org,direct ENV GOSUMDB=sum.golang.org # Copy Go module files and download dependencies COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ go mod download && go mod verify # Copy the full source tree COPY . . # Build the dedicated eshop backend binary RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-w -s" -trimpath -o eshop-backend ./eshop/backend # Runtime stage FROM debian:bullseye-slim WORKDIR /app # Install runtime dependencies RUN --mount=type=cache,target=/var/lib/apt/lists \ --mount=type=cache,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ tzdata \ wget \ && rm -rf /var/lib/apt/lists/* # Create non-root user and required directories RUN addgroup --system app && adduser --system --ingroup app app \ && mkdir -p /app/uploads /app/cache \ && chown -R app:app /app # Copy compiled binary COPY --from=builder /app/eshop-backend ./eshop-backend ENV GIN_MODE=release USER app EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ CMD wget -q -O - http://127.0.0.1:8080/api/v1/eshop/health >/dev/null 2>&1 || exit 1 CMD ["./eshop-backend"]