Virtual Network Computing: ネットワーク上の離れたコンピュータを遠隔操作するためのRFBプロトコルを利用する、リモートデスクトップソフト。サーバー、クライアントで別れている。
RFB: GUI操作によるリモートアクセス用の通信プロトコル。RFBはフレームバッファレベルで動作するため、X11やWin, Macを含む全てのウィンドウシステムとアプリケーションに適応できる。
Xvfb (X virtual framebuffer): ディスプレイのハードウェアや物理的な入力デバイスを持たないマシン上で動作する X server のこと。X11 display server protocolを実装した、display server。
X Window System (X, X11): ビットマップディスプレイ上でウィンドウシステムを提供する表示プロトコル。
- docker
- run xvfb in container
- run vnc server
- run chrome on xvfb
- host machine (mac)
- run vnc client
FROM node:11.3.0-alpine
# install headless chrome
ENV CHROME_BIN="/usr/bin/chromium-browser"
RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories \
&& echo http://dl-cdn.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories \
&& apk upgrade \
&& apk update \
&& apk add --no-cache \
ttf-freefont \
chromium \
xvfb \
x11vnc
ENV DISPLAY=:0
version: '3.4'
services:
web:
image: developers-dev-web
build:
context: ./
ports:
- 5900:5900
Xvfb $DISPLAY -screen 0 1600x950x24 & \
x11vnc -display $DISPLAY -rfbport 5900 -passwd PASSWORD -forever
await puppeteer.launch({
headless: process.env.CHROME_HEADLESS === 'true', // set true when run chrome on xvfb
executablePath: process.env.CHROME_BIN,
args: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage']
});