使用 Amazon S3 和 CloudFront 部署

使用 Amazon S3 和 Amazon CloudFront 部署 Docsy 站点。

通过 Amazon Web Services 发布网站有多种方案。本节介绍最基础的一种:把站点部署到 S3 存储桶,并启用 CloudFront CDN(内容分发网络)来加速已部署内容的传输。

  1. 完成 AWS 注册后,创建 S3 存储桶,将其关联到你的域名,再加入 CloudFront CDN。可以参考这篇博客文章,其中包含完整流程和易于操作的分步说明。

  2. 下载并安装最新版 AWS 命令行界面(CLI)v2。随后运行 aws configure 配置 CLI 实例(请提前准备 AWS Access Key ID 和 AWS Secret Access Key):

    $ aws configure
    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: eu-central-1
    Default output format [None]:
    
  3. 运行 aws s3 ls 检查 AWS CLI 配置是否正确;命令应输出你的 S3 存储桶列表。

  1. hugo.tomlhugo.yamlhugo.json 中添加如下 [deployment] 分区:

    [deployment]
    [[deployment.targets]]
    name = "aws"
    URL = "s3://www.your-domain.tld"
    cloudFrontDistributionID = "E9RZ8T1EXAMPLEID"
    deployment:
      targets:
        - name: aws
          URL: 's3://www.your-domain.tld'
          cloudFrontDistributionID: E9RZ8T1EXAMPLEID
    {
      "deployment": {
        "targets": [
          {
            "name": "aws",
            "URL": "s3://www.your-domain.tld",
            "cloudFrontDistributionID": "E9RZ8T1EXAMPLEID"
          }
        ]
      }
    }
  1. 运行 hugo --gc --minify,将站点资源渲染到 Hugo 构建环境的 public/ 目录。

  2. 使用 Hugo 内置的 deploy 命令把站点部署到 S3:

    hugo deploy
    Deploying to target "aws" (www.your-domain.tld)
    Identified 77 file(s) to upload, totaling 5.3 MB, and 0 file(s) to delete.
    Success!
    Invalidating CloudFront CDN...
    Success!
    

    如输出所示,执行 hugo deploy 会自动使 CloudFront CDN 缓存失效

  3. 至此全部完成。今后只需使用 Hugo 内置的 deploy 命令,即可轻松部署到 S3 存储桶。

有关 Hugo deploy 命令及其命令行参数的更多信息,请参阅命令概览。其中,--maxDeletes int 和强制上传所有文件的 --force 参数可能会很有用。

如果 S3 无法满足需求,可以考虑 AWS Amplify Console。这是更高级的持续部署(CD)平台,内置对 Hugo 静态站点生成器的支持。Hugo 官方文档提供了相应的入门指南