如何在google appengine上为node.js运行nightmare.js

hhs*_*diq 7 google-app-engine yaml node.js nightmare electron

有一个着名的问题是噩梦和电子没有在无头的linux服务器上运行.官方电子文档建议使用xvfb来伪造显示器.他们建议将这个.yml文件用于travis.

addons:
  apt:
    packages:
      - xvfb

install:
  - export DISPLAY=':99.0'
  - Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &

如何将上面的代码app.yaml用于node.js的google appengine文件.我试图按原样使用它,但是glcoud会抛出一个addon无效命令的错误.差距官方文档没有任何类似的命令.

任何建议我们如何在node.js的谷歌appengine上运行噩梦和电子..?

ric*_*med 13

这个问题涉及两个部分:

  1. 在linux上无边地运行铬(电子,反过来,噩梦"使用").
  2. 安装/使用xvfb在app引擎上运行chrome.

第1部分)

你需要xvfb.

Xvfb(Virtual Framebuffer)只是一个程序,来自wiki:"是一个实现X11显示服务器协议的显示服务器.与其他显示服务器相比,Xvfb在内存中执行所有图形操作而不显示任何屏幕输出."

这是您在没有屏幕输出的情况下运行浏览器所需的.

首先,安装所有xvfb相关软件包以在linux上运行它.

apt-get install -y \ xvfb \ x11-xkb-utils \ xfonts-100dpi \ xfonts-75dpi \ xfonts-scalable \ xfonts-cyrillic \ x11-apps \ clang \ libdbus-1-dev \ libgtk2.0-dev \ libnotify-dev \ libgnome-keyring-dev \ libgconf2-dev \ libasound2-dev \ libcap-dev \ libcups2-dev \ libxtst-dev \ libxss1 \ libnss3-dev \ gcc-multilib \ g++-multilib

因此,安装xvfb后,您需要创建一个虚拟xvfb屏幕并导出一个名为DISPLAY的环境变量,指向它.Electron中的Chromium会自动寻找$ DISPLAY.

以上可以更容易地完成.这有两个选择:

  • 用linux cli调用程序(如果恶梦脚本运行正常,则忽略xvfb警告):

    • xvfb-run -a node main.js.要么...

    • 如果使用渲染相关功能,如截屏:xvfb-run -a --server-args="-screen 0 1280x1028x24 -ac +extension GLX +extension RANDR +render" node app.js.Google的xvfb选项可根据您的喜好进行调整.

  • 以编程方式:使用xvfb npm包

从这一点开始,你应该能够在linux上运行噩梦.

第2部分)

app引擎上的Nodej通过灵活的环境运行.意思是,通过docker容器.

从GAE nodejs运行时:"如果您的应用程序需要额外的操作系统级依赖关系,您将需要使用基于此运行时的自定义运行时来安装相应的包."

Docker是一个完全独立的主题,但是为了使用app引擎执行上述操作,据我所知,您有两个选项:

  1. 扩展运行时

  2. 从头开始将GAE与自定义运行时一起使用.

无论哪种方式,基本上你需要做的是安装在dockerfile中定义它们的xvfb相关包,这应该可以解决问题.

祝好运!

重要笔记:

  1. 上面的apt-get软件包取决于linux发行版的可用性(上面的代码适用于ubuntu和debian).例如,使用指定的包集合,在本文发布时,它将与GAE的灵活环境一起使用,因为它基于debian jessie,并且不适用于linux alpine.

  2. Chromium需要最小的dev/shm分配才能运行良好.例如,在heroku上它固定为5mb - 并且无法更改它.经过几次噩梦之后,铬会崩溃.因此,铬不适用于任何大小的任何heroku的dynos.在docker中它设置为64mb,因此根据脚本的复杂程度,您可以正常工作或需要调整它.在普通的linux安装中,dev/shm通常设置为总可用内存的一半.所以在512mb环境中,dev/shm将被设置为256mb,而梦魇很可能会正常运行.