Содержание

Hugo

Hugo — это быстрый генератор статических сайтов (Static Site Generator), написанный на Go. Он превращает контент (Markdown) и шаблоны в готовые HTML-страницы без использования базы данных и серверной логики, что делает сайты очень быстрыми, безопасными и удобными для хостинга.

Практическая рекомендация, что выбрать YAML vs JSON

Hugo читает data‑файлы из каталога data/ в форматах YAML, JSON и TOML, после чего они доступны в шаблонах. Формат данных никак не влияет на конечный HTML: это просто разные способы сериализации ключ‑значение и массивов.

Технически можно без проблем комбинировать: глобальные справочники в YAML, «сырые» выгрузки из API в JSON — Hugo спокойно обработает оба варианта.

Установка Hugo в Linux

У меня сейчас под рукой Ubuntu 24.04.3 LTS, поэтому протестирую инструкцию на этой ОС. Проще установить Hugo версии из репозитория Ubuntu.

sudo apt update
sudo apt install hugo
 
$ hugo version
hugo v0.123.7+extended linux/amd64 BuildDate=2025-07-18T03:41:49Z VendorInfo=ubuntu:0.123.7-1ubuntu0.3

Если нужна самая свежая версия, можно скачать .deb с GitHub и поставить через dpkg, но для старта достаточно пакета из дистрибутива.

Не заработала нужная мне тема с это версией hugo - обновляем до последней

Скачиваем .deb Hugo Extended нужной версии и устанавливаем через dpkg. Версии hugo смотрим здесь https://github.com/gohugoio/hugo/releases В консоли Linux вводим команды, в переменной HUGO_VER задаем нужную версию hugo.

cd /tmp
HUGO_VER=0.152.0  # или другая актуальная
 
wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VER}/hugo_extended_${HUGO_VER}_Linux-amd64.tar.gz
tar -xzf hugo_extended_${HUGO_VER}_Linux-amd64.tar.gz
 
# В архиве один бинарник hugo
sudo mv hugo /usr/local/bin/hugo

Установленный бинарник окажется в /usr/local/bin/hugo, я для простоты использования затер системный бинарник установленный из репозитория.

cp /usr/local/bin/hugo /usr/bin/hugo

Создание первого сайта

Перейди в каталог, где хочешь держать проект (мой проект называется vs_engine). Эта команда создаст структуру каталогов (content/, layouts/, static/, config и т.д.).

hugo new site vs_engine
cd vs_engine

Инициализируй Git (желательно сразу), что упростит дальнейшую работу, деплой и откат изменений.

git init
git add .
git commit -m "init"

Добавление темы

cd /home/darkfire/vs_engine
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
echo "theme = 'ananke'" >> hugo.toml

Создание первой страницы и запуск

Создай первый пост:

hugo new posts/first-post.md

Hugo создаст файл с front matter и draft: true; отредактируй его и поставь draft: false, чтобы пост был виден.

Запусти dev‑сервер. По умолчанию сайт откроется на http://localhost:1313, пересборка идет автоматически при изменении файлов. Ключ D позволяет показывать также черновики ваших постов.

hugo server -D

Для продакшен‑сборки запусти просто hugo. Готовый статический сайт окажется в каталоге public/, его уже можно заливать на VPS, Nginx, GitHub Pages и т.п.

Содержимое public/ можно спокойно удалять, это просто результат сборки, а не исходники. Обычно public/ не коммитят в Git (добавляют в .gitignore), а используют только как артефакт для деплоя.

Статические файлы

В Hugo все статические файлы должны лежать в папке static.

FAQ 1: Как работает обычный пост (hugo new posts/first.md)

Когда ты создаешь обычный пост, ты пишешь текст внутри файла (после —). У этого поста нет параметра layout.

Hugo действует так:

  1. Видит пост в папке posts.
  2. Ищет специальный шаблон. Не находит.
  3. Берет стандартный шаблон темы (themes/ananke/layouts/_default/single.html).
  4. Этот шаблон делает простую вещь: берет текст твоего поста и выводит его на экран.

Если же мы генерируем файлы, то там не будет текста. Если мы применим к ним стандартный шаблон (как для обычных постов), то Hugo просто выведет Заголовок и… пустую страницу. Именно поэтому в Python-скрипте мы добавили строчку: layout: "compare". Эта строчка говорит Hugo: "Не используй стандартный шаблон! Ищи специальный файл с именем compare.html".

Куда положить этот compare.html?

Hugo ищет шаблоны в строгом порядке. Если твой контент лежит в content/posts, то Hugo ищет шаблон в такой последовательности:

  1. layouts/posts/compare.html
  2. layouts/_default/compare.html (Запасной вариант).

Обычные посты (без layout: "compare") будут по-прежнему открываться через стандартный шаблон темы.