From 1485c9cf9b4ee29586186f81c9f4f976fabfb685 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sun, 29 Sep 2024 01:41:01 +0800 Subject: [PATCH 01/10] chore: docker add puppeteer support --- Dockerfile | 11 ++++++++++- docker-compose.yml | 3 +++ src/server/utils/env.ts | 1 + src/server/utils/screenshot/website.ts | 5 ++++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 659df1643..b094ed25c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ COPY ./reporter/ ./reporter/ RUN apt update RUN cd reporter && go build . -# # Base ------------------------------ +# Base ------------------------------ FROM node:20-alpine AS base RUN npm install -g pnpm@9.7.1 @@ -32,6 +32,15 @@ RUN pnpm build:static FROM base AS app WORKDIR /app/tianji +# We don't need the standalone Chromium +ENV PUPPETEER_SKIP_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser + +RUN apk add --no-cache \ + udev \ + ttf-freefont \ + chromium + COPY . . RUN pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false diff --git a/docker-compose.yml b/docker-compose.yml index 6adf13648..95e90c8ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,9 @@ version: '3' services: tianji: image: moonrailgun/tianji + build: + context: ./ + dockerfile: ./Dockerfile ports: - "12345:12345" environment: diff --git a/src/server/utils/env.ts b/src/server/utils/env.ts index 2544cb36c..99f2b3bb4 100644 --- a/src/server/utils/env.ts +++ b/src/server/utils/env.ts @@ -52,6 +52,7 @@ export const env = { sandboxMemoryLimit: process.env.SANDBOX_MEMORY_LIMIT ? Number(process.env.SANDBOX_MEMORY_LIMIT) : 16, // unit: MB + puppeteerExecutablePath: process.env.PUPPETEER_EXECUTABLE_PATH, dbDebug: checkEnvTrusty(process.env.DB_DEBUG), amapToken: process.env.AMAP_TOKEN, mapboxToken: process.env.MAPBOX_TOKEN, diff --git a/src/server/utils/screenshot/website.ts b/src/server/utils/screenshot/website.ts index a03e5b977..97689fc5e 100644 --- a/src/server/utils/screenshot/website.ts +++ b/src/server/utils/screenshot/website.ts @@ -10,7 +10,10 @@ export async function screenshotWebsiteDetailImage( websiteId: string, userId: string ) { - const browser = await puppeteer.launch({ headless: 'new' }); + const browser = await puppeteer.launch({ + executablePath: env.puppeteerExecutablePath, + headless: 'new', + }); const page = await browser.newPage(); try { const jwt = jwtSign({ From 90ec6c2fcdac46bf534fe37cf4a6526af299a877 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sun, 29 Sep 2024 23:39:28 +0800 Subject: [PATCH 02/10] refactor: add no sandbox args in puppeteer --- src/server/utils/screenshot/lighthouse.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/utils/screenshot/lighthouse.ts b/src/server/utils/screenshot/lighthouse.ts index f6332225d..4ee484277 100644 --- a/src/server/utils/screenshot/lighthouse.ts +++ b/src/server/utils/screenshot/lighthouse.ts @@ -8,6 +8,7 @@ export async function generateLighthouse(url: string): Promise { const browser = await puppeteer.launch({ // Set to false if you want to see the script in action. headless: 'new', + args: ['--no-sandbox'], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], }); From a981e224c1ff14a0756615916ba6e2b9df210863 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 14:48:24 +0800 Subject: [PATCH 03/10] chore: improve docker build and lighthouse config --- Dockerfile | 1 + src/server/utils/screenshot/lighthouse.ts | 40 +++++++++++++---------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index b094ed25c..4c37b721b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,6 +35,7 @@ WORKDIR /app/tianji # We don't need the standalone Chromium ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser +ENV DEBUG=puppeteer:* RUN apk add --no-cache \ udev \ diff --git a/src/server/utils/screenshot/lighthouse.ts b/src/server/utils/screenshot/lighthouse.ts index 4ee484277..2bce40bac 100644 --- a/src/server/utils/screenshot/lighthouse.ts +++ b/src/server/utils/screenshot/lighthouse.ts @@ -8,31 +8,37 @@ export async function generateLighthouse(url: string): Promise { const browser = await puppeteer.launch({ // Set to false if you want to see the script in action. headless: 'new', - args: ['--no-sandbox'], + args: ['--no-sandbox', '--single-process'], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], + dumpio: true, }); - const page = await browser.newPage(); - // Wait for Lighthouse to open url, then inject our stylesheet. - browser.on('targetchanged', async (target) => { - if (page && page.url() === url) { - await page.addStyleTag({ content: '* {color: red}' }); - } - }); + try { + const page = await browser.newPage(); - // Lighthouse will open the URL. - // Puppeteer will observe `targetchanged` and inject our stylesheet. - const res = await lighthouse(url, undefined, undefined, page); - if (!res) { - throw new Error('Lighthouse failed to generate report'); - } + // Wait for Lighthouse to open url, then inject our stylesheet. + browser.on('targetchanged', async (target) => { + if (page && page.url() === url) { + await page.addStyleTag({ content: '* {color: red}' }); + } + }); - const { lhr } = res; + // Lighthouse will open the URL. + // Puppeteer will observe `targetchanged` and inject our stylesheet. + const res = await lighthouse(url, undefined, undefined, page); + if (!res) { + throw new Error('Lighthouse failed to generate report'); + } + + page.close({ runBeforeUnload: false }); - await browser.close(); + const { lhr } = res; - return lhr; + return lhr; + } finally { + await browser.close(); + } } export function getLighthouseReport(lhr: Result): string { From 0413ade74223f8e6c1ae16df5c598149d40bbdc6 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 17:21:11 +0800 Subject: [PATCH 04/10] chore: downgrade alpine version to 3.19 to avoid issue --- Dockerfile | 12 ++++++++---- src/server/utils/screenshot/lighthouse.ts | 7 ++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4c37b721b..c6fb51cd6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,8 @@ RUN apt update RUN cd reporter && go build . # Base ------------------------------ -FROM node:20-alpine AS base +# The current Chromium version in Alpine 3.20 is causing timeout issues with Puppeteer. Downgrading to Alpine 3.19 fixes the issue. See #11640, #12637, #12189 +FROM node:20-alpine3.19 AS base RUN npm install -g pnpm@9.7.1 RUN apk add --update --no-cache python3 py3-pip g++ make @@ -38,9 +39,12 @@ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser ENV DEBUG=puppeteer:* RUN apk add --no-cache \ - udev \ - ttf-freefont \ - chromium + chromium \ + nss \ + freetype \ + harfbuzz \ + ca-certificates \ + ttf-freefont COPY . . diff --git a/src/server/utils/screenshot/lighthouse.ts b/src/server/utils/screenshot/lighthouse.ts index 2bce40bac..5a44b5f47 100644 --- a/src/server/utils/screenshot/lighthouse.ts +++ b/src/server/utils/screenshot/lighthouse.ts @@ -8,10 +8,9 @@ export async function generateLighthouse(url: string): Promise { const browser = await puppeteer.launch({ // Set to false if you want to see the script in action. headless: 'new', - args: ['--no-sandbox', '--single-process'], + args: ['--no-sandbox', '--single-process', '--disable-dev-shm-usage'], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], - dumpio: true, }); try { @@ -31,11 +30,13 @@ export async function generateLighthouse(url: string): Promise { throw new Error('Lighthouse failed to generate report'); } - page.close({ runBeforeUnload: false }); + await page.close({ runBeforeUnload: false }); const { lhr } = res; return lhr; + } catch (err) { + throw err; } finally { await browser.close(); } From c24e22d920645c6b7819426b8a669363c748f96a Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 19:41:04 +0800 Subject: [PATCH 05/10] chore: upgrade puppeteer to make sure can fit with alpine image chromium version --- Dockerfile | 2 + pnpm-lock.yaml | 182 +++++++++++++++++----------------------- src/server/package.json | 2 +- 3 files changed, 82 insertions(+), 104 deletions(-) diff --git a/Dockerfile b/Dockerfile index c6fb51cd6..031b5386b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,11 +38,13 @@ ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser ENV DEBUG=puppeteer:* +# NOTICE: Make sure Puppeteer is v22.7.1. Reference: https://pptr.dev/supported-browsers RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ + udev \ ca-certificates \ ttf-freefont diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 822019b70..3e5170515 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -540,8 +540,8 @@ importers: specifier: ^0.4.4 version: 0.4.4 puppeteer: - specifier: ^21.7.0 - version: 21.7.0(typescript@5.5.4) + specifier: 22.7.1 + version: 22.7.1(typescript@5.5.4) request-ip: specifier: ^3.3.0 version: 3.3.0 @@ -2717,9 +2717,9 @@ packages: '@probe.gl/stats@3.6.0': resolution: {integrity: sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==} - '@puppeteer/browsers@1.9.1': - resolution: {integrity: sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==} - engines: {node: '>=16.3.0'} + '@puppeteer/browsers@2.2.3': + resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} + engines: {node: '>=18'} hasBin: true '@puppeteer/browsers@2.4.0': @@ -4917,9 +4917,6 @@ packages: axios@1.5.0: resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} - b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -5290,8 +5287,8 @@ packages: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - chromium-bidi@0.5.2: - resolution: {integrity: sha512-PbVOSddxgKyj+JByqavWMNqWPCoCaT6XK5Z1EFe168sxnB/BM51LnZEPXSbFcFAJv/+u2B4XNTs9uXxy4GW3cQ==} + chromium-bidi@0.5.19: + resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} peerDependencies: devtools-protocol: '*' @@ -6175,8 +6172,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1203626: - resolution: {integrity: sha512-nEzHZteIUZfGCZtTiS1fRpC8UZmsfD1SiyPvaUNvS13dvKf666OAm8YTi0+Ca3n1nLEyu49Cy4+dPWpaHFJk9g==} + devtools-protocol@0.0.1273771: + resolution: {integrity: sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og==} devtools-protocol@0.0.1312386: resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} @@ -8258,10 +8255,6 @@ packages: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -10114,17 +10107,17 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} - puppeteer-core@21.7.0: - resolution: {integrity: sha512-elPYPozrgiM3phSy7VDUJCVWQ07SPnOm78fpSaaSNFoQx5sur/MqhTSro9Wz8lOEjqCykGC6WRkwxDgmqcy1dQ==} - engines: {node: '>=16.13.2'} + puppeteer-core@22.7.1: + resolution: {integrity: sha512-jD7T7yN7PWGuJmNT0TAEboA26s0VVnvbgCxqgQIF+eNQW2u71ENaV2JwzSJiCHO+e72H4Ue6AgKD9USQ8xAcOQ==} + engines: {node: '>=18'} puppeteer-core@23.3.0: resolution: {integrity: sha512-sB2SsVMFs4gKad5OCdv6w5vocvtEUrRl0zQqSyRPbo/cj1Ktbarmhxy02Zyb9R9HrssBcJDZbkrvBnbaesPyYg==} engines: {node: '>=18'} - puppeteer@21.7.0: - resolution: {integrity: sha512-Yy+UUy0b9siJezbhHO/heYUoZQUwyqDK1yOQgblTt0l97tspvDVFkcW9toBlnSvSfkDmMI3Dx9cZL6R8bDArHA==} - engines: {node: '>=16.13.2'} + puppeteer@22.7.1: + resolution: {integrity: sha512-JBCBCwQ9+dyPp5haqeecgv0N0vgWFx44woUeKJaPeJT8CU3RXrd8F/tqJQbuAmcWlbMhYJSlTJkIFrwVAs6BNA==} + engines: {node: '>=18'} deprecated: < 22.8.2 is no longer supported hasBin: true @@ -11607,9 +11600,6 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.16.1: - resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} - streamx@2.20.1: resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} @@ -11832,8 +11822,8 @@ packages: tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - tar-fs@3.0.4: - resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + tar-fs@3.0.5: + resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} tar-fs@3.0.6: resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} @@ -12396,9 +12386,6 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - urlpattern-polyfill@9.0.0: - resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} - use-callback-ref@1.3.1: resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} engines: {node: '>=10'} @@ -13904,7 +13891,7 @@ snapshots: '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -13924,7 +13911,7 @@ snapshots: '@babel/traverse': 7.24.0 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -14725,7 +14712,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - debug: 4.3.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -14740,7 +14727,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - debug: 4.3.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -16248,13 +16235,14 @@ snapshots: dependencies: '@babel/runtime': 7.24.0 - '@puppeteer/browsers@1.9.1': + '@puppeteer/browsers@2.2.3': dependencies: debug: 4.3.4 extract-zip: 2.0.1 progress: 2.0.3 - proxy-agent: 6.3.1 - tar-fs: 3.0.4 + proxy-agent: 6.4.0 + semver: 7.6.0 + tar-fs: 3.0.5 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: @@ -17305,7 +17293,7 @@ snapshots: '@tanstack/router-generator@1.20.5': dependencies: prettier: 3.2.5 - zod: 3.22.4 + zod: 3.23.8 '@tanstack/router-vite-plugin@1.20.5': dependencies: @@ -18825,7 +18813,7 @@ snapshots: agent-base@7.1.0: dependencies: - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -19244,8 +19232,6 @@ snapshots: transitivePeerDependencies: - debug - b4a@1.6.4: {} - b4a@1.6.6: {} babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.90.3): @@ -19730,11 +19716,12 @@ snapshots: chrome-trace-event@1.0.3: {} - chromium-bidi@0.5.2(devtools-protocol@0.0.1203626): + chromium-bidi@0.5.19(devtools-protocol@0.0.1273771): dependencies: - devtools-protocol: 0.0.1203626 + devtools-protocol: 0.0.1273771 mitt: 3.0.1 - urlpattern-polyfill: 9.0.0 + urlpattern-polyfill: 10.0.0 + zod: 3.22.4 chromium-bidi@0.6.5(devtools-protocol@0.0.1330662): dependencies: @@ -20086,7 +20073,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 - semver: 7.6.0 + semver: 7.6.3 split2: 4.2.0 conventional-changelog@5.1.0: @@ -20272,7 +20259,7 @@ snapshots: postcss-modules-scope: 3.1.1(postcss@8.4.35) postcss-modules-values: 4.0.0(postcss@8.4.35) postcss-value-parser: 4.2.0 - semver: 7.6.0 + semver: 7.6.3 optionalDependencies: webpack: 5.90.3 @@ -20657,7 +20644,7 @@ snapshots: detect-port@1.5.1: dependencies: address: 1.2.2 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -20665,7 +20652,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1203626: {} + devtools-protocol@0.0.1273771: {} devtools-protocol@0.0.1312386: {} @@ -20948,7 +20935,7 @@ snapshots: engine.io-client@6.5.2: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.6 engine.io-parser: 5.2.1 ws: 8.11.0 xmlhttprequest-ssl: 2.0.0 @@ -20968,7 +20955,7 @@ snapshots: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4 + debug: 4.3.6 engine.io-parser: 5.2.1 ws: 8.11.0 transitivePeerDependencies: @@ -21309,7 +21296,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.6 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -21496,7 +21483,7 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.6.0 + semver: 7.6.3 tapable: 1.1.3 typescript: 5.5.4 webpack: 5.90.3 @@ -21691,7 +21678,7 @@ snapshots: git-semver-tags@7.0.1: dependencies: meow: 12.1.1 - semver: 7.6.0 + semver: 7.6.3 git-up@7.0.0: dependencies: @@ -22160,7 +22147,7 @@ snapshots: hosted-git-info@7.0.1: dependencies: - lru-cache: 10.1.0 + lru-cache: 10.4.3 hpack.js@2.1.6: dependencies: @@ -22262,7 +22249,7 @@ snapshots: http-proxy-agent@7.0.0: dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -22317,7 +22304,7 @@ snapshots: https-proxy-agent@6.2.1: dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -22331,7 +22318,7 @@ snapshots: https-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -23205,8 +23192,6 @@ snapshots: lowercase-keys@3.0.0: {} - lru-cache@10.1.0: {} - lru-cache@10.4.3: {} lru-cache@11.0.0: {} @@ -24428,7 +24413,7 @@ snapshots: node-abi@3.52.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 node-domexception@1.0.0: {} @@ -24491,7 +24476,7 @@ snapshots: dependencies: hosted-git-info: 7.0.1 is-core-module: 2.13.0 - semver: 7.6.0 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -24796,10 +24781,10 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 get-uri: 6.0.2 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 pac-resolver: 7.0.0 socks-proxy-agent: 8.0.2 transitivePeerDependencies: @@ -24818,7 +24803,7 @@ snapshots: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.0 + semver: 7.6.3 param-case@3.0.4: dependencies: @@ -25172,7 +25157,7 @@ snapshots: cosmiconfig: 8.3.6(typescript@5.5.4) jiti: 1.21.0 postcss: 8.4.35 - semver: 7.6.0 + semver: 7.6.3 webpack: 5.90.3 transitivePeerDependencies: - typescript @@ -25708,7 +25693,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 lru-cache: 7.18.3 @@ -25760,17 +25745,15 @@ snapshots: dependencies: escape-goat: 4.0.0 - puppeteer-core@21.7.0: + puppeteer-core@22.7.1: dependencies: - '@puppeteer/browsers': 1.9.1 - chromium-bidi: 0.5.2(devtools-protocol@0.0.1203626) - cross-fetch: 4.0.0 + '@puppeteer/browsers': 2.2.3 + chromium-bidi: 0.5.19(devtools-protocol@0.0.1273771) debug: 4.3.4 - devtools-protocol: 0.0.1203626 + devtools-protocol: 0.0.1273771 ws: 8.16.0 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate @@ -25787,14 +25770,14 @@ snapshots: - supports-color - utf-8-validate - puppeteer@21.7.0(typescript@5.5.4): + puppeteer@22.7.1(typescript@5.5.4): dependencies: - '@puppeteer/browsers': 1.9.1 - cosmiconfig: 8.3.6(typescript@5.5.4) - puppeteer-core: 21.7.0 + '@puppeteer/browsers': 2.2.3 + cosmiconfig: 9.0.0(typescript@5.5.4) + devtools-protocol: 0.0.1273771 + puppeteer-core: 22.7.1 transitivePeerDependencies: - bufferutil - - encoding - supports-color - typescript - utf-8-validate @@ -27515,7 +27498,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 semver@5.7.2: {} @@ -27758,7 +27741,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -27785,7 +27768,7 @@ snapshots: socks-proxy-agent@8.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -27877,7 +27860,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.6 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -27955,13 +27938,6 @@ snapshots: streamsearch@1.1.0: {} - streamx@2.16.1: - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - optionalDependencies: - bare-events: 2.2.1 - streamx@2.20.1: dependencies: fast-fifo: 1.3.2 @@ -28132,14 +28108,14 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.4 + debug: 4.3.6 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 qs: 6.11.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -28317,11 +28293,13 @@ snapshots: pump: 3.0.0 tar-stream: 2.2.0 - tar-fs@3.0.4: + tar-fs@3.0.5: dependencies: - mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 3.1.6 + optionalDependencies: + bare-fs: 2.3.4 + bare-path: 2.1.3 tar-fs@3.0.6: dependencies: @@ -28341,9 +28319,9 @@ snapshots: tar-stream@3.1.6: dependencies: - b4a: 1.6.4 + b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.16.1 + streamx: 2.20.1 tar@6.1.15: dependencies: @@ -28917,7 +28895,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.6.0 + semver: 7.6.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -28932,7 +28910,7 @@ snapshots: is-npm: 6.0.0 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.6.0 + semver: 7.6.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -28958,8 +28936,6 @@ snapshots: urlpattern-polyfill@10.0.0: {} - urlpattern-polyfill@9.0.0: {} - use-callback-ref@1.3.1(@types/react@18.2.78)(react@18.2.0): dependencies: react: 18.2.0 @@ -29022,7 +28998,7 @@ snapshots: validate-peer-dependencies@2.2.0: dependencies: resolve-package-path: 4.0.3 - semver: 7.6.0 + semver: 7.6.3 validator@13.11.0: {} @@ -29166,7 +29142,7 @@ snapshots: vite-node@1.2.1(@types/node@18.17.12)(less@4.2.0)(terser@5.28.1): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.6 pathe: 1.1.2 picocolors: 1.0.0 vite: 5.0.12(@types/node@18.17.12)(less@4.2.0)(terser@5.28.1) @@ -29183,7 +29159,7 @@ snapshots: vite-node@1.2.1(@types/node@20.12.7)(less@4.2.0)(terser@5.28.1): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.6 pathe: 1.1.2 picocolors: 1.0.0 vite: 5.0.12(@types/node@20.12.7)(less@4.2.0)(terser@5.28.1) @@ -29383,7 +29359,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 5.3.3(webpack@5.90.3) - ws: 8.16.0 + ws: 8.18.0 optionalDependencies: webpack: 5.90.3 transitivePeerDependencies: diff --git a/src/server/package.json b/src/server/package.json index 65ea3fa84..4ade2aa2f 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -60,7 +60,7 @@ "passport": "^0.7.0", "passport-jwt": "^4.0.1", "ping": "^0.4.4", - "puppeteer": "^21.7.0", + "puppeteer": "22.7.1", "request-ip": "^3.3.0", "socket.io": "^4.7.4", "swagger-ui-express": "^5.0.0", From 9066792d746b1e46330660f0362d7368b48c99dd Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 19:54:24 +0800 Subject: [PATCH 06/10] chore: upgrade puppeteer usage to fit new version --- src/server/utils/screenshot/lighthouse.ts | 7 ++++++- src/server/utils/screenshot/website.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/utils/screenshot/lighthouse.ts b/src/server/utils/screenshot/lighthouse.ts index 5a44b5f47..560fc608b 100644 --- a/src/server/utils/screenshot/lighthouse.ts +++ b/src/server/utils/screenshot/lighthouse.ts @@ -1,13 +1,18 @@ import puppeteer from 'puppeteer'; import lighthouse, { Result, generateReport } from 'lighthouse'; +import { logger } from '../logger.js'; +import { env } from '../env.js'; export async function generateLighthouse(url: string): Promise { + logger.info('[Lighthouse] Generating Lighthouse report...', { url }); + // Use Puppeteer to launch headless Chrome // - Omit `--enable-automation` (See https://github.com/GoogleChrome/lighthouse/issues/12988) // - Don't use 800x600 default viewport const browser = await puppeteer.launch({ // Set to false if you want to see the script in action. - headless: 'new', + executablePath: env.puppeteerExecutablePath, + headless: true, args: ['--no-sandbox', '--single-process', '--disable-dev-shm-usage'], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], diff --git a/src/server/utils/screenshot/website.ts b/src/server/utils/screenshot/website.ts index 97689fc5e..66a0fb367 100644 --- a/src/server/utils/screenshot/website.ts +++ b/src/server/utils/screenshot/website.ts @@ -12,7 +12,7 @@ export async function screenshotWebsiteDetailImage( ) { const browser = await puppeteer.launch({ executablePath: env.puppeteerExecutablePath, - headless: 'new', + headless: true, }); const page = await browser.newPage(); try { From 0f34effa52897edde99212e4ce2c82be7d5a1ce2 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 19:54:51 +0800 Subject: [PATCH 07/10] chore: upgrade axios version to latest to resolve vulnerabilities --- pnpm-lock.yaml | 27 +++++++++++++++++++-------- src/client/package.json | 2 +- src/server/package.json | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e5170515..d009e788b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -230,8 +230,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 axios: - specifier: ^1.5.0 - version: 1.5.0 + specifier: 1.7.7 + version: 1.7.7 bytemd: specifier: ^1.21.0 version: 1.21.0 @@ -450,8 +450,8 @@ importers: specifier: ^1.5.0 version: 1.5.0 axios: - specifier: ^1.5.0 - version: 1.5.0 + specifier: 1.7.7 + version: 1.7.7 badge-maker: specifier: ^3.3.1 version: 3.3.1 @@ -4914,8 +4914,8 @@ packages: resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} - axios@1.5.0: - resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -6761,6 +6761,15 @@ packages: debug: optional: true + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -19224,9 +19233,9 @@ snapshots: axe-core@4.10.0: {} - axios@1.5.0: + axios@1.7.7: dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.9 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -21461,6 +21470,8 @@ snapshots: follow-redirects@1.15.2: {} + follow-redirects@1.15.9: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 diff --git a/src/client/package.json b/src/client/package.json index 94a5fdd8c..1e310e0fc 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -55,7 +55,7 @@ "ahooks": "^3.7.10", "antd": "^5.13.1", "array-move": "^3.0.1", - "axios": "^1.5.0", + "axios": "1.7.7", "bytemd": "^1.21.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", diff --git a/src/server/package.json b/src/server/package.json index 4ade2aa2f..57e38299d 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -30,7 +30,7 @@ "@tianji/shared": "workspace:^", "@trpc/server": "^10.45.2", "accept-language-parser": "^1.5.0", - "axios": "^1.5.0", + "axios": "1.7.7", "badge-maker": "^3.3.1", "bcryptjs": "^2.4.3", "cache-manager": "^5.7.2", From 103c9a8a8f1d410028fec9aafeb92dd4374f4e5d Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 21:17:17 +0800 Subject: [PATCH 08/10] chore: upgrade puppeteer version to 23.4.1 --- Dockerfile | 15 ----- pnpm-lock.yaml | 129 +++++++++++++++------------------------- src/server/package.json | 2 +- 3 files changed, 49 insertions(+), 97 deletions(-) diff --git a/Dockerfile b/Dockerfile index 031b5386b..a665cbbfe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,21 +33,6 @@ RUN pnpm build:static FROM base AS app WORKDIR /app/tianji -# We don't need the standalone Chromium -ENV PUPPETEER_SKIP_DOWNLOAD=true -ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser -ENV DEBUG=puppeteer:* - -# NOTICE: Make sure Puppeteer is v22.7.1. Reference: https://pptr.dev/supported-browsers -RUN apk add --no-cache \ - chromium \ - nss \ - freetype \ - harfbuzz \ - udev \ - ca-certificates \ - ttf-freefont - COPY . . RUN pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d009e788b..7e6792ce8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -540,8 +540,8 @@ importers: specifier: ^0.4.4 version: 0.4.4 puppeteer: - specifier: 22.7.1 - version: 22.7.1(typescript@5.5.4) + specifier: 23.4.1 + version: 23.4.1(typescript@5.5.4) request-ip: specifier: ^3.3.0 version: 3.3.0 @@ -2717,11 +2717,6 @@ packages: '@probe.gl/stats@3.6.0': resolution: {integrity: sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==} - '@puppeteer/browsers@2.2.3': - resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} - engines: {node: '>=18'} - hasBin: true - '@puppeteer/browsers@2.4.0': resolution: {integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==} engines: {node: '>=18'} @@ -5287,11 +5282,6 @@ packages: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - chromium-bidi@0.5.19: - resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} - peerDependencies: - devtools-protocol: '*' - chromium-bidi@0.6.5: resolution: {integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==} peerDependencies: @@ -6032,6 +6022,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -6172,15 +6171,15 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1273771: - resolution: {integrity: sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og==} - devtools-protocol@0.0.1312386: resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} devtools-protocol@0.0.1330662: resolution: {integrity: sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==} + devtools-protocol@0.0.1342118: + resolution: {integrity: sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==} + dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} @@ -10116,18 +10115,17 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} - puppeteer-core@22.7.1: - resolution: {integrity: sha512-jD7T7yN7PWGuJmNT0TAEboA26s0VVnvbgCxqgQIF+eNQW2u71ENaV2JwzSJiCHO+e72H4Ue6AgKD9USQ8xAcOQ==} - engines: {node: '>=18'} - puppeteer-core@23.3.0: resolution: {integrity: sha512-sB2SsVMFs4gKad5OCdv6w5vocvtEUrRl0zQqSyRPbo/cj1Ktbarmhxy02Zyb9R9HrssBcJDZbkrvBnbaesPyYg==} engines: {node: '>=18'} - puppeteer@22.7.1: - resolution: {integrity: sha512-JBCBCwQ9+dyPp5haqeecgv0N0vgWFx44woUeKJaPeJT8CU3RXrd8F/tqJQbuAmcWlbMhYJSlTJkIFrwVAs6BNA==} + puppeteer-core@23.4.1: + resolution: {integrity: sha512-uCxGtn8VE9PlKhdFJX/zZySi9K3Ufr3qUZe28jxJoZUqiMJOi+SFh2zhiFDSjWqZIDkc0FtnaCC+rewW3MYXmg==} + engines: {node: '>=18'} + + puppeteer@23.4.1: + resolution: {integrity: sha512-+wWfWTkQ8L9IB/3OVGSUp37c0eQ5za/85KdX+LAq2wTZkMdocgYGMCs+/91e2f/RXIYzve4x/uGxN8zG2sj8+w==} engines: {node: '>=18'} - deprecated: < 22.8.2 is no longer supported hasBin: true qrcode.react@3.1.0: @@ -11831,9 +11829,6 @@ packages: tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - tar-fs@3.0.5: - resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} - tar-fs@3.0.6: resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} @@ -12823,18 +12818,6 @@ packages: utf-8-validate: optional: true - ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -16244,19 +16227,6 @@ snapshots: dependencies: '@babel/runtime': 7.24.0 - '@puppeteer/browsers@2.2.3': - dependencies: - debug: 4.3.4 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.4.0 - semver: 7.6.0 - tar-fs: 3.0.5 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - '@puppeteer/browsers@2.4.0': dependencies: debug: 4.3.6 @@ -19725,16 +19695,16 @@ snapshots: chrome-trace-event@1.0.3: {} - chromium-bidi@0.5.19(devtools-protocol@0.0.1273771): + chromium-bidi@0.6.5(devtools-protocol@0.0.1330662): dependencies: - devtools-protocol: 0.0.1273771 + devtools-protocol: 0.0.1330662 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 - zod: 3.22.4 + zod: 3.23.8 - chromium-bidi@0.6.5(devtools-protocol@0.0.1330662): + chromium-bidi@0.6.5(devtools-protocol@0.0.1342118): dependencies: - devtools-protocol: 0.0.1330662 + devtools-protocol: 0.0.1342118 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.23.8 @@ -20524,6 +20494,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: {} decode-named-character-reference@1.0.2: @@ -20661,12 +20635,12 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1273771: {} - devtools-protocol@0.0.1312386: {} devtools-protocol@0.0.1330662: {} + devtools-protocol@0.0.1342118: {} + dezalgo@1.0.4: dependencies: asap: 2.0.6 @@ -25756,24 +25730,25 @@ snapshots: dependencies: escape-goat: 4.0.0 - puppeteer-core@22.7.1: + puppeteer-core@23.3.0: dependencies: - '@puppeteer/browsers': 2.2.3 - chromium-bidi: 0.5.19(devtools-protocol@0.0.1273771) - debug: 4.3.4 - devtools-protocol: 0.0.1273771 - ws: 8.16.0 + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) + debug: 4.3.6 + devtools-protocol: 0.0.1330662 + typed-query-selector: 2.12.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - puppeteer-core@23.3.0: + puppeteer-core@23.4.1: dependencies: '@puppeteer/browsers': 2.4.0 - chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) - debug: 4.3.6 - devtools-protocol: 0.0.1330662 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) + debug: 4.3.7 + devtools-protocol: 0.0.1342118 typed-query-selector: 2.12.0 ws: 8.18.0 transitivePeerDependencies: @@ -25781,12 +25756,14 @@ snapshots: - supports-color - utf-8-validate - puppeteer@22.7.1(typescript@5.5.4): + puppeteer@23.4.1(typescript@5.5.4): dependencies: - '@puppeteer/browsers': 2.2.3 + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) cosmiconfig: 9.0.0(typescript@5.5.4) - devtools-protocol: 0.0.1273771 - puppeteer-core: 22.7.1 + devtools-protocol: 0.0.1342118 + puppeteer-core: 23.4.1 + typed-query-selector: 2.12.0 transitivePeerDependencies: - bufferutil - supports-color @@ -28304,14 +28281,6 @@ snapshots: pump: 3.0.0 tar-stream: 2.2.0 - tar-fs@3.0.5: - dependencies: - pump: 3.0.0 - tar-stream: 3.1.6 - optionalDependencies: - bare-fs: 2.3.4 - bare-path: 2.1.3 - tar-fs@3.0.6: dependencies: pump: 3.0.0 @@ -29549,8 +29518,6 @@ snapshots: ws@8.11.0: {} - ws@8.16.0: {} - ws@8.18.0: {} xdg-basedir@4.0.0: {} diff --git a/src/server/package.json b/src/server/package.json index 57e38299d..0947ff613 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -60,7 +60,7 @@ "passport": "^0.7.0", "passport-jwt": "^4.0.1", "ping": "^0.4.4", - "puppeteer": "22.7.1", + "puppeteer": "23.4.1", "request-ip": "^3.3.0", "socket.io": "^4.7.4", "swagger-ui-express": "^5.0.0", From 051b3473b9bec79126edafc242ab43283a6303e9 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 30 Sep 2024 23:12:22 +0800 Subject: [PATCH 09/10] refactor: update dockerfile, carry back auto install dependency --- Dockerfile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Dockerfile b/Dockerfile index a665cbbfe..2594f2bea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,20 @@ RUN pnpm build:static FROM base AS app WORKDIR /app/tianji +# We don't need the standalone Chromium in alpine. +ENV PUPPETEER_SKIP_DOWNLOAD=true +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser + +RUN apk upgrade --no-cache --available \ + && apk add --no-cache \ + chromium-swiftshader \ + ttf-freefont \ + font-noto-emoji \ + && apk add --no-cache \ + --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community \ + font-wqy-zenhei + COPY . . RUN pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false From 82fa0f0ccec6420a88f5a153062b5ce05ec3d619 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 1 Oct 2024 00:23:44 +0800 Subject: [PATCH 10/10] refactor: try to resolve no screenshot problem by remove single process. follow https://github.com/GoogleChrome/lighthouse/issues/11537#issuecomment-799895027 --- src/server/utils/screenshot/lighthouse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/utils/screenshot/lighthouse.ts b/src/server/utils/screenshot/lighthouse.ts index 560fc608b..131c87b74 100644 --- a/src/server/utils/screenshot/lighthouse.ts +++ b/src/server/utils/screenshot/lighthouse.ts @@ -13,7 +13,7 @@ export async function generateLighthouse(url: string): Promise { // Set to false if you want to see the script in action. executablePath: env.puppeteerExecutablePath, headless: true, - args: ['--no-sandbox', '--single-process', '--disable-dev-shm-usage'], + args: ['--no-sandbox', '--disable-dev-shm-usage'], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], });