# --- 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 ARG DATE=unknown RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=${VERSION} -X main.commit=${COMMIT}" -o bin/server ./cmd/server RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${DATE}" -o bin/multica ./cmd/multica RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w" -o bin/migrate ./cmd/migrate RUN cd server && CGO_ENABLED=0 go build -ldflags "-s -w" -o bin/backfill_task_usage_hourly ./cmd/backfill_task_usage_hourly # --- 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 --from=builder /src/server/bin/backfill_task_usage_hourly . COPY server/migrations/ ./migrations/ COPY docker/entrypoint.sh . RUN sed -i 's/\r$//' entrypoint.sh && chmod +x entrypoint.sh EXPOSE 8080 ENTRYPOINT ["./entrypoint.sh"]