diff --git a/Dockerfile b/Dockerfile index b75fc11..bdc953a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,19 @@ -FROM node:22-slim +FROM node:22-bookworm-slim -# Chrome deps +# Install Chromium (works on ARM and x86) RUN apt-get update && apt-get install -y --no-install-recommends \ - libatk1.0-0t64 libatk-bridge2.0-0t64 libcups2t64 libdrm2 \ - libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \ - libgbm1 libpango-1.0-0 libpangocairo-1.0-0 libcairo2 \ - libasound2t64 libnspr4 libnss3 fonts-liberation \ + chromium fonts-liberation \ && rm -rf /var/lib/apt/lists/* +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium + WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev COPY dist/ dist/ +COPY public/ public/ ENV PORT=3100 EXPOSE 3100 -USER node CMD ["node", "dist/index.js"] diff --git a/src/services/browser.ts b/src/services/browser.ts index 448de6b..acb831a 100644 --- a/src/services/browser.ts +++ b/src/services/browser.ts @@ -3,9 +3,11 @@ import puppeteer, { Browser, Page } from "puppeteer"; let browser: Browser | null = null; export async function initBrowser(): Promise { + const execPath = process.env.PUPPETEER_EXECUTABLE_PATH || undefined; browser = await puppeteer.launch({ headless: true, - args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu"], + executablePath: execPath, + args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--disable-dev-shm-usage"], }); console.log("Browser pool ready"); }