Node.js 使用 Docker 通过 Elastic Beanstalk 进行部署

Node.js Deployment through Elastic Beanstalk using Docker

我正在尝试使用链接到 Elastic Beanstalk 的 Dockerfile 部署一个 node.js 基于反应的同构应用程序。

当我 运行 我的 docker 在本地构建时,我能够成功地做到这一点。但是我注意到 npm install 命令需要相当长的时间才能完成。

尝试使用 eb deploy 命令部署应用程序时,亚马逊服务几乎崩溃,或者我收到如下错误:

ERROR: Timed out while waiting for command to Complete

我猜这是因为我的 node_modules 文件夹有 300MB 大。我也试过在 config.yml 文件中添加一个工件声明并以这种方式部署,但得到了同样的错误。

是否有将节点应用程序部署到 AWS Beanstalk 的最佳实践方法,或者是手动设置 EC2 实例并依赖代码提交 git 挂钩的最佳方法?

我的 Dockerfile 如下:

FROM node:argon 
ADD package.json /tmp/package.json
RUN npm config set registry https://registry.npmjs.org/
RUN npm set progress=false
RUN cd /tmp && npm install --silent
RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app

WORKDIR /usr/src/app
ADD . /usr/src/app

EXPOSE 8000

CMD npm run build && npm run start

...这是我的 config.yml 文件:

branch-defaults:
  develop:
    environment: staging
  master:
    environment: production
global:
  application_name: website-2016
  default_ec2_keyname: key-pair
  default_platform: 64bit Amazon Linux 2015.09 v2.0.6 running Docker 1.7.1
  default_region: eu-west-1
  profile: eb-cli
  sc: git
  1. 您应该将平台更改为更新的平台(我正在使用 docker 1.9.1,可能还有更新的版本)
  2. 我正在使用来自 docker 中心的图像将我的应用程序部署到 beanstalk 中。我使用我们的 CI 服务器构建它们,然后 运行 部署 从 docker 集线器中拉取图像的命令。这可以为您节省一个 很多构建错误(和构建时间),实际上更接近 Docker 不可变基础设施的哲学。
  3. 300MB for node_modules 不小,但应该没有问题。我们定期部署这种规模的依赖项和代码。