# syntax=docker/dockerfile:1.7 # Build context is the workspace root (galaxy/), not the gateway/ # subdirectory, because the gateway module pulls galaxy/{backend,model, # redisconn,transcoder} through the go.work replace directives. Build # with: # # docker build -t galaxy/gateway:integration -f gateway/Dockerfile . FROM golang:1.26.2-alpine AS builder WORKDIR /src ENV CGO_ENABLED=0 GOFLAGS=-trimpath # galaxy/backend is needed only for proto/push/v1 (gRPC client of the # backend Push.SubscribePush stream). Its other packages are not # reachable from the gateway main and are not compiled. COPY pkg/cronutil/ ./pkg/cronutil/ COPY pkg/error/ ./pkg/error/ COPY pkg/geoip/ ./pkg/geoip/ COPY pkg/model/ ./pkg/model/ COPY pkg/postgres/ ./pkg/postgres/ COPY pkg/redisconn/ ./pkg/redisconn/ COPY pkg/schema/ ./pkg/schema/ COPY pkg/transcoder/ ./pkg/transcoder/ COPY pkg/util/ ./pkg/util/ COPY backend/ ./backend/ COPY gateway/ ./gateway/ RUN <<'EOF' cat > go.work go 1.26.2 use ( ./backend ./gateway ./pkg/cronutil ./pkg/error ./pkg/geoip ./pkg/model ./pkg/postgres ./pkg/redisconn ./pkg/schema ./pkg/transcoder ./pkg/util ) replace ( galaxy/cronutil v0.0.0 => ./pkg/cronutil galaxy/error v0.0.0 => ./pkg/error galaxy/geoip v0.0.0 => ./pkg/geoip galaxy/model v0.0.0 => ./pkg/model galaxy/postgres v0.0.0 => ./pkg/postgres galaxy/redisconn v0.0.0 => ./pkg/redisconn galaxy/schema v0.0.0 => ./pkg/schema galaxy/transcoder v0.0.0 => ./pkg/transcoder galaxy/util v0.0.0 => ./pkg/util ) EOF RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ go build -ldflags="-s -w" -o /out/gateway ./gateway/cmd/gateway FROM gcr.io/distroless/static-debian12:nonroot AS runtime LABEL org.opencontainers.image.title="galaxy-gateway" EXPOSE 8080 EXPOSE 9100 USER nonroot:nonroot COPY --from=builder /out/gateway /usr/local/bin/gateway ENTRYPOINT ["/usr/local/bin/gateway"]