개발
alpine linux puppeteer 실행 오류
syaku
2025. 1. 3. 17:10
728x90
반응형
원인 분석
발생하는 최초 위치
- alpine linux 기반의 도커 컨테이너에서 puppeteer 실행 오류
세부적인 원인
- puppeteer 의 필수 패키지 설치 누락
# 로그 오류 spawn /home/app/node_modules/puppeteer/.local-chromium/linux-494755/chrome-linux/chrome ENOENT
- puppeteer 에서 설치한 크롬 버전이 리눅스 환경에서 작동하지 않음
# 로그 오류 Error loading shared library libudev.so.1: No such file or directory (needed by /root/.cache/puppeteer/chrome/linux-131.0.6778.204/chrome-linux64/chrome) 2025-01-03 16:24:21 web-crawler:start: Error relocating /root/.cache/puppeteer/chrome/linux-131.0.6778.204/chrome-linux64/chrome: posix_fallocate64: symbol not found
- puppeteer 에서 크롬 설치를 하지 않고 직접 크롬 설치하면 버전 호환성 오류
# 로그 오류 puppeteerOptions {executablePath: '/usr/bin/chromium-browser',headless: true,args: ['--no-sandbox','--disable-setuid-sandbox','--disable-dev-shm-usage']} 2025-01-02 20:43:22 web-crawler:start: Crawling failed: Error: Failed to launch browser: Could not find Chrome (ver. 131.0.6778.204). This can occur if either
문제 해결
puppeteer 를 사용하기 위한 필수 패키지 설치 누락 오류
패키지 설치
apk update && apk upgrade && \
apk add --no-cache \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
nodejs \
npm \
font-liberation \
alsa-lib \
at-spi2-core \
atkmm2.36 \
libc6-compat \
cairo \
cups-libs \
dbus-libs \
expat \
fontconfig \
mesa-gbm \
libgcc \
glib \
gtk+3.0 \
nspr \
nss \
pango \
libstdc++ \
libx11 \
libxcb \
libxcomposite \
libxcursor \
libxdamage \
libxext \
libxfixes \
libxi \
libxrandr \
libxrender \
libxscrnsaver \
libxtst \
wget \
xdg-utils
alpine linux 에서 puppeteer 에서 설치된 크롬 사용 하지 못함
직접 크롬 설치
apk add --no-cache \
chromium \
chromium-chromedriver \
# Puppeteer cache 관련 디렉토리 및 권한 설정
mkdir -p /root/.cache/puppeteer && \ chmod -R 777 /root/.cache/puppeteer
# Puppeteer 환경 변수 설정
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
export PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
export PUPPETEER_CACHE_DIR=/root/.cache/puppeteer
puppeteer 런처 옵션 추가
await puppeteer.launch({
executablePath: '/usr/bin/chromium', // process.env.PUPPETEER_EXECUTABLE_PATH
cacheDirectory: '/root/.cache/puppeteer', // process.env.PUPPETEER_CACHE_DIR
});
puppeteer 에서 크롬 설치를 하지 않고 직접 크롬을 설치하면 버전 호환성 오류
크롬 버전 확인 puppeteer version 확인은 package-lock.json 에서 확인할 수 있다.
# 설치된 크롬 버전 확인
$ chromium --version
puppeteer 는 23.11.1
고정 버전을 사용하면 크롬 버전 131.0.6778.204
설치하면 호환된다.
# npm 설치 패키지
puppeteer@23.11.1
# alpine 설치 패키지
chromium=131.0.6778.204-r0
alpine 에서 직접 크롬 설치
$ echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
$ apk add --no-cache chromium=131.0.6778.204-r0
도커를 사용하면 puppeteer 런처 실행시 옵션 추가 필요
await puppeteer.launch({
executablePath: '/usr/bin/chromium', // process.env.PUPPETEER_EXECUTABLE_PATH
cacheDirectory: '/root/.cache/puppeteer', // process.env.PUPPETEER_CACHE_DIR
args: ["--no-sandbox","--disable-setuid-sandbox","--disable-dev-shm-usage", "--disable-gpu"]
});
옵션 설명
- 컨테이너 환경 최적화:
-no-sandbox
,-disable-setuid-sandbox
,-disable-dev-shm-usage
는 Docker와 같은 컨테이너 환경에서 안정적인 브라우저 실행을 보장합니다.
- 리소스 절약 및 호환성 개선:
-disable-gpu
,-disable-software-rasterizer
는 GPU가 없는 환경에서 성능 문제를 방지합니다.
- 불필요한 기능 제거:
-disable-extensions
,-hide-scrollbars
,-mute-audio
는 테스트나 크롤링 작업 중 불필요한 리소스 소비를 줄입니다.
728x90
반응형