Files
pos-system/services/auth-service/Dockerfile
Ho Ngoc Hai 4da46b5b8e Sure! Pl
2025-12-27 01:31:10 +07:00

52 lines
1.8 KiB
Docker

FROM node:20-alpine AS base
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app
# Builder stage
FROM base AS builder
RUN corepack enable pnpm
# Copy workspace configuration
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
# Create directory structure and copy all package.json files
RUN mkdir -p packages apps services
COPY packages/auth-sdk/package.json ./packages/auth-sdk/
COPY packages/http-client/package.json ./packages/http-client/
COPY packages/logger/package.json ./packages/logger/
COPY packages/tracing/package.json ./packages/tracing/
COPY packages/types/package.json ./packages/types/
COPY packages/config/eslint-config/package.json ./packages/config/eslint-config/
COPY packages/config/prettier-config/package.json ./packages/config/prettier-config/
COPY packages/config/tsconfig/package.json ./packages/config/tsconfig/
COPY apps/web-client/package.json ./apps/web-client/
COPY apps/web-admin/package.json ./apps/web-admin/
COPY services/auth-service/package.json ./services/auth-service/
# Install all dependencies for entire monorepo
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store \
pnpm install --frozen-lockfile
# Copy all source code
COPY packages ./packages
COPY services/auth-service ./services/auth-service
COPY turbo.json ./
# Generate Prisma client
WORKDIR /app/services/auth-service
RUN pnpm prisma generate
# Build using turbo from root (handles dependency order automatically)
WORKDIR /app
RUN pnpm turbo build --filter=auth-service
# Production stage
FROM base AS runner
ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 microservice
# Copy the entire workspace structure to preserve pnpm's node_modules layout
COPY --from=builder --chown=microservice:nodejs /app /app
WORKDIR /app/services/auth-service
USER microservice
EXPOSE 5001
CMD ["node", "dist/main.js"]