# syntax=docker/dockerfile:1.7 # # Local-dev image for the backend service. Mirrors the structure of # `backend/Dockerfile` (the integration/production image) but switches # the runtime stage to alpine so docker-compose healthchecks can shell # out to `wget` and the container can run as root for Docker-socket # access without needing the production-grade nonroot guarantees. # # Build via the local-dev compose: `make -C tools/local-dev up`. The # build context is the repository root. FROM golang:1.26.2-alpine AS builder WORKDIR /src ENV CGO_ENABLED=0 GOFLAGS=-trimpath COPY pkg/calc/ ./pkg/calc/ 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/schema/ ./pkg/schema/ COPY pkg/transcoder/ ./pkg/transcoder/ COPY pkg/util/ ./pkg/util/ COPY backend/ ./backend/ # Bake the GeoIP test database into the build context so downstream # stages can copy it into the runtime image. The path is the # `MaxMind-DB` git submodule under `pkg/geoip/test-data/`; the file is # the smallest country DB MaxMind publishes and is what every other # dev-stack uses. Baking it lets dev-deploy skip the bind-mount that # fails on runner-workspace volumes the host Docker daemon cannot see. RUN mkdir -p /out/var/lib/galaxy COPY pkg/geoip/test-data/test-data/GeoIP2-Country-Test.mmdb \ /out/var/lib/galaxy/geoip.mmdb RUN <<'EOF' cat > go.work go 1.26.2 use ( ./backend ./pkg/calc ./pkg/cronutil ./pkg/error ./pkg/geoip ./pkg/model ./pkg/postgres ./pkg/schema ./pkg/transcoder ./pkg/util ) replace ( galaxy/calc v0.0.0 => ./pkg/calc 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/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 -o /out/backend ./backend/cmd/backend FROM alpine:3.20 AS runtime LABEL org.opencontainers.image.title="galaxy-backend-local-dev" RUN apk add --no-cache wget ca-certificates EXPOSE 8080 EXPOSE 8081 COPY --from=builder /out/backend /usr/local/bin/backend COPY --from=builder /out/var/lib/galaxy/geoip.mmdb /var/lib/galaxy/geoip.mmdb ENTRYPOINT ["/usr/local/bin/backend"]