09ac03b758
deploy-132 / deploy (push) Failing after 5m35s
go mod download 走默认 proxy.golang.org 内网极慢。四个 Dockerfile 统一换国内镜像: - Go: GOPROXY=https://goproxy.cn,direct(三个 Go 服务) - alpine: apk 源换 mirrors.aliyun.com(ca-certificates/tzdata) - pip: mcp-py 换清华 pypi 源 - npm: gateway admin 已在用 npmmirror(此前已有) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
2.1 KiB
Docker
44 lines
2.1 KiB
Docker
# 第 2 层 业务网关。多阶段构建:node 构建 admin 控制台 → Go 编译(内嵌 admin)→ alpine 运行。
|
||
# 一个 gateway 容器同时 serve 控制台 UI + API + 供桌面端直连,无需单独 admin nginx 容器。
|
||
# 构建上下文须为「仓库根」(因 go.mod 用 replace ../sundynix-shared,且需 COPY sundynix-admin/):
|
||
# docker build -f sundynix-gateway/Dockerfile -t sundynix/gateway .
|
||
|
||
# ── 0. 构建 admin 运维控制台前端 ──
|
||
FROM node:20-alpine AS admin
|
||
WORKDIR /app
|
||
COPY sundynix-admin/package*.json ./
|
||
RUN npm config set registry https://registry.npmmirror.com && npm ci
|
||
COPY sundynix-admin/ ./
|
||
# VITE_GATEWAY 留空 → 前端走相对 /api/v1,内嵌进 gateway 后同源、免跨域。
|
||
ENV VITE_GATEWAY=""
|
||
RUN npm run build # 产物 /app/dist
|
||
|
||
# ── 1. 编译 Go(go:embed 内嵌 admin 产物)──
|
||
FROM golang:1.25-alpine AS build
|
||
WORKDIR /src
|
||
# 先拷依赖清单分层缓存(命中则跳过重下)
|
||
COPY sundynix-shared/go.mod sundynix-shared/go.sum ./sundynix-shared/
|
||
COPY sundynix-gateway/go.mod sundynix-gateway/go.sum ./sundynix-gateway/
|
||
WORKDIR /src/sundynix-gateway
|
||
ENV GOWORK=off GOFLAGS=-mod=mod GOPROXY=https://goproxy.cn,direct
|
||
RUN go mod download
|
||
# 再拷源码编译
|
||
WORKDIR /src
|
||
COPY sundynix-shared/ ./sundynix-shared/
|
||
COPY sundynix-gateway/ ./sundynix-gateway/
|
||
WORKDIR /src/sundynix-gateway
|
||
# 用真实 admin 构建产物覆盖 embed 占位目录(go:embed 从 internal/webui/admin_dist 读)
|
||
COPY --from=admin /app/dist ./internal/webui/admin_dist
|
||
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/gateway ./cmd/server
|
||
|
||
# ── 2. 运行镜像 ──
|
||
# 用 alpine 而非 gcr.io/distroless:内网 runner 连不上 gcr.io。二进制是 CGO_ENABLED=0 全静态,
|
||
# alpine 足够;ca-certificates 供 TLS(LLM/MinIO),tzdata 供时区,非 root 用户跑。
|
||
FROM alpine:3.20
|
||
RUN sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g' /etc/apk/repositories \
|
||
&& apk add --no-cache ca-certificates tzdata && adduser -D -u 10001 app
|
||
USER app
|
||
COPY --from=build /out/gateway /gateway
|
||
EXPOSE 8080
|
||
ENTRYPOINT ["/gateway"]
|