| # -------- STAGE 1: Builder (full environment with Node + Bun) -------- | |
| FROM node:latest AS builder | |
| RUN npm install -g bun | |
| WORKDIR /app | |
| COPY package.json ./ | |
| RUN bun install --production | |
| # Copy project files | |
| COPY . . | |
| # -------- STAGE 2: Runtime (playwright environment) -------- | |
| FROM mcr.microsoft.com/playwright:v1.58.2-noble | |
| USER root | |
| RUN npm install -g bun | |
| WORKDIR /app | |
| COPY --from=builder /app ./ | |
| RUN chown -R pwuser:pwuser /app | |
| USER pwuser | |
| RUN npx puppeteer browsers install chrome | |
| RUN npx puppeteer browsers install chrome-headless-shell | |
| ENV APP_ENV="prod" | |
| ENV NODE_ENV=production | |
| ENV PORT=7860 | |
| EXPOSE 7860 | |
| # Run prebuilt output | |
| CMD ["bun", "run", "start:prod:tsdown"] | |