【问题标题】:Deploying NodeJS, Puppeteer, and Angular on Google Cloud在 Google Cloud 上部署 NodeJS、Puppeteer 和 Angular
【发布时间】:2017-11-18 00:25:12
【问题描述】:

我有以下设置:

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

部署步骤:
1. ng build -prod --> 在/server创建dist
2. gcloud app deploy(Node.js + Express + Puppeteer + Dockerfile config*)

因为 puppeteer 基本上是 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 repo (https://github.com/ebidel/try-puppeteer)

现在前端是一个私人网站,最多 2 人。如何以 NodeJS 不必解决的方式部署 Angular?有人建议“Google Cloud Bucket for $0.09/mo”,这很酷。

现在 MongoDB 实例正在使用谷歌云计算引擎。该数据库包含 400 个文档,每个文档大小为 11kb。仍然在这里免费资源。

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

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

--这让我想知道,如果我有一个 NodeJS 服务器一次可容纳 300 个客户端;如何处理请求?我怎么感觉不到请求之间的“停顿”?是否有一个 1 接 1 的队列?还是这是对 AJAX 的限制?

换句话说,我怎样才能以一种我可以处理这个请求瀑布的方式部署它?

我已经阅读了“nginx”和“forever”,但我更多地考虑加载可能 10 个 puppeteer 实例(即使来自同一个 VM,如选项卡或窗口),它们都可以工作同时。

这是我卡住的地方: 我知道我可以部署节点克隆;但是我将如何使用谷歌云来做到这一点,我可以通过划分和征服来扩展。 (“每滴答声”2 个请求时 200 个请求的速度是“每滴答声”1 个请求时 200 个请求的两倍。)

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

“默认”的 App.yaml(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$

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

【问题讨论】:

    标签: node.js docker nginx google-cloud-platform puppeteer


    【解决方案1】:

    我不完全确定 Google Cloud 上的计费方式。如果它是消息吞吐量,那么运行无头 Chrome 无论如何都会很昂贵,因为它通过 WebSockets 发送请求(这意味着可能会产生成本)。

    这是 browserless 自下而上设计的:云中的无头浏览器。如果你有兴趣,我也open-sourced the underlying docker images here

    我认为最重要的是,许多/大多数提供程序实际上并没有很好地设置来处理像浏览器一样执行的二进制文件。要么他们的部署方式使其变得困难,要么他们背后的计费方法使其变得昂贵。相信我,我不是第一次遇到您关于计费和透明度的问题。

    【讨论】:

    • 非常感谢您的回复,是的,谷歌云并不像看起来那么友好。我有一个 250 美元的应用程序账单和一个获取请求
    猜你喜欢
    • 2017-03-10
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多