From 8b1a1e23bf5040be5e637ffce080a86e0863db56 Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 30 Nov 2025 16:40:29 -0500 Subject: [PATCH] Fix Puppeteer Chrome launch in Alpine Linux Docker - Install Chromium and required system libraries (nss, freetype, harfbuzz, etc.) - Set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD to use system Chromium - Add additional Chrome args for better compatibility in container - Configure package.json to skip Chromium download - Fixes 'Failed to launch the browser process' error --- docker/resume/Dockerfile | 18 ++++++++++++++++-- docker/resume/generate-pdfs.js | 13 ++++++++++++- docker/resume/package.json | 3 +++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/docker/resume/Dockerfile b/docker/resume/Dockerfile index 53c75e3..ab7abce 100644 --- a/docker/resume/Dockerfile +++ b/docker/resume/Dockerfile @@ -1,7 +1,21 @@ FROM caddy:2.7-alpine -# Install dependencies -RUN apk add --no-cache nodejs npm bash +# Install dependencies including Chromium and required libraries for Puppeteer +RUN apk add --no-cache \ + nodejs \ + npm \ + bash \ + chromium \ + nss \ + freetype \ + freetype-dev \ + harfbuzz \ + ca-certificates \ + ttf-freefont + +# Set Puppeteer to use system Chromium +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # Set working directory WORKDIR /srv diff --git a/docker/resume/generate-pdfs.js b/docker/resume/generate-pdfs.js index b97261c..b3acf67 100644 --- a/docker/resume/generate-pdfs.js +++ b/docker/resume/generate-pdfs.js @@ -174,9 +174,20 @@ async function main() { console.log(`Local server started on port ${PORT}\n`); // Launch browser + // Use system Chromium if available (in Docker), otherwise use Puppeteer's bundled Chrome const browser = await puppeteer.launch({ headless: 'new', - args: ['--no-sandbox', '--disable-setuid-sandbox'] + executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined, + args: [ + '--no-sandbox', + '--disable-setuid-sandbox', + '--disable-dev-shm-usage', + '--disable-accelerated-2d-canvas', + '--no-first-run', + '--no-zygote', + '--single-process', + '--disable-gpu' + ] }); try { diff --git a/docker/resume/package.json b/docker/resume/package.json index 759fbf3..09b9d6b 100644 --- a/docker/resume/package.json +++ b/docker/resume/package.json @@ -12,5 +12,8 @@ "description": "", "dependencies": { "puppeteer": "^21.0.0" + }, + "puppeteer": { + "skipChromiumDownload": true } }