如何 运行 nightmare.js google appengine for node.js
How to run nightmare.js on google appengine for node.js
有 famous issue with nightmare and electron not running on headless linux servers. The official electron docs 建议使用 xvfb 来伪造显示。他们建议将此 .yml 文件用于 travis。
addons:
apt:
packages:
- xvfb
install:
- export DISPLAY=':99.0'
- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
问题
如何将上面的代码片段用于 node.js 的 google appengine 的 app.yaml
文件中。我试图按原样使用它,但 glcoud 抛出一个错误,指出 addon
是无效命令。空档official docs没有类似命令
有什么建议可以 运行 在 google appengine 上 node.js 的 nightmare 和 electron node.js..?
这个问题有两部分相关:
- 运行 铬(什么电子,反过来,噩梦 "uses")在 linux.
上无头
- Install/Use xvfb 到 运行 App Engine 上的 chromium。
第 1 部分
您需要 xvfb。
Xvfb(虚拟帧缓冲区)只是一个程序,来自 wiki:"is a display server implementing the X11 display server protocol. In contrast to other display servers, Xvfb performs all graphical operations in memory without showing any screen output."
您需要 运行 没有屏幕输出的浏览器。
首先,在 linux.
上将所有 xvfb 相关包安装到 运行 它
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 的环境变量指向它。 Chromium in Electron 会自动寻找 $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 package
从现在开始,您应该可以 运行 在 linux 上做噩梦了。
第 2 部分)
App Engine 上的 Nodejs 运行 通过柔性环境。意思是,通过 docker 个容器。
来自GAE nodejs 运行时间:"If your application requires additional operating-system-level dependencies, you will need to use a custom runtime based on this runtime to install the appropriate packages."
Docker 是一个完全独立的主题,但要使用 App Engine 执行上述操作,据我所知,您有两种选择:
从头开始使用 GAE custom runtime。
无论哪种方式,基本上您需要做的就是安装在 docker 文件中定义它们的 xvfb 相关包,这样就可以了。
祝你好运!
重要提示:
以上 apt-get 软件包取决于 linux 发行版的可用性(以上代码适用于 ubuntu 和 debian)。例如,使用指定的软件包集并在 post 时,它将与 GAE 的灵活环境一起工作,因为它基于 debian jessie 而不会在 linux alpine 上工作。
Chromium 需要至少 dev/shm 分配给 运行 井。例如,在 heroku 上它固定为 5mb - 并且无法更改它。 Chromium 会在一些噩梦般的动作后崩溃。因此,chromium 不适用于任何大小的 heroku 测功机。在 docker 中,它被设置为 64mb,因此根据脚本的复杂程度,您会做得很好或需要对其进行调整。在普通 linux 安装中,dev/shm 通常设置为总可用内存的一半。因此,在 512mb 环境中,dev/shm 将设置为 256mb,nightmare 很可能 运行 没问题。
感谢@rickmed 的详尽解答!它帮助我开始掌握在这种情况下使用 xvfb 的方法。 ()
我正在使用 Nightmare 从端点生成 PDF。我的本地开发是在 OSX 上完成的,我在尝试让它在 Google App Engine 上运行时遇到了这个问题。我最初使用 rickmed 的回答让它工作,后来想出了另一种避免自定义 Dockerfile/runtime 的方法。我想我会在这里分享它。
我没有使用自定义 Dockerfile 并允许 gcloud 在部署期间为我生成一个。我的 yaml 文件使用 runtime: nodejs
。对于我对 Nightmare 的简单使用,我可以将预安装脚本添加到我的 package.json 并更新启动脚本。这就是让噩梦在 GAE 上工作所需要的全部。以下是我的 package.json:
中的相关行
{
"scripts": {
"preinstall": "apt-get update && apt-get install -y libgtk2.0-0 libgconf-2-4 libasound2 libxtst6 libxss1 libnss3 xvfb",
"start": "xvfb-run -a node build/server/index",
...
},
...
}
我从 otaviomedeiros 的评论中提取了一组简化的 apt-get 安装包:https://github.com/segmentio/nightmare/issues/224#issuecomment-225887320
我的想法是从 Daishi Kato 的有用文章中得到的:https://medium.com/google-cloud/how-to-use-phantomjs-with-node-js-on-google-app-engine-6f7feaea551#.6eoyvpn93 这篇免责声明包含在文章中:
Although the following procedure works well as of writing, that doesn’t mean it will work for a long time. I am not even sure if it is recommended. Please understand the risk.
所以就当它是什么,希望它能帮助到别人!
有 famous issue with nightmare and electron not running on headless linux servers. The official electron docs 建议使用 xvfb 来伪造显示。他们建议将此 .yml 文件用于 travis。
addons: apt: packages: - xvfb install: - export DISPLAY=':99.0' - Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
问题
如何将上面的代码片段用于 node.js 的 google appengine 的 app.yaml
文件中。我试图按原样使用它,但 glcoud 抛出一个错误,指出 addon
是无效命令。空档official docs没有类似命令
有什么建议可以 运行 在 google appengine 上 node.js 的 nightmare 和 electron node.js..?
这个问题有两部分相关:
- 运行 铬(什么电子,反过来,噩梦 "uses")在 linux. 上无头
- Install/Use xvfb 到 运行 App Engine 上的 chromium。
第 1 部分
您需要 xvfb。
Xvfb(虚拟帧缓冲区)只是一个程序,来自 wiki:"is a display server implementing the X11 display server protocol. In contrast to other display servers, Xvfb performs all graphical operations in memory without showing any screen output."
您需要 运行 没有屏幕输出的浏览器。
首先,在 linux.
上将所有 xvfb 相关包安装到 运行 它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 的环境变量指向它。 Chromium in Electron 会自动寻找 $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 package
从现在开始,您应该可以 运行 在 linux 上做噩梦了。
第 2 部分)
App Engine 上的 Nodejs 运行 通过柔性环境。意思是,通过 docker 个容器。
来自GAE nodejs 运行时间:"If your application requires additional operating-system-level dependencies, you will need to use a custom runtime based on this runtime to install the appropriate packages."
Docker 是一个完全独立的主题,但要使用 App Engine 执行上述操作,据我所知,您有两种选择:
从头开始使用 GAE custom runtime。
无论哪种方式,基本上您需要做的就是安装在 docker 文件中定义它们的 xvfb 相关包,这样就可以了。
祝你好运!
重要提示:
以上 apt-get 软件包取决于 linux 发行版的可用性(以上代码适用于 ubuntu 和 debian)。例如,使用指定的软件包集并在 post 时,它将与 GAE 的灵活环境一起工作,因为它基于 debian jessie 而不会在 linux alpine 上工作。
Chromium 需要至少 dev/shm 分配给 运行 井。例如,在 heroku 上它固定为 5mb - 并且无法更改它。 Chromium 会在一些噩梦般的动作后崩溃。因此,chromium 不适用于任何大小的 heroku 测功机。在 docker 中,它被设置为 64mb,因此根据脚本的复杂程度,您会做得很好或需要对其进行调整。在普通 linux 安装中,dev/shm 通常设置为总可用内存的一半。因此,在 512mb 环境中,dev/shm 将设置为 256mb,nightmare 很可能 运行 没问题。
感谢@rickmed 的详尽解答!它帮助我开始掌握在这种情况下使用 xvfb 的方法。 (
我正在使用 Nightmare 从端点生成 PDF。我的本地开发是在 OSX 上完成的,我在尝试让它在 Google App Engine 上运行时遇到了这个问题。我最初使用 rickmed 的回答让它工作,后来想出了另一种避免自定义 Dockerfile/runtime 的方法。我想我会在这里分享它。
我没有使用自定义 Dockerfile 并允许 gcloud 在部署期间为我生成一个。我的 yaml 文件使用 runtime: nodejs
。对于我对 Nightmare 的简单使用,我可以将预安装脚本添加到我的 package.json 并更新启动脚本。这就是让噩梦在 GAE 上工作所需要的全部。以下是我的 package.json:
{
"scripts": {
"preinstall": "apt-get update && apt-get install -y libgtk2.0-0 libgconf-2-4 libasound2 libxtst6 libxss1 libnss3 xvfb",
"start": "xvfb-run -a node build/server/index",
...
},
...
}
我从 otaviomedeiros 的评论中提取了一组简化的 apt-get 安装包:https://github.com/segmentio/nightmare/issues/224#issuecomment-225887320
我的想法是从 Daishi Kato 的有用文章中得到的:https://medium.com/google-cloud/how-to-use-phantomjs-with-node-js-on-google-app-engine-6f7feaea551#.6eoyvpn93 这篇免责声明包含在文章中:
Although the following procedure works well as of writing, that doesn’t mean it will work for a long time. I am not even sure if it is recommended. Please understand the risk.
所以就当它是什么,希望它能帮助到别人!