From ce43ff014dc20bf3ed0803b9fe5413f9b427ca15 Mon Sep 17 00:00:00 2001 From: yushen Date: Mon, 30 Mar 2026 15:41:29 +0800 Subject: [PATCH] chore: add Dockerfile for Go backend Multi-stage build that compiles server, CLI, and migrate binaries, then produces a minimal Alpine runtime image. Co-Authored-By: Claude Opus 4.6 (1M context) --- Dockerfile | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2cb60ad2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# --- Build stage --- +FROM golang:1.26-alpine AS builder + +RUN apk add --no-cache git + +WORKDIR /src + +# Cache dependencies +COPY server/go.mod server/go.sum ./server/ +RUN cd server && go mod download + +# Copy server source +COPY server/ ./server/ + +# Build binaries +ARG VERSION=dev +ARG COMMIT=unknown +RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w" -o bin/server ./cmd/server +RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=${VERSION} -X main.commit=${COMMIT}" -o bin/multica ./cmd/multica +RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w" -o bin/migrate ./cmd/migrate + +# --- Runtime stage --- +FROM alpine:3.21 + +RUN apk add --no-cache ca-certificates tzdata + +WORKDIR /app + +COPY --from=builder /src/server/bin/server . +COPY --from=builder /src/server/bin/multica . +COPY --from=builder /src/server/bin/migrate . +COPY server/migrations/ ./migrations/ + +EXPOSE 8080 + +ENTRYPOINT ["./server"]