Es gibt zwei Teile auf diese Frage bezogen werden:
- Lauf Chrom (was für Elektron und, wiederum Alptraum „uses“) kopflos auf Linux.
- Installieren/Verwenden Sie xvfb, um Chrom auf App Engine auszuführen.
Teil 1)
Sie benötigen xvfb.
Xvfb (Virtual Framebuffer) ist nur ein Programm, das von wiki:. „Ist ein Display-Server das X11-Display-Server-Protokoll Im Gegensatz zu anderen Display-Server Implementierung führt Xvfb alle grafischen Operationen im Speicher, ohne eine Bildschirmausgabe zeigt. "
Welches ist, was Sie brauchen, um einen Browser ohne Bildschirmausgabe zu betreiben.
Installieren Sie zunächst alle xvfb-bezogenen Pakete, um sie unter Linux auszuführen.
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
Also mit xvfb installiert benötigen Sie einen virtuellen xvfb Bildschirm zu erstellen und eine Umgebungsvariable namens DISPLAY exportieren, die er zeigt. Chromium in Electron sucht automatisch nach $ DISPLAY.
Die oben genannten können einfacher durchgeführt werden. Hier sind zwei Möglichkeiten:
Aufruf des Programm mit Linux cli (ignorieren die xvfb Warnungen, wenn der Alptraum Skript läuft gut):
xvfb-run -a node main.js
. Oder ...
Wenn Sie Rendering verwandte Funktionen wie Screenshots verwenden: xvfb-run -a --server-args="-screen 0 1280x1028x24 -ac +extension GLX +extension RANDR +render" node app.js
. Google die xvfb-Optionen nach Ihrem Geschmack anpassen.
Programmatically: xvfb npm package
Ab diesem Punkt sollten Sie Alptraum laufen auf Linux in der Lage verwenden.
Teil 2)
NodeJS auf App Engine wird über die flexible Umgebung läuft. Bedeutung, durch Docker Container.
Von GAE nodejs runtime: "Wenn für Ihre Anwendung zusätzliche Abhängigkeiten auf Betriebssystemebene erforderlich sind, müssen Sie eine angepasste Runtime basierend auf dieser Laufzeit verwenden, um die entsprechenden Pakete zu installieren."
Docker ist ein ganz anderes Thema, aber um die oben mit App Engine zu tun, haben Sie zwei Möglichkeiten, soweit ich weiß:
Extending the runtime
Verwenden GAE mit einem custom runtime aus kratzen.
So oder so, im Grunde, was würden Sie tun müssen, ist die xvfb verwandte Pakete installieren sie in der dockerfile definieren, und das sollte es tun.
Viel Glück!
Wichtige Hinweise:
Die oben apt-get-Pakete über die Verfügbarkeit abhängig in Bezug auf die Linux-Distribution (der obige Code funktioniert auf Ubuntu und Debian). Zum Beispiel, mit der angegebenen Menge von Paketen und zum Zeitpunkt dieses Posts, wird es mit der flexiblen Umgebung von GAE funktionieren, da es auf debian jessie basiert und nicht auf Linux alpine funktionieren wird.
Chrom benötigt eine minimale dev/shm-Zuweisung, um gut zu funktionieren. Zum Beispiel, auf Heroku ist es auf 5mb festgelegt - und es gibt keine Möglichkeit, es zu ändern. Chromium wird nach ein paar Alptraumaktionen abstürzen. Also wird Chrom auf keinen Herokus Dynos irgendeiner Größe funktionieren. In Docker ist es auf 64MB eingestellt, also abhängig von der Komplexität Ihres Skripts, werden Sie es gut machen oder müssen es anpassen. In normalen Linux-Installationen wird dev/shm normalerweise auf die Hälfte des gesamten verfügbaren Speichers gesetzt. In einer Umgebung mit 512 MB wird dev/shm also auf 256 MB gesetzt und Albtraum wird höchstwahrscheinlich gut laufen.
Es ist erwähnenswert, dass Sie nicht/dev/shm auf appengine ändern. –