# Use latest Node.js LTS Alpine image (updated for security) FROM node:20-alpine WORKDIR /app # Install system dependencies RUN apk add --no-cache openssl curl python3 make g++ # Install pnpm RUN npm install -g pnpm # Copy package files COPY package.json pnpm-lock.yaml* ./ # Install all dependencies RUN pnpm install --frozen-lockfile # Copy Prisma schema COPY prisma ./prisma/ # Generate Prisma client RUN pnpm prisma generate # Copy source code and build COPY . . RUN pnpm build # Remove dev dependencies to reduce image size RUN pnpm prune --prod # Create uploads directory RUN mkdir -p /app/uploads # Set environment variables ENV NODE_ENV=production ENV PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1 # Expose port EXPOSE 3001 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3001/api/health || exit 1 # Start the application CMD ["pnpm", "start"]