From 261181b182c1b0b5fcf63f1aee8c8e6acbf5f37b Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Thu, 12 Feb 2026 23:48:18 -0800 Subject: [PATCH] feat(docker): rewrite service Dockerfiles for pnpm monorepo builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - All 4 service Dockerfiles now use repo root as build context - Multi-stage: pnpm install → build packages+service → pnpm deploy for production - docker-compose.yml updated with context: . and dockerfile paths - Added scripts/docker-prep.sh convenience wrapper - Docker build blocked by corporate proxy SSL (not a code issue) --- docker-compose.yml | 16 ++++++++--- services/billing-service/Dockerfile | 2 +- services/growth-service/Dockerfile | 42 ++++++++++++++++++++++------ services/platform-service/Dockerfile | 2 +- services/tracker-service/Dockerfile | 42 ++++++++++++++++++++++------ 5 files changed, 82 insertions(+), 22 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 42572afb..1ce1428f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -66,7 +66,9 @@ services: # ── Growth Service (Fastify + TypeScript) ─────────────────── growth-service: - build: ./services/growth-service + build: + context: . + dockerfile: services/growth-service/Dockerfile ports: - '4001:4001' env_file: @@ -91,7 +93,9 @@ services: # ── Billing Service (Fastify + TypeScript) ────────────────── billing-service: - build: ./services/billing-service + build: + context: . + dockerfile: services/billing-service/Dockerfile ports: - '4002:4002' env_file: @@ -116,7 +120,9 @@ services: # ── Platform Service (Fastify + TypeScript) ───────────────── platform-service: - build: ./services/platform-service + build: + context: . + dockerfile: services/platform-service/Dockerfile ports: - '4003:4003' env_file: @@ -141,7 +147,9 @@ services: # ── Tracker Service (Fastify + TypeScript) ────────────────── tracker-service: - build: ./services/tracker-service + build: + context: . + dockerfile: services/tracker-service/Dockerfile ports: - '4004:4004' env_file: diff --git a/services/billing-service/Dockerfile b/services/billing-service/Dockerfile index d7551a20..cfa099ba 100644 --- a/services/billing-service/Dockerfile +++ b/services/billing-service/Dockerfile @@ -1,6 +1,6 @@ # Build context: repo root (docker compose sets context: .) FROM node:22-alpine AS builder -RUN corepack enable && corepack prepare pnpm@10 --activate +RUN npm install -g pnpm@10 WORKDIR /app # Copy workspace config + lockfile for dependency resolution diff --git a/services/growth-service/Dockerfile b/services/growth-service/Dockerfile index 85387e46..e51cdbce 100644 --- a/services/growth-service/Dockerfile +++ b/services/growth-service/Dockerfile @@ -1,16 +1,42 @@ +# Build context: repo root (docker compose sets context: .) FROM node:22-alpine AS builder +RUN npm install -g pnpm@10 WORKDIR /app -COPY package.json package-lock.json* ./ -RUN npm ci -COPY tsconfig.json ./ -COPY src/ src/ -RUN npm run build +# Copy workspace config + lockfile for dependency resolution +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml tsconfig.base.json ./ + +# Copy all package.json files (pnpm needs these for workspace resolution) +COPY packages/errors/package.json packages/errors/ +COPY packages/cosmos/package.json packages/cosmos/ +COPY packages/config/package.json packages/config/ +COPY packages/auth/package.json packages/auth/ +COPY packages/api-client/package.json packages/api-client/ +COPY packages/fastify-core/package.json packages/fastify-core/ +COPY packages/logger/package.json packages/logger/ +COPY packages/react-auth/package.json packages/react-auth/ +COPY packages/design-tokens/package.json packages/design-tokens/ +COPY packages/testing/package.json packages/testing/ +COPY services/growth-service/package.json services/growth-service/ + +# Install all workspace deps +RUN pnpm install --frozen-lockfile + +# Copy source +COPY packages/ packages/ +COPY services/growth-service/tsconfig.json services/growth-service/ +COPY services/growth-service/src/ services/growth-service/src/ + +# Build packages first, then service +RUN pnpm -r --filter @lysnrai/growth-service... build + +# Deploy to isolated directory (production deps only) +RUN pnpm --filter @lysnrai/growth-service deploy /app/deploy + +# ── Production ───────────────────────────────────────────── FROM node:22-alpine WORKDIR /app -COPY package.json package-lock.json* ./ -RUN npm ci --omit=dev -COPY --from=builder /app/dist ./dist +COPY --from=builder /app/deploy ./ ENV NODE_ENV=production EXPOSE 4001 CMD ["node", "dist/server.js"] diff --git a/services/platform-service/Dockerfile b/services/platform-service/Dockerfile index 01c77758..39008145 100644 --- a/services/platform-service/Dockerfile +++ b/services/platform-service/Dockerfile @@ -1,6 +1,6 @@ # Build context: repo root (docker compose sets context: .) FROM node:22-alpine AS builder -RUN corepack enable && corepack prepare pnpm@10 --activate +RUN npm install -g pnpm@10 WORKDIR /app # Copy workspace config + lockfile for dependency resolution diff --git a/services/tracker-service/Dockerfile b/services/tracker-service/Dockerfile index f2c18aa8..59eb7b1e 100644 --- a/services/tracker-service/Dockerfile +++ b/services/tracker-service/Dockerfile @@ -1,16 +1,42 @@ +# Build context: repo root (docker compose sets context: .) FROM node:22-alpine AS builder +RUN npm install -g pnpm@10 WORKDIR /app -COPY package.json package-lock.json* ./ -RUN npm ci -COPY tsconfig.json ./ -COPY src/ src/ -RUN npm run build +# Copy workspace config + lockfile for dependency resolution +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml tsconfig.base.json ./ + +# Copy all package.json files (pnpm needs these for workspace resolution) +COPY packages/errors/package.json packages/errors/ +COPY packages/cosmos/package.json packages/cosmos/ +COPY packages/config/package.json packages/config/ +COPY packages/auth/package.json packages/auth/ +COPY packages/api-client/package.json packages/api-client/ +COPY packages/fastify-core/package.json packages/fastify-core/ +COPY packages/logger/package.json packages/logger/ +COPY packages/react-auth/package.json packages/react-auth/ +COPY packages/design-tokens/package.json packages/design-tokens/ +COPY packages/testing/package.json packages/testing/ +COPY services/tracker-service/package.json services/tracker-service/ + +# Install all workspace deps +RUN pnpm install --frozen-lockfile + +# Copy source +COPY packages/ packages/ +COPY services/tracker-service/tsconfig.json services/tracker-service/ +COPY services/tracker-service/src/ services/tracker-service/src/ + +# Build packages first, then service +RUN pnpm -r --filter @lysnrai/tracker-service... build + +# Deploy to isolated directory (production deps only) +RUN pnpm --filter @lysnrai/tracker-service deploy /app/deploy + +# ── Production ───────────────────────────────────────────── FROM node:22-alpine WORKDIR /app -COPY package.json package-lock.json* ./ -RUN npm ci --omit=dev -COPY --from=builder /app/dist ./dist +COPY --from=builder /app/deploy ./ ENV NODE_ENV=production EXPOSE 4004 CMD ["node", "dist/server.js"]