Files
Edu/services/iam/Dockerfile
SpecialX 81a539b9ab
Some checks failed
CI / quality-ts (push) Failing after 6s
CI / quality-go (push) Failing after 25s
CI / quality-proto (push) Failing after 6s
CI / deploy (push) Has been skipped
chore(deps): 统一依赖管理 - pnpm 11 + node:22 + golang:1.25 + python:3.12 + shared-* 集中化
- Node.js 统一到 node:22-alpine,Go 统一到 golang:1.25-alpine,Python 统一到 python:3.12-slim

- pnpm 升级到 11.13.0(corepack),新增 allowBuilds 白名单解决 ERR_PNPM_IGNORED_BUILDS

- 新增 packages/shared-py 集中 Python 共享依赖,shared-ts 补充 graphql-yoga/prom-client

- api-gateway 修复 go.mod 的 shared-go 依赖 + Dockerfile 改用 repo 根作 context

- Python 服务(data-ana/ai)Dockerfile 改用 repo 根作 context + 声明 uv workspace sources

- 16 个服务的 Dockerfile + CI + docker-compose.tools.yml 全部对齐版本矩阵

- known-issues.md 沉淀 9 条 pnpm 11 / uv workspace / Go shared-go 迁移经验

- 验证:4 服务完全成功(api-gateway /healthz 200),其余 install 成功(build 失败为预存 TS 错误)
2026-07-14 12:04:49 +08:00

65 lines
2.1 KiB
Docker
Raw Permalink 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.
# Build stage
FROM node:22-alpine AS builder
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
# 复制 workspace 配置 + tsconfig 基线
COPY package.json pnpm-lock.yaml* pnpm-workspace.yaml tsconfig.base.json ./
# 移除 prepare 脚本husky 在 Docker 中不可用)
RUN node -e "const p=require('./package.json');delete p.scripts.prepare;require('fs').writeFileSync('./package.json',JSON.stringify(p,null,2))"
# 复制 shared-protogRPC proto-loader 运行时加载)
COPY packages/shared-proto ./packages/shared-proto
# 复制 shared-tsworkspace 依赖)
COPY packages/shared-ts ./packages/shared-ts
# 复制 iam 源码
COPY services/iam ./services/iam
# 安装依赖(仅 iam + shared-ts
RUN cd services/iam && pnpm install --frozen-lockfile
# 先构建 shared-tsiam 依赖 @edu/shared-ts/outbox
WORKDIR /app/packages/shared-ts
RUN pnpm build
# 构建 iam
WORKDIR /app/services/iam
RUN pnpm build
# 复制 proto 文件到 dist 旁(生产环境 ./proto/iam.proto
RUN mkdir -p /app/proto && cp /app/packages/shared-proto/proto/iam.proto /app/proto/iam.proto
# Runtime stage
FROM node:22-alpine
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
# 复制 workspace 配置 + tsconfig 基线
COPY package.json pnpm-lock.yaml* pnpm-workspace.yaml tsconfig.base.json ./
# 移除 prepare 脚本husky 在 Docker 中不可用)
RUN node -e "const p=require('./package.json');delete p.scripts.prepare;require('fs').writeFileSync('./package.json',JSON.stringify(p,null,2))"
# 复制 shared-proto + shared-ts运行时需要
COPY packages/shared-proto ./packages/shared-proto
COPY packages/shared-ts ./packages/shared-ts
# 复制 iam
COPY services/iam ./services/iam
WORKDIR /app/services/iam
RUN pnpm install --prod --frozen-lockfile
# 复制构建产物
COPY --from=builder /app/services/iam/dist ./dist
COPY --from=builder /app/packages/shared-ts/dist /app/packages/shared-ts/dist
# 复制 proto 文件(生产环境从 ./proto/ 加载)
COPY --from=builder /app/proto ./proto
EXPOSE 3002 50052
CMD ["node", "dist/main.js"]