Führen Sie Puppeteer-Core auf Heroku aus (Docker Edition)

Es gibt einige Beispiele, die [Puppeteer-Heroku-Buildpack] verwenden (https://github.com/CoffeeAndCode/puppeteer-heroku-buildpack), aber es gibt nicht viele Beispiele, die Docker verwenden. Machen Sie sich also eine Notiz.

Führen Sie einen Docker-Container auf Heroku aus

Fast alles funktioniert mit einem HTTP-Server, auf dem nur ein Container ausgeführt wird. Sie müssen lediglich den HTTP-Server mit der durch "$ PORT" angegebenen Portnummer starten.

Die Details sind herumgeschrieben.

Versuchen Sie zunächst, etwas bereitzustellen, das nur den http.server von Python verwendet.

Dockerfile


FROM python:3.8-alpine

heroku.yml


build:
  docker:
    web: Dockerfile
run:
  web: python -m http.server $PORT

App-Einstellungen nur beim ersten Mal erforderlich

$ heroku create
$ heroku stack:set container

Bereitstellen

Einfach git push. Es ist wirklich einfach.

$ git push heroku master

image.png

Erstellen und Bereitstellen eines Docker-Images mit Puppeteer-Core und Google Chrome

Puppenspieler haben die Möglichkeit, Chromium herunterzuladen, aber es ist trotzdem am besten, Google Chrome (Stable) zu verwenden. (Vorurteil)

Versuchen Sie also, Puppeteer-Core ohne Chromium-Download-Funktion und Google Chrome in einem Docker-Image bereitzustellen.

Dockerfile


# ref: https://github.com/puppeteer/puppeteer/blob/main/.ci/node12/Dockerfile.linux
FROM node:12-slim

# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work.
RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENV PUPPETEER_EXECUTABLE_PATH /usr/bin/google-chrome-stable
ENV PUPPETEER_PRODUCT chrome

RUN mkdir /app
WORKDIR /app
COPY package.json /app/package.json
RUN npm install
COPY index.js /app/index.js
CMD npm start

Erstellen Sie für index.js einfach einen geeigneten HTTP-Server, suchen Sie bei Google nach hogehoge, wenn Parameter wie "Q = hogehoge" angegeben sind, und zeigen Sie den Text des Suchergebnisbildschirms an. Mit Dingen.

index.js


const http = require("http");
const url = require("url");
const puppeteer = require("puppeteer-core");

//create a server object:
http
  .createServer((req, res) => {
    const requestUrl = url.parse(req.url, true);
    let keyword = requestUrl.query["q"];
    if (!keyword) {
      res.write("request with ?q=xxxx");
      res.end();
    } else {
      puppeteer
        .launch({
          args: ["--no-sandbox", "--disable-setuid-sandbox"],
          executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
        })
        .then(async (browser) => {
          const page = (await browser.pages())[0] || (await browser.newPage());

          //Automatikbetrieb von hier
          await page.goto("https://google.com/");
          await page.type("input[name='q']", requestUrl.query["q"]);
          await Promise.all([
            page.waitForNavigation(),
            page.keyboard.press("Enter"),
          ]);

          let text = await page.evaluate(() => document.body.textContent);
          await page.close();

          res.write(text);
          res.end();
        });
    }
  })
  .listen(process.env.PORT);

package.json ist genau wie npm init --yes`` npm install Puppeteer-Core ohne besondere Wendung.

package.json


{
  "name": "heroku-docker-playground",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/YusukeIwaki/heroku-docker-playground.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/YusukeIwaki/heroku-docker-playground/issues"
  },
  "homepage": "https://github.com/YusukeIwaki/heroku-docker-playground#readme",
  "dependencies": {
    "puppeteer-core": "^5.2.1"
  }
}

heroku.yml


build:
  docker:
    web: Dockerfile
run:
  web: npm start

Es dauert lange, da der Docker-Build zum Zeitpunkt der Bereitstellung abgeschlossen ist. Wenn Sie jedoch warten, wird der HTTP-Server auf natürliche Weise gestartet.

Mit dieser Art von Gefühl ist es in Ordnung zu kommunizieren, wenn der Google-Fallergebnistext in einer Reihe angezeigt wird. image.png

Vielleicht funktioniert auch der Dramatiker

Wenn Puppenspieler-Core funktioniert, funktioniert auch Dramatiker-Core.

Für Dramatiker wird die Docker-Datei von Microsoft veröffentlicht, sodass Sie darauf verweisen können. https://github.com/microsoft/playwright/blob/master/docs/docker/Dockerfile.bionic

Abgesehen davon ist die Verwendung von Dramatikern mit Azure-Funktionen derzeit nicht intuitiv. Daher kann ich Heroku jedem empfehlen, der Dramatiker nur als Antwort auf eine HTTP-Anfrage ausführen möchte!

Recommended Posts

Führen Sie Puppeteer-Core auf Heroku aus (Docker Edition)
Führen Sie openvpn unter Docker aus (Windows)
Führen Sie das SSE-Beispiel (Server-Sent-Event) auf Docker aus
Schritte zum Ausführen von Docker auf einem Mac
Führen Sie die AWS CLI in Docker aus
So führen Sie JavaFX unter Docker aus
Stellen Sie das Docker-Image von Flask in Heroku bereit
Führen Sie PureScript auf einem Docker-Container aus
Stellen Sie Rails on Docker für Heroku bereit
Führen Sie NordVPN im Docker (Windows) Ubuntu-Container aus
Bis Sie Apache mit Ubuntu auf Docker ausführen
Führen Sie Ubuntu + ROS mit Docker auf dem Mac aus
Freiheit auf Docker
Heroku: Docker: Bereitstellen
Redmine auf Docker
Führen Sie JSP Hello World mit Tomcat auf Docker aus
Führen Sie die Docker-Umgebung Rails MySQL auf Heroku aus. Entwickeln und verstecken Sie die Twitter-API
Docker-Installation unter CentOS 6
Python-Memo auf Docker
Wir stellen Bugsnag Heroku vor
Führen Sie PostgreSQL unter Java aus
Installieren Sie Docker auf Manjaro
Yay! Ich bin auf Heroku!
Führen Sie Payara mit Docker aus
Verwenden Sie Corretto 11 mit Heroku
Führen Sie die Verarbeitung auf Ant aus
Führen Sie tiscamera unter Ubuntu 18.04 aus
Fehlerbehebung bei Heroku
Bis Sie Quarkus ausführen und Docker-Image auf Amazon ECS ausführen
Führen Sie lilypond auf Docker unter macOS Catalina aus, um eine Punktzahl zu erstellen
Installieren Sie Docker auf Raspberry Pi
Installieren Sie Docker unter Windows 10 PRO
Probieren Sie Docker unter Windows 10 Home aus
Oracle Java 8 unter Docker Ubuntu
Wie man mit Heroku einsetzt
Führen Sie Rails immer im Docker aus
Demontage des Docker-Ausführungsbefehls. .. ..
Führen Sie das Java-Applet auf Ubuntu aus
Gehostetes Apicurio Studio auf Docker
Installieren Sie Docker auf AWS EC2
Führen Sie Eclipse CDT unter Ubuntu aus
Führen Sie mruby / c auf PSoC 5 aus
Bis Ubuntu 20 installiert ist und Docker unter Windows 10 Home und WSL2 ausgeführt wird