From d48bd3acb97934d856416edad5f3c64897bfe088 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 19 Feb 2026 19:00:27 -0800 Subject: [PATCH] =?UTF-8?q?feat(docker):=20=E9=87=8D=E6=9E=84Monorepo?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=20=E2=80=94=20=E6=94=AF=E6=8C=81@genex/commo?= =?UTF-8?q?n=E5=85=B1=E4=BA=AB=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker-compose.yml build context从service目录改为backend根目录 - 所有NestJS Dockerfile改为先构建共享@genex/common包 - 共享包编译后复制到service的node_modules供运行时解析 - 新增backend/.dockerignore减少构建上下文体积 Co-Authored-By: Claude Opus 4.6 --- backend/.dockerignore | 21 +++++++++++ backend/docker-compose.yml | 36 +++++++++---------- backend/services/admin-service/Dockerfile | 26 +++++++++++--- backend/services/ai-service/Dockerfile | 26 +++++++++++--- backend/services/auth-service/Dockerfile | 26 +++++++++++--- backend/services/clearing-service/Dockerfile | 26 +++++++++++--- .../services/compliance-service/Dockerfile | 26 +++++++++++--- backend/services/issuer-service/Dockerfile | 26 +++++++++++--- .../services/notification-service/Dockerfile | 26 +++++++++++--- backend/services/telemetry-service/Dockerfile | 26 +++++++++++--- backend/services/user-service/Dockerfile | 27 ++++++++++---- 11 files changed, 228 insertions(+), 64 deletions(-) create mode 100644 backend/.dockerignore diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..e26e9cd --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,21 @@ +# Node +**/node_modules +**/dist +**/.env + +# Infrastructure (not needed for service builds) +migrations/ +seeds/ +kong/ + +# Scripts +deploy.sh +**/deploy.sh + +# Git +.git +.gitignore + +# Go service build artifacts +**/tmp +**/*.exe diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index 084e822..21625cf 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -203,8 +203,8 @@ services: user-service: build: - context: ./services/user-service - dockerfile: Dockerfile + context: . + dockerfile: services/user-service/Dockerfile container_name: genex-user-service ports: - "3001:3001" @@ -235,8 +235,8 @@ services: issuer-service: build: - context: ./services/issuer-service - dockerfile: Dockerfile + context: . + dockerfile: services/issuer-service/Dockerfile container_name: genex-issuer-service ports: - "3002:3002" @@ -264,8 +264,8 @@ services: clearing-service: build: - context: ./services/clearing-service - dockerfile: Dockerfile + context: . + dockerfile: services/clearing-service/Dockerfile container_name: genex-clearing-service ports: - "3004:3004" @@ -289,8 +289,8 @@ services: compliance-service: build: - context: ./services/compliance-service - dockerfile: Dockerfile + context: . + dockerfile: services/compliance-service/Dockerfile container_name: genex-compliance-service ports: - "3005:3005" @@ -314,8 +314,8 @@ services: notification-service: build: - context: ./services/notification-service - dockerfile: Dockerfile + context: . + dockerfile: services/notification-service/Dockerfile container_name: genex-notification-service ports: - "3008:3008" @@ -342,8 +342,8 @@ services: telemetry-service: build: - context: ./services/telemetry-service - dockerfile: Dockerfile + context: . + dockerfile: services/telemetry-service/Dockerfile container_name: genex-telemetry-service ports: - "3011:3011" @@ -376,8 +376,8 @@ services: admin-service: build: - context: ./services/admin-service - dockerfile: Dockerfile + context: . + dockerfile: services/admin-service/Dockerfile container_name: genex-admin-service ports: - "3012:3012" @@ -484,8 +484,8 @@ services: auth-service: build: - context: ./services/auth-service - dockerfile: Dockerfile + context: . + dockerfile: services/auth-service/Dockerfile container_name: genex-auth-service ports: - "3010:3010" @@ -521,8 +521,8 @@ services: ai-service: build: - context: ./services/ai-service - dockerfile: Dockerfile + context: . + dockerfile: services/ai-service/Dockerfile container_name: genex-ai-service ports: - "3006:3006" diff --git a/backend/services/admin-service/Dockerfile b/backend/services/admin-service/Dockerfile index fc538e0..f98dc1c 100644 --- a/backend/services/admin-service/Dockerfile +++ b/backend/services/admin-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/admin-service/package*.json ./services/admin-service/ +WORKDIR /app/services/admin-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/admin-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/admin-service/dist ./dist +COPY --from=builder /app/services/admin-service/node_modules ./node_modules +COPY --from=builder /app/services/admin-service/package.json ./ USER node EXPOSE 3012 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/ai-service/Dockerfile b/backend/services/ai-service/Dockerfile index 7daca7a..8bb1bf4 100644 --- a/backend/services/ai-service/Dockerfile +++ b/backend/services/ai-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/ai-service/package*.json ./services/ai-service/ +WORKDIR /app/services/ai-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/ai-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/ai-service/dist ./dist +COPY --from=builder /app/services/ai-service/node_modules ./node_modules +COPY --from=builder /app/services/ai-service/package.json ./ USER node EXPOSE 3006 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/auth-service/Dockerfile b/backend/services/auth-service/Dockerfile index 34fbb47..fed004d 100644 --- a/backend/services/auth-service/Dockerfile +++ b/backend/services/auth-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/auth-service/package*.json ./services/auth-service/ +WORKDIR /app/services/auth-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/auth-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/auth-service/dist ./dist +COPY --from=builder /app/services/auth-service/node_modules ./node_modules +COPY --from=builder /app/services/auth-service/package.json ./ USER node EXPOSE 3010 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/clearing-service/Dockerfile b/backend/services/clearing-service/Dockerfile index d60f61c..ba04882 100644 --- a/backend/services/clearing-service/Dockerfile +++ b/backend/services/clearing-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/clearing-service/package*.json ./services/clearing-service/ +WORKDIR /app/services/clearing-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/clearing-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/clearing-service/dist ./dist +COPY --from=builder /app/services/clearing-service/node_modules ./node_modules +COPY --from=builder /app/services/clearing-service/package.json ./ USER node EXPOSE 3004 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/compliance-service/Dockerfile b/backend/services/compliance-service/Dockerfile index afdc773..1afa173 100644 --- a/backend/services/compliance-service/Dockerfile +++ b/backend/services/compliance-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/compliance-service/package*.json ./services/compliance-service/ +WORKDIR /app/services/compliance-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/compliance-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/compliance-service/dist ./dist +COPY --from=builder /app/services/compliance-service/node_modules ./node_modules +COPY --from=builder /app/services/compliance-service/package.json ./ USER node EXPOSE 3005 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/issuer-service/Dockerfile b/backend/services/issuer-service/Dockerfile index 2c05831..4defb44 100644 --- a/backend/services/issuer-service/Dockerfile +++ b/backend/services/issuer-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/issuer-service/package*.json ./services/issuer-service/ +WORKDIR /app/services/issuer-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/issuer-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/issuer-service/dist ./dist +COPY --from=builder /app/services/issuer-service/node_modules ./node_modules +COPY --from=builder /app/services/issuer-service/package.json ./ USER node EXPOSE 3002 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/notification-service/Dockerfile b/backend/services/notification-service/Dockerfile index 5d515bd..a840482 100644 --- a/backend/services/notification-service/Dockerfile +++ b/backend/services/notification-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/notification-service/package*.json ./services/notification-service/ +WORKDIR /app/services/notification-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/notification-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/notification-service/dist ./dist +COPY --from=builder /app/services/notification-service/node_modules ./node_modules +COPY --from=builder /app/services/notification-service/package.json ./ USER node EXPOSE 3008 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/telemetry-service/Dockerfile b/backend/services/telemetry-service/Dockerfile index b1d80d1..d88d2fc 100644 --- a/backend/services/telemetry-service/Dockerfile +++ b/backend/services/telemetry-service/Dockerfile @@ -1,16 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/telemetry-service/package*.json ./services/telemetry-service/ +WORKDIR /app/services/telemetry-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/telemetry-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/telemetry-service/dist ./dist +COPY --from=builder /app/services/telemetry-service/node_modules ./node_modules +COPY --from=builder /app/services/telemetry-service/package.json ./ USER node EXPOSE 3011 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/user-service/Dockerfile b/backend/services/user-service/Dockerfile index ab6a0d9..551d5de 100644 --- a/backend/services/user-service/Dockerfile +++ b/backend/services/user-service/Dockerfile @@ -1,17 +1,32 @@ FROM node:20-alpine AS builder WORKDIR /app -COPY package*.json ./ + +# Build shared @genex/common package +COPY packages/common/package*.json ./packages/common/ +RUN cd packages/common && npm install +COPY packages/common/ ./packages/common/ +RUN cd packages/common && npm run build + +# Install service dependencies +COPY services/user-service/package*.json ./services/user-service/ +WORKDIR /app/services/user-service RUN npm install -COPY . . + +# Copy common package into node_modules for runtime resolution +RUN mkdir -p node_modules/@genex/common && \ + cp -r /app/packages/common/dist node_modules/@genex/common/ && \ + cp /app/packages/common/package.json node_modules/@genex/common/ + +# Copy service source and build +COPY services/user-service/ ./ RUN npm run build FROM node:20-alpine WORKDIR /app RUN apk add --no-cache dumb-init -COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/services/user-service/dist ./dist +COPY --from=builder /app/services/user-service/node_modules ./node_modules +COPY --from=builder /app/services/user-service/package.json ./ USER node EXPOSE 3001 -# Graceful shutdown: dumb-init forwards signals properly CMD ["dumb-init", "node", "dist/main"]