Other hosts
Netlify can build a site from GitHub, GitLab, or Bitbucket and publish a preview for each pull request. An OINK consumer build runs Hugo Extended directly; it does not install Node.js packages or invoke PostCSS.
Configure the site
Push the complete source to your Git provider, import the repository in Netlify, and use these build settings:
| Setting | Value |
|---|---|
| Build command | hugo --gc --minify |
| Publish directory | public |
HUGO_VERSION |
0.164.0 or another theme-validated version |
If Netlify detects package manifests that exist only for theme-maintainer tooling, disable automatic dependency installation for the site. They are not part of the consumer build contract.
For a theme installed as a Git submodule, enable recursive submodule checkout.
For a Hugo module, Netlify also needs the normal Git and Go access required to
download the pinned module on a clean build. A complete offline distribution
uses the site-owned themes/oink/ directory and avoids that first-build
download.
Keep configuration in the repository
The same settings can be committed as netlify.toml:
Keep production and deploy-preview contexts on the same Hugo version unless a preview is intentionally testing an upgrade. If preview builds need their generated URL as the base URL, add Netlify’s deploy URL to the Hugo command for that context.
To prevent a non-production deployment from being indexed, use a non-production Hugo environment as described in Build environments and indexing.
After saving the settings, trigger a deploy and inspect the build log. A normal consumer build should show one Hugo command and no npm, PostCSS, Autoprefixer, CDN download, or build-time remote-resource step.
Amazon S3 and CloudFront
There are several options for publishing your web site using Amazon Web Services. This section describes the most basic option, deploying your site using an S3 bucket and activating the CloudFront CDN (content delivery network) to speed up the delivery of your deployed contents.
-
After your registration at AWS, create your S3 bucket, connect it with your domain, and add it to the CloudFront CDN. This blog post has all the details and provides easy to follow step-by-step instructions for the whole procedure.
-
Download and install the latest version 2 of the AWS Command Line Interface (CLI). Then configure your CLI instance by issuing the command
aws configure(make sure you have your AWS Access Key ID and your AWS Secret Access Key at hand):CONSOLE -
Check the proper configuration of your AWS CLI by issuing the command
aws s3 ls, this should output a list of your S3 bucket(s).
-
Inside your
hugo.toml/hugo.yaml/hugo.json, add a[deployment]section like this one:Configuration file:hugo.tomlTOMLhugo.yamlYAMLhugo.jsonJSON
-
Run the command
hugo --gc --minifyto render the site’s assets into thepublic/directory of your Hugo build environment. -
Use Hugo’s built-in
deploycommand to deploy the site to S3:CONSOLEAs you can see, issuing the
hugo deploycommand automatically invalidates your CloudFront CDN cache. -
That’s all you need to do! From now on, you can easily deploy to your S3 bucket using Hugo’s built-in
deploycommand!
For more information about the Hugo deploy command, including command line
options, see this synopsis. In
particular, you may find the --maxDeletes int option or the --force option
(which forces upload of all files) useful.
If the source of your site lives in a GitHub repository, you can use GitHub Actions to deploy the site to your S3 bucket as soon as you commit changes to your GitHub repo. Setup of this workflow is described in this blog post.
If S3 does not meet your needs, consider AWS Amplify Console. This is a more advanced continuous deployment (CD) platform with built-in support for the Hugo static site generator. A starter can be found in Hugo’s official docs.