Dockerfile.caddy
Rama main · réplica de lectura del repositorio original.
# Cross-compile on the builder's native platform: xcaddy honours GOOS/GOARCH,
# so `--platform linux/amd64,linux/arm64` works from one Dockerfile. The only
# step that runs inside the target image is the final stage's `apk upgrade`,
# which needs QEMU for arm64 (release-docker.yml sets it up).
#
# Security pins:
# - The first three --with lines are version floors. xcaddy runs `go get` once
# per --with, in order, and `go get pkg@ver` sets exactly that version, so
# they must come first: a plugin fetched after them can still raise these
# modules but never lowers them. crowdsec/pkg/apiclient @v1.7.8 lifts
# CrowdSec past CVE-2026-44982, x/net/http2 @v0.61.0 lifts golang.org/x/net
# past CVE-2026-78669, and chi/v5 @v5.4.0 lifts go-chi past CVE-2026-114437.
# Caddy already links these packages, so the blank import xcaddy adds for
# each changes nothing else. The build fails if `go get` ever reports a
# downgrade, so a pin can't quietly pull a plugin back to an older release.
# - caddy-crowdsec-bouncer @bdd7e516 is an exact pin: the upstream commit that
# supports CrowdSec 1.7. v0.14.1, the newest tag, needs CrowdSec 1.6; the
# commit's only code change since then is that fix. Go back to a tag once
# one exists.
FROM --platform=$BUILDPLATFORM caddy:2.11.7-builder AS builder
ARG TARGETOS=linux
ARG TARGETARCH
RUN set -o pipefail && GOOS=${TARGETOS} GOARCH=${TARGETARCH} xcaddy build \
--with github.com/crowdsecurity/crowdsec/pkg/apiclient@v1.7.8 \
--with golang.org/x/net/http2@v0.61.0 \
--with github.com/go-chi/chi/v5@v5.4.0 \
--with github.com/caddy-dns/cloudflare \
--with github.com/caddy-dns/porkbun \
--with github.com/caddy-dns/namecheap \
--with github.com/caddy-dns/godaddy \
--with github.com/caddy-dns/digitalocean \
--with github.com/caddy-dns/hetzner/v2 \
--with github.com/caddy-dns/route53@v1.6.2 \
--with github.com/caddy-dns/gandi \
--with github.com/hslatman/caddy-crowdsec-bouncer/http@bdd7e516ec46fede2321a99d62ba63f9b9ebd857 \
--with github.com/mholt/caddy-ratelimit \
--with github.com/mholt/caddy-l4 \
--with github.com/corazawaf/coraza-caddy/v2 \
2>&1 | tee /tmp/xcaddy.log \
&& if grep 'go: downgraded' /tmp/xcaddy.log; then echo 'a pin downgraded a module' >&2; exit 1; fi
FROM caddy:2.11.7-alpine
# The caddy base image only gets Alpine fixes when it is rebuilt upstream;
# upgrade here so this image ships them (e.g. brotli-libs 1.2.1, CVE-2026-111497).
RUN apk upgrade --no-cache
COPY --from=builder /usr/bin/caddy /usr/bin/caddy