使用 Amazon S3 和 CloudFront 部署
通过 Amazon Web Services 发布网站有多种方案。本节介绍最基础的一种:把站点部署到 S3 存储桶,并启用 CloudFront CDN(内容分发网络)来加速已部署内容的传输。
完成 AWS 注册后,创建 S3 存储桶,将其关联到你的域名,再加入 CloudFront CDN。可以参考这篇博客文章,其中包含完整流程和易于操作的分步说明。
下载并安装最新版 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]:运行
aws s3 ls检查 AWS CLI 配置是否正确;命令应输出你的 S3 存储桶列表。
在
hugo.toml、hugo.yaml或hugo.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" } ] } }
运行
hugo --gc --minify,将站点资源渲染到 Hugo 构建环境的public/目录。使用 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 缓存失效。至此全部完成。今后只需使用 Hugo 内置的
deploy命令,即可轻松部署到 S3 存储桶。
有关 Hugo deploy
命令及其命令行参数的更多信息,请参阅命令概览。其中,--maxDeletes int
和强制上传所有文件的 --force 参数可能会很有用。
如果站点源码位于 GitHub 仓库,可以使用 GitHub Actions,在每次向仓库提交变更后自动把站点部署到 S3。这篇博客文章介绍了工作流的配置方法。
如果 S3 无法满足需求,可以考虑 AWS Amplify Console。这是更高级的持续部署(CD)平台,内置对 Hugo 静态站点生成器的支持。Hugo 官方文档提供了相应的入门指南。