Hugo部署
您可以使用"hugo deploy"命令直接将站点上传到Google Cloud Storage(GCS)存储桶、AWS S3存储桶和/或Azure存储容器。
假设条件
- 您已完成快速入门,或者已经准备好部署并与世界共享您的Hugo网站。
- 您在目标服务提供商(Google Cloud,AWS,或Azure)上拥有账户。
- 您已进行身份验证。
- Google Cloud:安装CLI并运行
gcloud auth login
。 - AWS:安装CLI并运行
aws configure
。 - Azure:安装CLI并运行
az login
。 - 注意:每个服务还支持其他的身份验证方式,包括使用环境变量。详情请参阅这里。
- Google Cloud:安装CLI并运行
创建要部署的存储桶
创建一个存储桶,以便将您的站点部署到其中。如果您希望您的站点是公开的,请确保将存储桶配置为可公开读取。
Google Cloud Storage(GCS)
按照GCS的创建存储桶说明进行操作。
AWS S3
按照AWS的创建存储桶说明进行操作。
Azure Storage
按照Azure的创建存储容器说明进行操作。
配置部署
在您的站点的配置文件中,添加一个包含一个或多个[[deployment.targets]]
部分的[deployment]
部分。每个部署目标都需要一个[[deployment.targets]]
部分。以下是一个详细的示例:
[deployment]
# 默认情况下,文件以随机顺序上传。
# 在“Order”列表中与正则表达式匹配的文件
# 将按照指定顺序先上传。
order = [".jpg$", ".gif$"]
[[deployment.targets]]
# 此目标的任意名称。
name = "mydeployment"
# 要部署的Go Cloud Development Kit URL。示例:
# GCS;请参阅https://gocloud.dev/howto/blob/#gcs
# URL = "gs://<Bucket Name>"
# S3;请参阅https://gocloud.dev/howto/blob/#s3
# 对于S3兼容的端点,请参阅https://gocloud.dev/howto/blob/#s3-compatible
# URL = "s3://<Bucket Name>?region=<AWS region>"
# Azure Blob Storage;请参阅https://gocloud.dev/howto/blob/#azure
# URL = "azblob://$web"
# 您可以使用“prefix=”查询参数来定位桶的子文件夹:
# URL = "gs://<Bucket Name>?prefix=a/subfolder/"
# 如果您正在使用CloudFront CDN,部署将根据需要进行缓存失效。
cloudFrontDistributionID = <ID>
# 可选的,您可以包含或排除特定的文件。
# 有关glob模式语法,请参阅https://godoc.org/github.com/gobwas/glob#Glob。
# 如果非空,则该模式与本地路径匹配。
# 所有路径都与它们的filepath.ToSlash形式进行匹配。
# 如果exclude非空,并且本地或远程文件的路径与之匹配,则该文件不会被同步。
# 如果include非空,并且本地或远程文件的路径与之不匹配,则该文件不会被同步。
# 结果是未通过include/exclude过滤器的本地文件不会上传到远程,
# 未通过include/exclude过滤器的远程文件不会被删除。
# include = "**.html" # 只会包含以".html"结尾的文件
# exclude = "**.{jpg, png}" # 排除以".jpg"或".png"结尾的文件
# [[deployment.matchers]]配置与Pattern匹配的文件的行为。
# 有关Pattern语法,请参阅https://golang.org/pkg/regexp/syntax/。
# 在找到第一个匹配项后停止进行Pattern搜索。
# 示例:
[[deployment.matchers]]
# 缓存静态资源1年。
pattern = "^.+\\.(js|css|svg|ttf)$"
cacheControl = "max-age=31536000, no-transform, public"
gzip = true
[[deployment.matchers]]
pattern = "^.+\\.(png|jpg)$"
cacheControl = "max-age=31536000, no-transform, public"
gzip = false
[[deployment.matchers]]
# 为/sitemap.xml设置自定义内容类型
pattern = "^sitemap\\.xml$"
contentType = "application/xml"
gzip = true
[[deployment.matchers]]
pattern = "^.+\\.(html|xml|json)$"
gzip = true
部署
要部署到目标,请执行以下命令:
hugo deploy [--target=<target name>,默认为第一个目标]
Hugo将识别并应用需要反映到远程目标的任何本地更改。您可以使用--dryRun
选项查看更改,而不应用它们,或者使用--confirm
选项在进行更改之前进行提示。
有关更多命令行选项,请参阅hugo help deploy
。