# syntax=docker/dockerfile:1.20.0 FROM golang:1.26.5-alpine3.23@sha256:622e56dbc11a8cfe87cafa2331e9a201877271cbff918af53d3be315f3da88cc AS builder ENV CGO_ENABLED=0 ENV GOTOOLCHAIN=local ARG CADDY_VERSION=v2.11.4 ARG GRPC_GO_VERSION=v1.82.1 ARG X_TEXT_VERSION=v0.40.0 WORKDIR /src RUN go mod init who-need-help/caddy-build \ && go get "github.com/caddyserver/caddy/v2/cmd/caddy@${CADDY_VERSION}" \ && go get "google.golang.org/grpc@${GRPC_GO_VERSION}" \ && go get "golang.org/x/text@${X_TEXT_VERSION}" \ && test "$(go list -m -f '{{.Version}}' google.golang.org/grpc)" = "$GRPC_GO_VERSION" \ && test "$(go list -m -f '{{.Version}}' golang.org/x/text)" = "$X_TEXT_VERSION" \ && go build \ -trimpath \ -ldflags="-s -w -X github.com/caddyserver/caddy/v2.CustomVersion=${CADDY_VERSION}-wnh-grpc1.82.1-xtext0.40.0" \ -o /out/caddy \ github.com/caddyserver/caddy/v2/cmd/caddy RUN mkdir -p /rootfs/data/caddy /rootfs/config/caddy /rootfs/tmp \ && chown -R 1000:1000 /rootfs FROM scratch ENV XDG_CONFIG_HOME=/config ENV XDG_DATA_HOME=/data ENV HOME=/tmp COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY --from=builder /out/caddy /usr/bin/caddy COPY --from=builder --chown=1000:1000 /rootfs/data /data COPY --from=builder --chown=1000:1000 /rootfs/config /config COPY --from=builder --chown=1000:1000 /rootfs/tmp /tmp USER 1000:1000 WORKDIR /srv EXPOSE 80 443 443/udp 2019 ENTRYPOINT ["/usr/bin/caddy"] CMD ["run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]