将网站部署到 S3 上

优质
小牛编辑
130浏览
2023-12-01

原文链接:Serverless 应用开发指南:使用 S3 部署静态网站

在尝试了使用 Router53 路由到 S3 后,并想试试能否使用 serverless 框架来上传静态内容。在探索官方的 DEMO 后,找到了一个 serverless-finch 插件可以做相应的事情。

serverless create --template aws-nodejs s3-static-file s3-static-file

配置 serverless-finch

官网的 serverless-client-s3 已经停止维护了,并推荐使用 serverless-finch

serverless-finch 的安装方式是:

npm install --save serverless-finch

默认的官网生成的项目,并没有 package.json 文件,需要手动执行 npm inti,再安装插件。

因此修改完后的 package.json 文件如下所示:

{
  "name": "s3-static-file",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Phodal Huang",
  "license": "MIT",
  "dependencies": {
    "serverless-finch": "^1.1.1"
  }
}

在这个时候,我们需要按 serverless 框架的插件要求,添加如下的内容:

plugins:
  - serverless-finch

并配置好我们的 S3 存储桶的名字,最后 serverless.yml 文件的内容如下所示:

service: s3-static-file


plugins:
  - serverless-finch

provider:
  name: aws
  runtime: nodejs6.10

custom:
  client:
    bucketName: wdsm.io

我们配置的 S3 存储桶的名字是: wdsm.io,然后其使用 client/dist 文件来放置静态文件。

静态内容

如我们的 index.html 文件的路径是: client/dist/index.html,对应的内容是:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WDSM.io</title>
</head>
<body>
    <h1>WDSM</h1>
</body>
</html>

最后,执行 serverless client deploy 就可以部署我们的网站。

再次提醒,这次我们用的是 serverless client deploy

相应的过程日志如下所示:

Serverless: Deploying client to stage "dev" in region "us-east-1"...
Serverless: Bucket wdsm.io exists
Serverless: Listing objects in bucket wdsm.io...
Serverless: Deleting all objects from bucket wdsm.io...
Serverless: Configuring website bucket wdsm.io...
Serverless: Configuring policy for bucket wdsm.io...
Serverless: Configuring CORS policy for bucket wdsm.io...
Serverless: Uploading file error.html to bucket wdsm.io...
Serverless: If successful this should be deployed at: https://s3.amazonaws.com/wdsm.io/error.html
Serverless: Uploading file index.html to bucket wdsm.io...
Serverless: If successful this should be deployed at: https://s3.amazonaws.com/wdsm.io/index.html

由于配置了 Router53 指向了 S3,因此可以直接访问:http://wdsm.io/ 来看最后的内容。

并且,对应的删除命令也变成了:serverless client remove