From 589cb18f8c72b83f2c40064f263bfe35a752d298 Mon Sep 17 00:00:00 2001 From: Dicken Date: Fri, 12 Jun 2026 11:06:00 +0200 Subject: [PATCH] fix: Puppeteer nutzt System-Chromium direkt, kein @sparticuz --- backend/package.json | 5 ++- backend/src/tools/paywallkiller/routes.js | 40 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/backend/package.json b/backend/package.json index 457055b..f1d10d5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,7 +8,6 @@ "express": "^4.18.2", "jsonwebtoken": "^9.0.2", "multer": "^1.4.5-lts.1", - "puppeteer-core": "^22.0.0", - "@sparticuz/chromium": "^123.0.0" + "puppeteer-core": "^22.0.0" } -} +} \ No newline at end of file diff --git a/backend/src/tools/paywallkiller/routes.js b/backend/src/tools/paywallkiller/routes.js index 7c391fb..f430cf7 100644 --- a/backend/src/tools/paywallkiller/routes.js +++ b/backend/src/tools/paywallkiller/routes.js @@ -174,17 +174,39 @@ router.post('/pdf', authenticate, async (req, res) => { const tmpFile = path.join('/tmp', `pwk_${crypto.randomBytes(8).toString('hex')}.pdf`); try { - let puppeteer, chromium; - try { puppeteer = require('puppeteer-core'); chromium = require('@sparticuz/chromium'); } - catch { try { puppeteer = require('puppeteer'); chromium = null; } + let puppeteer; + try { puppeteer = require('puppeteer-core'); } + catch { try { puppeteer = require('puppeteer'); } catch { return res.status(500).json({ error: 'PDF-Rendering nicht verfügbar' }); } } - const launchOptions = chromium - ? { args: [...chromium.args, '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'], - defaultViewport: { width: 1280, height: 900 }, - executablePath: process.env.CHROMIUM_PATH || await chromium.executablePath(), - headless: true } - : { headless: 'new', args: ['--no-sandbox', '--disable-setuid-sandbox'] }; + // System-Chromium aus Alpine nutzen (via CHROMIUM_PATH env oder bekannte Pfade) + const executablePath = process.env.CHROMIUM_PATH + || (() => { + const candidates = [ + '/usr/bin/chromium-browser', + '/usr/bin/chromium', + '/usr/bin/google-chrome', + '/usr/bin/google-chrome-stable', + ]; + const fs2 = require('fs'); + return candidates.find(p => { try { fs2.accessSync(p); return true; } catch { return false; } }) + || '/usr/bin/chromium-browser'; + })(); + + const launchOptions = { + executablePath, + headless: true, + args: [ + '--no-sandbox', + '--disable-setuid-sandbox', + '--disable-dev-shm-usage', + '--disable-gpu', + '--disable-software-rasterizer', + '--single-process', + '--no-zygote', + ], + defaultViewport: { width: 1280, height: 900 }, + }; browser = await puppeteer.launch(launchOptions); const page = await browser.newPage();