# Multi-stage build yang lebih optimal FROM golang:1.25-alpine AS build # Install build dependencies RUN apk add --no-cache git ca-certificates tzdata WORKDIR /build # Cache go mod dependencies COPY go.mod go.sum ./ RUN go mod download && go mod verify # Copy source code COPY . . # Build dengan optimasi RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -a -installsuffix cgo \ -ldflags='-w -s -extldflags "-static"' \ -o main cmd/api/main.go # Final stage - menggunakan tag :debug-nonroot agar memiliki akses shell (BusyBox) FROM gcr.io/distroless/static:debug-nonroot WORKDIR /app ENV TZ="Asia/Jakarta" # Tambahkan /busybox ke dalam PATH agar command 'sh' bisa langsung dijalankan ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/busybox" # Copy timezone data COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo # Copy binary COPY --from=build /build/main /app/main # Pastikan folder logs dan data ada agar aplikasi tidak error saat menulis (opsional tapi disarankan) # COPY --from=build --chown=nonroot:nonroot /build/logs /app/logs # COPY --from=build --chown=nonroot:nonroot /build/data /app/data # Use non-root user USER nonroot:nonroot EXPOSE 8198 ENTRYPOINT ["/app/main"]