这个问题有两个部分:
- 在 Linux 上无头运行铬(电子和噩梦“使用”的东西)。
- 安装/使用 xvfb 在应用引擎上运行 chromium。
第1部分)
你需要xvfb。
Xvfb(虚拟帧缓冲区)只是一个程序,来自 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 上运行 nightmare。
第2部分)
应用引擎上的 Nodejs 通过灵活的环境运行。意思是,通过 docker 容器。
来自 GAE nodejs 运行时:“如果您的应用程序需要额外的操作系统级依赖项,您将需要使用基于此运行时的自定义运行时来安装适当的包。”
Docker 是一个完全独立的主题,但据我所知,为了使用应用引擎执行上述操作,您有两个选择:
扩展运行时
从头开始使用带有自定义运行时的 GAE。
无论哪种方式,基本上您需要做的是安装在 dockerfile 中定义它们的 xvfb 相关包,这应该可以解决问题。
祝你好运!
重要笔记:
上面的 apt-get 包取决于 linux 发行版的可用性(上面的代码适用于 ubuntu 和 debian)。例如,使用指定的软件包集,并且在本文发布时,它将与 GAE 的灵活环境一起使用,因为它基于 debian jessie,并且无法在 linux alpine 上运行。
Chromium 需要最小的 dev/shm 分配才能运行良好。例如,在 heroku 上,它固定为 5mb - 并且无法更改它。Chromium 会在几次噩梦般的操作后崩溃。所以铬不会在任何大小的任何heroku的测功机上工作。在 docker 中,它设置为 64mb,因此根据脚本的复杂性,您可以做得很好或需要调整它。在普通的 linux 安装中,dev/shm 通常设置为总可用内存的一半。因此,在 512mb 的环境中,dev/shm 将设置为 256mb,并且 nightmare 很可能运行良好。