create-react-app + docker = QA和PROD Deploy

我为我的项目使用docker作为我的开发环境使用create-react-app。

现在我想知道如何将我的项目部署到AWS(我将部署泊坞窗)的最佳做法。

也许我的问题是一个虚拟的,但我真的坚持下去。

我的docker文件有一个命令的纱线开始…对于开发这是足够的,我不需要build立任何东西,我的包将运行在内存中,但对于QA或PROD我想用npm运行生成构build,但正如我所知它将创build一个新的文件夹,其中包含prod env应该使用的文件。

这就是说,我的问题是:这种情况的最佳做法是什么?

谢谢。

这就是我所做的:

  1. 使用npm run build来构build所有的静态文件。
  2. 使用_/nginx图像来定制一个服务于这些静态文件的HTTP服务器。 (Dockerfile)
  3. 将自定义图像上传到Amazon EC2容器服务(ECS)。
  4. 在ECS任务中加载图像。 然后使用ELBv2启动负载平衡服务器,将所有外部请求转发给ECS。
  5. (可选)在ELBv2中启用HTTPS。

有一次的事情:

  1. 找出ECS的机制。 您需要为ECS创build至less一台主机服务器。 我使用了Amazon ECS优化的AMI 。
  2. 在ECS上创buildDocker存储库,以便您可以上传自定义的Docker镜像。
  3. 为您的服务创buildECS任务定义。
  4. 创buildECS集群并添加任务。
  5. configurationELBv2,以便将stream量转发到您的内部ECSdynamic端口。
  6. (可选)编写脚本以自动进行日常部署。

如果有人要我为他/她做这些事,我会得到报酬。 或者你可以自己找出这些线索。

但是,如果您的网站是一个简单的静态网站,我build议使用Github页面 :它是免费的,简单的。 我的解决scheme是多个静态+dynamic应用程序可能涉及其他服务(如Redis,ElasticSearch)和每天/每小时部署所需的。

您将不得不运行npm run build ,然后将生成的文件复制到您的容器中。 您可以使用单独的Dockerfile.build来构build文件,将其解压缩并将其添加到最终容器中。 您的最终容器应该能够提供文件。 你可以基于nginx或其他服务器。 您还可以将其用作现有服务器容器中的数据卷容器 。

Docker的最新版本允许您合并两个Docker文件,从而使这个过程变得更加简单。 你可以有一个构build容器,然后在同一个文件中定义最终的容器。

以下是您的用例的一个简单示例:

 FROM node:onbuild AS builder RUN npm run build FROM nginx:latest COPY --from=builder /usr/src/app/build /usr/share/nginx/html 

你可能想要包含你自己的nginxconfiguration文件。

更多关于多阶段构build:

https://docs.docker.com/engine/userguide/eng-image/multistage-build/