# Use Node.js 20 slim image FROM node:20-slim # Set working directory WORKDIR /app # 1. Install system dependencies required by Playwright (系统库变动极少,缓存命中率极高) RUN apt-get update && apt-get install -y \ libnss3 \ libnspr4 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libdrm2 \ libdbus-1-3 \ libxcb1 \ libxkbcommon0 \ libx11-6 \ libxcomposite1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libpango-1.0-0 \ libcairo2 \ libasound2 \ libatspi2.0-0 \ wget \ gnupg \ --no-install-recommends && \ rm -rf /var/lib/apt/lists/* # 2. Copy ONLY package files first (关键步骤:先只复制依赖配置文件) COPY package.json package-lock.json ./ # 3. Install npm dependencies AND Playwright browsers together # 如果 package.json 没变,这一步会直接从缓存读取,秒完成! RUN npm ci && \ npx playwright install chromium && \ npx playwright install-deps # 4. Copy platform code (最后复制代码,因为代码经常变) # 注意:确保你的 .dockerignore 文件里包含了 node_modules COPY . . # Set environment variables ENV NODE_ENV=production ENV HEADLESS=true ENV PORT=7860 # Expose port huggingface EXPOSE 7860 # Default command CMD ["npm", "run", "start:prod"]