Files
sundynix-agentix/sundynix-gateway/Dockerfile
T
Blizzard 09ac03b758
deploy-132 / deploy (push) Failing after 5m35s
perf(docker): 依赖下载全部换国内源(内网构建提速)
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>
2026-07-18 16:03:45 +08:00

44 lines
2.1 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 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. 编译 Gogo: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 供 TLSLLM/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"]