create-react-app + docker = QA和PROD Deploy
我为我的项目使用docker作为我的开发环境使用create-react-app。
现在我想知道如何将我的项目部署到AWS(我将部署泊坞窗)的最佳做法。
也许我的问题是一个虚拟的,但我真的坚持下去。
我的docker文件有一个命令的纱线开始…对于开发这是足够的,我不需要build立任何东西,我的包将运行在内存中,但对于QA或PROD我想用npm运行生成构build,但正如我所知它将创build一个新的文件夹,其中包含prod env应该使用的文件。
这就是说,我的问题是:这种情况的最佳做法是什么?
谢谢。
这就是我所做的:
- 使用
npm run build
来构build所有的静态文件。 - 使用
_/nginx
图像来定制一个服务于这些静态文件的HTTP服务器。 (Dockerfile) - 将自定义图像上传到Amazon EC2容器服务(ECS)。
- 在ECS任务中加载图像。 然后使用ELBv2启动负载平衡服务器,将所有外部请求转发给ECS。
- (可选)在ELBv2中启用HTTPS。
有一次的事情:
- 找出ECS的机制。 您需要为ECS创build至less一台主机服务器。 我使用了Amazon ECS优化的AMI 。
- 在ECS上创buildDocker存储库,以便您可以上传自定义的Docker镜像。
- 为您的服务创buildECS任务定义。
- 创buildECS集群并添加任务。
- configurationELBv2,以便将stream量转发到您的内部ECSdynamic端口。
- (可选)编写脚本以自动进行日常部署。
如果有人要我为他/她做这些事,我会得到报酬。 或者你可以自己找出这些线索。
但是,如果您的网站是一个简单的静态网站,我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/