在 Google 云上部署 NodeJS、Puppeteer 和 Angular

Deploying NodeJS, Puppeteer, and Angular on Google Cloud

我有以下设置:

Angular前端
MongoDb 数据库
NodeJS/Express API 的后端(+ puppeteer)

部署步骤:
1. ng build -prod --> 在 /server
中创建 dist 2. gcloud app deploy (Node.js + Express + Puppeteer + Docker文件配置*)

因为木偶师基本上就是chrome;一些没有给我的图书馆必须上传。没问题,Docker 来救援。

FROM node:8-slim

MAINTAINER Eric Bidelman <ebidel@>


RUN apt-get update && apt-get install -y wget --no-install-recommends \
    && 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-unstable \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get purge --auto-remove -y curl \
    && rm -rf /src/*.deb

COPY . /app/
WORKDIR app

# Install deps for server.
RUN yarn


ARG CACHEBUST=1
RUN yarn add puppeteer

RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
    && mkdir -p /home/pptruser/Downloads \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser /app

USER pptruser

EXPOSE 8080

CMD ["yarn", "start"]

这取自 "try-puppeteer" github 回购 (https://github.com/ebidel/try-puppeteer)

现在前端是一个私人网站,最多2人。如何以 NodeJS 不必解决的方式部署 Angular?有人建议 "Google Cloud Bucket for [=53=].09/mo" 这很酷。

现在 MongoDB 实例正在使用 google 云计算引擎。该数据库有 400 个文档的集合,每个文档的大小为 11kb。仍在此处获取免费资源。

网站上的功能: 对于所有(已过滤的)文档 --> 执行需要我们加载 pupeteer().then( res.send(results))

的操作

这意味着平均一次处理来自前端的 200 API 个请求。尽管 NodeJS 处理得很好(一个接一个,同步地),但我正在考虑添加更多 "NodeJS-clones",也许我可以通过这种方式处理同时请求?

--这让我想知道,如果我同时有一个 300 个客户端的 NodeJS 服务器;如何处理请求?我怎么感觉请求之间没有 "stoppage"?是否有一个 1 乘 1 的队列;或者这是对 AJAX 的限制?

换句话说,我如何才能以能够处理这种请求瀑布的方式进行部署?

我已经阅读了 "nginx" 和 "forever," 但我更多的是沿着加载大约 10 个 puppeteer 实例的思路(甚至来自同一个 VM,例如选项卡或 windows) 他们可以同时工作。

这是我卡住的地方: 我知道我可以部署节点克隆;但是我如何使用 google 云来做到这一点,我可以通过分而治之来扩展。 (200 个请求 2 个请求 "per tick" 是 200 个请求 1 个请求 "per tick" 的两倍快。)

我是不是做错了?向后端发出 200 个请求,而不是用 200 个对象发出一个请求——另一个问题是担心超时。每个请求需要 40 秒才能完成。

App.yaml for "default"(be + fe一起部署):

runtime: custom
env: flex
service: default

automatic_scaling:
  max_num_instances: 1

resources:
  cpu: 1
  memory_gb: 1
  disk_size_gb: 10

skip_files:
- node_modules/
- test*.js
- ^(.*/)?.*\.md$

注意:回购中的确切 app.yaml 将我的成本提高到 250 美元/13 天。我需要找到一种更便宜的方法来执行这个程序。

我不完全确定 Google Cloud 的计费方式。如果它是消息吞吐量,那么 运行 headless Chrome 无论如何都将是昂贵的,因为它通过 WebSockets 发送请求(可能意味着有代价)。

如果您有兴趣,browserless is designed bottom-up for: headless browsers in the cloud. I've also open-sourced the underlying docker images here 这就是内容。

我认为底线是 many/most 那里的提供程序确实没有很好地设置来处理像浏览器一样执行的二进制文件。要么他们的部署方式使它变得困难,要么他们计费背后的方法使它变得昂贵。相信我,您关于计费和透明度的问题并不是我遇到的第一个问题。