在centos上部署puppeteer碰见的坑,建议收藏

743 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第32天,点击查看活动详情

我自己有一个新加坡的服务器,最近想在上面部署一个puppeteer应用,具体干什么你们懂的。今天总结一下遇见的坑.

1.安装nvm

当我们新申请好一个服务器,一般系统都会给你配置好,你无需再安装系统了。系统这里正如标题,我选择了centOS 7.9 第一步我们需要先安装node,这里我选择了nvm。

nvm全称node version manager,是一个在Linux环境下管理node版本的工具,可以下载,安装各个版本的node,并支持共存,切换,指定node版本运行脚本等等。

安装脚本如下

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

如果你的服务器在国内,你可以使用raw.fastgit.org 提供的反向代理

curl -O- https://raw.fastgit.org/creationix/nvm/v0.39.1/install.sh | bash

如果顺利执行,过一会就会自动安装好了,安装完成建议你关闭命令行,重新链接服务器。 如果你懂点linux,也可以通过如下命令重新启动

  • bashsource ~/.bashrc

  • zshsource ~/.zshrc

  • ksh. ~/.profile

这时候,你在命令行中输入nvm -h,如果出现界面,那就是安装成功了。

我列举一点nvm的基本命令

  • nvm ls-remote查看远程的nodejs 版本,这里包含了所有nodejs版本。
  • nvm install v16 安装nodejs,后面跟着的是版本号,可以填写具体的版本号,也可以简写。比如v16就代表v16里面的最新版本v16.15.1
  • nvm use v16 通过上一个命令安装之后,就可以通过这个设定当前的nodejs版本了

其他的大家可以自己琢磨一下。

2、安装puppeteer

安装的命令大家都会,我这里主要讲一下异常处理。 建议把registry切换成淘宝源

  • 错误1:permission denie 这种一般是权限问题,可以尝试加上npm i puppeteer --unsafe-perm这个参数试试,如果还不行,去搜一下npm权限问题

  • 错误2:bash -c node command not find 这个错误是指 bash下没有找到node这个命令,我估计这个问题是nvm引起了。

我们在命令行输入

~ which node
/root/.nvm/versions/node/v16.15.1/bin/node

可以看到,nvm安装的node是在/root/.nvm目录下,而有些命令安装的时候需要/usr/local/目录下寻找node.这时候我们需要做一个软连接,类似于windows中的快捷方式,就可以避免这个错误

ln -s $(which node) /usr/local/bin/node

执行完这个命令最好重新连接服务器,重启命令行

  • 错误3:can not lanuch chrome... 首先找到你安装puppeteer的目录,xxx/node_modules/puppeteer,看一下有没有一个.local-chromium的目录,如果没有需要手动下载一下

image.png

网上有很多办法都很麻烦,我觉得最简单的办法就是手动执行一下install.js

~ node xxx/node_modules/puppeteer/install.js
  • 修改你的puppeteer代码 加入2个参数,禁止沙盒模式'--no-sandbox', '--disable-setuid-sandbox'
const browser = await puppeteer.launch({
  headless: true,
  args: ['--no-sandbox', '--disable-setuid-sandbox'],
})

安装系统依赖

一般来说,上一步做完,应该已经成功安装了puppeteer,这时候如果还跑不起来,一般就是系统依赖不够了 官方文档 先执行yum update nss -y 然后再到xxx/node_modules/puppeteer/.local-chromium再往里走,一直到最内层目录,你会看到一堆文件

image.png 在这个目录下执行ldd chrome | grep not

这个命令会自动检查你系统缺少什么依赖,如果缺少会告诉你,比如

~ ldd chrome | grep not
xxx -> not found

这是你把哪个文件名复制下来,再执行 yum provides xxx

然后根据相应的提示安装相应的包即可 yum install aaa

这是我前几天部署一个nest.js+puppeteer遇见的问题,最后解决了这个问题,具体过程可以参考一下,如果有问题可以一起探讨一下