# ── 1. 构建前端(web 用户端 + admin 管理端)── FROM node:20-alpine AS web WORKDIR /app/web COPY web/package*.json ./ RUN npm config set registry https://registry.npmmirror.com && npm ci COPY web/ ./ RUN npm run build FROM node:20-alpine AS admin WORKDIR /app/admin COPY admin/package*.json ./ RUN npm config set registry https://registry.npmmirror.com && npm ci COPY admin/ ./ RUN npm run build # ── 2. 编译 Go(embed 两份前端产物)── FROM golang:1.26-alpine AS server WORKDIR /app/server ENV GOPROXY=https://goproxy.cn,direct COPY server/go.mod server/go.sum ./ RUN go mod download COPY server/ ./ # 用真实构建产物替换 embed 占位目录 COPY --from=web /app/web/dist ./internal/webfs/dist COPY --from=admin /app/admin/dist ./internal/webfs/admin_dist RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" \ -o /sundynix-site ./cmd # ── 3. 运行镜像 ── FROM alpine:3.20 RUN apk add --no-cache ca-certificates tzdata && \ adduser -D -u 10001 app ENV TZ=Asia/Shanghai COPY --from=server /sundynix-site /usr/local/bin/sundynix-site USER app EXPOSE 8090 ENTRYPOINT ["/usr/local/bin/sundynix-site"]