a5fd251fc0
此前应用服务只是本机裸二进制、无 Dockerfile、无法交付。本提交把项目从"只能在我笔记本 跑"变成"任何人一条命令起一整套",是「演示 / 拉投资 / 卖给客户独立部署」的可交付基础。 - Dockerfile ×5:gateway/dispatcher/mcp-go 多阶段(distroless static, 36–55MB); mcp-py(python-slim, 268MB);admin(node 构建→nginx 托管 SPA + 反代 /api,76MB)。 Go 构建上下文为仓库根以兜住 replace ../sundynix-shared;.dockerignore 瘦上下文。 - docker-compose.prod.yml:应用 + 基建一把起;经服务名互连(顺带避开 localhost DNS 坑); 基建端口不对宿主暴露;depends_on 健康检查保序(mcp-go 待 Milvus healthy); APP_ENV=production 强制密钥校验 + 锁 CORS + 管理员白名单。 - .env.example + DEPLOY.md:两类密钥分层(引导密钥走 .env,模型 key 控制台加密存库); 首次管理员流程;安全建议。LICENSE 专有(授权模型可后定)。 - scripts/backup.sh + restore.sh:PG 逻辑备份 + 各数据卷快照 / 恢复。 - .gitignore 挡 .env*(密钥不入库)。 live:5 镜像全构建通过;独立 project 起整套 → nginx→gateway→NATS→dispatcher→mcp 全链路 注册+提任务 running→done,depends_on 保序生效。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 lines
971 B
Docker
23 lines
971 B
Docker
# 第 2 层 业务网关。多阶段构建:编译静态二进制 → distroless 最小运行镜像。
|
|
# 构建上下文须为「仓库根」(因 go.mod 用 replace ../sundynix-shared 引本地共享模块):
|
|
# docker build -f sundynix-gateway/Dockerfile -t sundynix/gateway .
|
|
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
|
|
RUN go mod download
|
|
# 再拷源码编译
|
|
WORKDIR /src
|
|
COPY sundynix-shared/ ./sundynix-shared/
|
|
COPY sundynix-gateway/ ./sundynix-gateway/
|
|
WORKDIR /src/sundynix-gateway
|
|
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/gateway ./cmd/server
|
|
|
|
FROM gcr.io/distroless/static-debian12:nonroot
|
|
COPY --from=build /out/gateway /gateway
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/gateway"]
|