# ========= Stage 1: (可选)你的前端静态资源构建 ========= FROM node:lts-alpine AS ui-builder WORKDIR /src COPY headscale-ui/package*.json ./ RUN npm ci COPY headscale-ui/ . RUN npm run build # ========= Stage 2: 用 Go 1.25 (Alpine) 构建 Caddy + 插件 ========= FROM golang:1.25.0-alpine3.22 AS caddy-builder RUN echo "https://mirrors.aliyun.com/alpine/v3.22/main" > /etc/apk/repositories && \ echo "https://mirrors.aliyun.com/alpine/v3.22/community" >> /etc/apk/repositories && \ apk update && \ apk add --no-cache git build-base ca-certificates ENV GOPROXY=https://goproxy.cn,direct ENV GOTOOLCHAIN=local RUN go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest # 用 xcaddy 构建 (保持与用户提供版本一致/可调整) RUN /go/bin/xcaddy build v2.10.1 \ --output /usr/local/bin/caddy \ --with github.com/caddy-dns/alidns@v1.0.26 \ --with github.com/caddy-dns/cloudflare@v0.2.1 \ --with github.com/mholt/caddy-l4 # ========= Stage 3: 运行时镜像(Alpine) ========= FROM caddy:2.10.0-alpine COPY --from=caddy-builder /usr/local/bin/caddy /usr/bin/caddy COPY --from=ui-builder /src/build /usr/src/www RUN apk update && \ apk add --no-cache bind-tools netcat-openbsd jq curl && \ mkdir -p /data/log/headscale