HUGO
Menu
GitHub 87415 stars Mastodon

Host on Cloudflare

Host your site on Cloudflare.

Use these instructions to enable continuous deployment from a GitHub repository. The same general steps apply if you are using GitLab for version control.

Prerequisites

Please complete the following tasks before continuing:

  1. Create a Cloudflare account
  2. Log in to your Cloudflare account
  3. Create a GitHub account
  4. Log in to your GitHub account
  5. Create a GitHub repository for your project
  6. Create a local Git repository for your project with a remote reference to your GitHub repository
  7. Create a Hugo project within your local Git repository and test it with the hugo server command

Procedure

Step 1
Create a wrangler.toml file in the root of your project.
wrangler.toml
name = 'hosting-cloudflare-worker'
compatibility_date = '2025-07-31'

[build]
command = 'chmod a+x build.sh && ./build.sh'

[assets]
directory = './public'
not_found_handling = '404-page'
Step 2
Create a build.sh file in the root of your project.
build.sh
#!/usr/bin/env bash

#------------------------------------------------------------------------------
# @file
# Builds a Hugo site hosted on a Cloudflare Worker.
#
# The Cloudflare Worker automatically installs Node.js dependencies.
#------------------------------------------------------------------------------

# Exit on error, undefined variables, or pipe failures
set -euo pipefail

build_temp_dir=""

# Perform cleanup
cleanup() {
  if [[ -n "${build_temp_dir:-}" && -d "${build_temp_dir}" ]]; then
    rm -rf "${build_temp_dir}"
  fi
}

# Register the cleanup trap
trap cleanup EXIT SIGINT SIGTERM

main() {
  # Define tool versions
  DART_SASS_VERSION=1.99.0
  GO_VERSION=1.26.1
  HUGO_VERSION=0.160.0
  NODE_VERSION=24.14.1

  # Set the build timezone
  export TZ=Europe/Oslo

  # Create and move into a temporary directory for downloads
  build_temp_dir=$(mktemp -d)
  pushd "${build_temp_dir}" > /dev/null

  # Create the local tools directory
  mkdir -p "${HOME}/.local"

  # Install Dart Sass
  echo "Installing Dart Sass ${DART_SASS_VERSION}..."
  curl -sLJO "https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz"
  tar -C "${HOME}/.local" -xf "dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz"
  export PATH="${HOME}/.local/dart-sass:${PATH}"

  # Install Go
  echo "Installing Go ${GO_VERSION}..."
  curl -sLJO "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz"
  tar -C "${HOME}/.local" -xf "go${GO_VERSION}.linux-amd64.tar.gz"
  export PATH="${HOME}/.local/go/bin:${PATH}"

  # Install Hugo
  echo "Installing Hugo ${HUGO_VERSION}..."
  curl -sLJO "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-amd64.tar.gz"
  mkdir -p "${HOME}/.local/hugo"
  tar -C "${HOME}/.local/hugo" -xf "hugo_${HUGO_VERSION}_linux-amd64.tar.gz"
  export PATH="${HOME}/.local/hugo:${PATH}"

  # Install Node.js
  echo "Installing Node.js ${NODE_VERSION}..."
  curl -sLJO "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz"
  tar -C "${HOME}/.local" -xf "node-v${NODE_VERSION}-linux-x64.tar.xz"
  export PATH="${HOME}/.local/node-v${NODE_VERSION}-linux-x64/bin:${PATH}"

  # Return to the project root
  popd > /dev/null

  # Verify installations
  echo "Verifying installations..."
  echo Dart Sass: "$(sass --version)"
  echo Go: "$(go version)"
  echo Hugo: "$(hugo version)"
  echo Node.js: "$(node --version)"

  # Configure Git
  echo "Configuring Git..."
  git config core.quotepath false
  if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then
    git fetch --unshallow
  fi

  # Build the site
  echo "Building the site..."
  hugo build --gc --minify
}

main "$@"
Step 3
Commit the changes to your local Git repository and push to your GitHub repository.
Step 4
In the upper right corner of the Cloudflare dashboard, press the Add button and select “Workers” from the drop down menu. screen capture
Step 5
On the “Workers” tab, press the Get started button to the right of the “Import a repository” item. screen capture
Step 6
Connect to GitHub. screen capture
Step 7
Select the GitHub account where you want to install the Cloudflare Workers and Pages application. screen capture
Step 8
Authorize the Cloudflare Workers and Pages application to access all repositories or only select repositories, then press the Install & Authorize button. screen capture

Your browser will be redirected to the Cloudflare dashboard.

Step 9
On the “Workers” tab, press the Get started button to the right of the “Import a repository” item. screen capture
Step 10
Select the repository to import. screen capture
Step 11
On the “Set up your application” screen, provide a project name, leave the build command blank, then press the Create and deploy button. screen capture
Step 12
Wait for the site to build and deploy, then visit your site. screen capture

In the future, whenever you push a change from your local Git repository, Cloudflare will rebuild and deploy your site.