前言
随着云计算和DevOps的持续推广,如何快速方便的构建、部署分布式架构成为前端开发的一大难题。针对这个问题,近年来涌现了一些Serverless框架,如AWS Lambda和Google Functions等。云计算让服务器实例高度抽象化,使得部署变得更加轻便便捷,同时可以大大减少架构维护所需的工作量。
这里介绍一款npm包,能够有效提高前端开发中构建、部署的效率,即serverless-docker-artifacts
。
前提
在使用serverless-docker-artifacts
之前,需要先要安装以下环境:
- Docker
- Node.js
服务器构建流程
- 先将您的Webpack构建产物放到Docker镜像中。
- 接下来在目标服务器上运行您的Docker容器。
- 然后,将您的构建部署到云上。
使用方式
安装包
在项目目录中执行下面的命令进行安装:
npm install -D serverless-docker-artifacts
配置serverless.yml
在serverless.yml
的provider
中添加以下内容:
custom: docker: name: "<Docker容器名>" dockerfile: "./Dockerfile" context: "./dist" artifact: "./dist.zip"
说明:
name
:Docker容器的命名。dockerfile
:指定渲染Dockerfile的文件路径,在这里指向项目根目录下的Dockerfile
。context
:指定上下文路径,即该Dockerfile解析时使用的PATH。artifact
:指定部署应用的artifact。
配置Dockerfile
按照以下方式编辑Dockerfile
:
FROM lambci/lambda:nodejs10.x COPY . . RUN npm install --production CMD ["<函数处理名和文件名>.handler"]
说明:
lambci/lambda:nodejs10.x
:选用10.x版本的Node.js Lambda运行时。可以指定其他的版本,比如lambci/lambda:nodejs12.x
或lambci/lambda:ruby2.5
,具体请参阅AWS Lambda运行时。COPY . .
:将当前工作目录中的所有内容(即随后的项目资源)都复制到Docker容器的当前工作目录/var/task
中。RUN npm install --production
:安装生产环境的所有依赖。CMD ["<函数处理名和文件名>.handler"]
:指定在Docker容器中运行程序的命令。在本例中,指定了一个Lambda函数处理程序handler
,请替换成您的函数处理程序名称。
编译Dockerfile
在您的项目目录中执行以下命令来构建Dockerfile:
docker build -t <容器名标签的本地名称> .
在运行Dockerfile时,也可以指定其他参数,如使用--rm
参数来自动移除临时容器等。
运行Dockerfile
要运行您的Docker容器,请按照以下命令在命令行中输入以下命令:
docker run --rm <容器名称> [命令(在此例中为handler)]
构建部署到云上
在运行npm run build
(Webpack构建产物)之后,使用此命令来构建artifact(.zip文件):
serverless artifact
运行后,artifact将保存到“./dist.zip”目录中。
接下来,将artifact推送到云端并部署应用程序:
serverless deploy
除此之外,也可以在serverless.yml
中指明部署的区域:
provider: name: aws runtime: nodejs12.x region: us-west-2
这样一来,在运行serverless deploy
时,会将构建部署到该区域中。
结论
通过使用serverless-docker-artifacts
,可以轻松构建、部署前端项目,降低维护的难度,提高生产力。同时,本文介绍的内容基于AWS Lambda运行时,读者可以推广到其他如Google Cloud Platform和Microsoft Azure等的Serverless平台中。
本文所有的例子都可以在serverless-docker-artifacts的Github仓库中找到:https://github.com/claudiajs/serverless-docker-artifacts。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5551ab1864dac66b05