# Build context: learning_ai_invt_trdg/ (monorepo root) # --- Stage 1: Build --- FROM bytelyst-common-base-backend:latest AS builder WORKDIR /app # Copy workspace root files COPY .npmrc pnpm-workspace.yaml pnpm-lock.yaml* ./ COPY package.json ./package.json COPY backend/package.json ./backend/package.json # Install all dependencies (including devDependencies for building) RUN pnpm install --filter @bytelyst/trading-backend --ignore-scripts # Copy source COPY backend/ ./backend/ COPY shared/ ./shared/ WORKDIR /app/backend RUN pnpm run build # --- Stage 2: Production --- FROM bytelyst-common-base-backend:latest WORKDIR /app # Copy workspace root files COPY .npmrc pnpm-workspace.yaml pnpm-lock.yaml* ./ COPY package.json ./package.json COPY backend/package.json ./backend/package.json # Install production dependencies only RUN pnpm install --filter @bytelyst/trading-backend --prod --ignore-scripts RUN mkdir -p /app/node_modules && ln -s /app/backend/node_modules/@bytelyst /app/node_modules/@bytelyst # Copy built artifacts COPY --from=builder /app/backend/dist ./backend/dist # Environment ENV NODE_ENV=production # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD node -e "require('http').get('http://localhost:4018/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" RUN chown -R node:node /app USER node WORKDIR /app/backend EXPOSE 4018 CMD ["node", "dist/backend/src/bootstrap.js"]