在Google Cloud上部署NodeJS,Puppeteer和Angular

时间:2017-11-16 22:45:54

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

我有以下设置:

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

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

因为木偶操纵者基本上是铬;有些图书馆没有提供给我,必须上传。没问题,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"]

这是从&#34; try-puppeteer&#34; github repo(https://github.com/ebidel/try-puppeteer

现在前端是一个私人网站,最多2人。如何以NodeJS无法解决的方式部署Angular?有人建议&#34; Google Cloud Bucket每小时0.09美元&#34;这很酷。

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

网站上的功能: 对于所有(已过滤的)文档 - &gt;做行动,要求我们加载pupeteer()。然后(res.send(结果))

这意味着前端平均有200个来自前端的API请求被处理。即使NodeJS处理好这个(一个接一个,同步),我还在考虑添加更多&#34; NodeJS-clones&#34;,也许我可以用这种方式同时处理请求?

- 这让我很奇怪,如果我一次有300个客户端的NodeJS服务器;如何处理请求?我怎么感觉不到&#34;停工&#34;请求之间?是否有一个1乘1的队列;或者这是对AJAX的限制吗?

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

我已经读过&#34; nginx&#34;并且&#34;永远,&#34;但我更多的想法是加载10个木偶操作者的实例(甚至来自同一个虚拟机,如标签或窗口),他们可以同时工作。

在这里,我被困在哪里: 我知道我可以部署节点克隆;但我怎么能用谷歌云做,我可以通过划分和征服来扩展。 (2个请求的200个请求&#34;每个刻度线#34;是1个请求的200个请求的两倍&#34;每个刻度线#34;

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

App.yaml for&#34;默认&#34; (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天。我需要找到一种更便宜的方式来执行这个程序。

1 个答案:

答案 0 :(得分:1)

我不完全确定Google云计费的工作方式。如果它的消息吞吐量那么运行无头Chrome将会很昂贵,因为它通过WebSockets发送请求(意味着很有可能)。

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

我认为最重要的是,很多/大多数提供商都没有很好的设置来处理像浏览器一样执行的二进制文件。他们的部署方式使其变得艰难,或者他们的计费方法使其变得昂贵。相信我,当我说你的账单和透明度问题不是我遇到的第一个问题。