# Load nodego image FROM maronato/nodego:1.0 as builder WORKDIR /go/src/app # Set our build environment ENV GOPATH=/go ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH ENV GOCACHE=/tmp/.go-build-cache # This variable communicates to the service that it's running inside # a docker container. ENV ENV_DOCKER=true # Copy dockerignore files COPY .dockerignore ./ # Install go deps using the cache COPY go.mod go.sum ./ RUN --mount=type=cache,target=/tmp/.go-build-cache \ go mod download -x # Install node deps COPY frontend/package.json frontend/package-lock.json frontend/ RUN npm config set cache /tmp/.npm-cache --global RUN --mount=type=cache,target=/tmp/.npm-cache \ npm ci --prefix frontend # Build the frontend COPY frontend frontend RUN VITE_API_URL=/api npm run --prefix frontend build # Build backend COPY goshort.go ./ COPY cmd cmd COPY internal internal # Build the backend RUN --mount=type=cache,target=/tmp/.go-build-cache \ CGO_ENABLED=0 go build -o goshort goshort.go # Now create a new image with just the binary FROM gcr.io/distroless/static-debian11:nonroot WORKDIR /app # Set our runtime environment ENV ENV_DOCKER=true ENV GOSHORT_PROD=true COPY --from=builder /go/src/app/goshort /usr/local/bin/goshort HEALTHCHECK CMD [ "goshort", "healthcheck" ] EXPOSE 8080 ENTRYPOINT [ "goshort" ] CMD [ "serve" ]