안녕하세요 @realmankwon입니다.
puppeteer 모듈을 설치하여 실행을 할려고 하는데 서버에서는 설치부터 되지 않아서 로컬에서만 사용하고 있었습니다.
하지만 어느날 이걸 꼭 해결해야겠다는 생각에 시간을 좀 들였습니다.
일단 설치만 되면 그 뒤부터는 잘 될 것 같다는 생각에 설치 방법에 대해서 구글링하던 중
--unsafe-perm 이 옵션을 붙이면 설치가 된다는 글을 보았습니다.
- sudo npm install puppeteer --unsafe-perm
그랬던 정상적으로 설치가 되었습니다.
이제 잘 되겠지 싶었는데 새로운 오류가 발생하더군요.
오류는 다음과 같습니다.
(node:17461) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
/home/pi/project/scotbot/node_modules/puppeteer/.local-chromium/linux-818858/chrome-linux/chrome: 1: /home/pi/project/scotbot/node_modules/puppeteer/.local-chromium/linux-818858/chrome-linux/chrome: Syntax error: "(" unexpected
TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
at onClose (/home/pi/project/scotbot/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:193:20)
at Interface.<anonymous> (/home/pi/project/scotbot/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:183:68)
at Interface.emit (events.js:327:22)
at Interface.close (readline.js:416:8)
at Socket.onend (readline.js:194:10)
at Socket.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1220:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
- Failed to launch the browser process!
브라우저를 실행할 수 없다고 하는데.... 참 갑갑할 노릇입니다.
다시 구글링 시작입니다.
그랬더니 다음의 글을 찾을 수 있었습니다.
출처 : https://curryyou.tistory.com/222
요약하면 AWS 와 같은 VM 서버에서는 크롬이 설치되어 있지 않아서 실행이 안 되는 것이고 이걸 가능하게 하는 모듈들을 설치하면 된다고 합니다.
해당 모듈을 설치하는 방법은 다음과 같습니다.
- sudo npm install puppeteer-core
- sudo apt-get update
- sudo apt-get install ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils
이렇게 모듈을 설치한 이후에 소스에서도 다음과 같이 변경을 해 주어야 합낟.
- const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
변경이후 잘 동작이 되는군요!! ^^
속이 시원합니다!!ㅎㅎ