Статический сайт на Hugo без внешней темы: свои шаблоны,
свой CSS. Собирается в GitHub Actions и публикуется на GitHub Pages по адресу
https://denistv.com/.
.github/workflows/pages.yml (env.HUGO_VERSION). Локальная и CI-версии должны
совпадать, иначе шаблон может собраться локально и упасть в CI.git@github.com:denistv/denistv.github.io.git по SSH.Установка на macOS:
brew install hugo
hugo version # ожидаемо: hugo v0.168.0+extended
hugo server -D # http://localhost:1313, включая черновики
hugo server # без черновиков, как на проде
hugo --minify --gc # разовая сборка в public/
hugo server пересобирает страницу при сохранении файлов. Если правка не видна —
проверьте, что сервер запущен из корня репозитория.
hugo.toml конфигурация: baseURL, язык, параметры сайта
content/_index.md главная страница
content/*.md остальные страницы
layouts/baseof.html каркас HTML: head, шапка, main, футер
layouts/index.html шаблон главной
layouts/_default/single.html шаблон обычной страницы
static/css/style.css стили: тёмная тема, мобильная вёрстка, print
static/favicon.svg иконка сайта
static/ всё отсюда публикуется в корень сайта
.github/workflows/pages.yml сборка и деплой на Pages
CNAME домен для Pages
Важно: static/css/style.css попадает на сайт как /css/style.css. Файлы из
корня репозитория (кроме static/) на сайт не копируются.
Главная — content/_index.md. Front matter в формате YAML:
---
title: "Заголовок страницы"
description: "Описание для meta description"
draft: true # черновик: не попадёт в сборку без -D
---
Тело — обычный Markdown: заголовки ##/###, списки, ссылки, таблицы.
Заголовок title выводится шаблоном, поэтому # H1 в теле не нужен — иначе
заголовок продублируется.
Новая страница — просто новый файл:
content/about.md → /about/
Черновики видны только в hugo server -D. Перед пушем черновик либо заполняется,
либо получает draft: false.
Картинки кладите в static/ (например static/photo.jpg) и ссылайтесь как
/photo.jpg. Указывайте alt и сжимайте файлы — репозиторий публичный.
layouts/baseof.html — общий каркас, страницы подставляют содержимое в блок:
<article class="page">
</article>
Что используется:
,, `` — данные страницы;, — данные из hugo.toml;css/style.css — ссылка, работающая и на домене, и на
github.io, и локально.Если нужен повторяющийся фрагмент — layouts/partials/name.html и вызов
``.
Один файл static/css/style.css, без препроцессоров и внешних шрифтов
(системный стек шрифтов). Цвета — CSS-переменные в :root, тёмная тема
включается через @media (prefers-color-scheme: dark).
При правках проверяйте три режима:
Cmd+P в браузере — ссылки должны быть читаемы, разрывы страниц
не должны рвать блоки.hugo --minify --gc
--minify — минификация HTML/CSS/JS;--gc — очистка неиспользуемого кеша ресурсов.Результат — в public/. Каталог в .gitignore и не коммитится: артефакт
создаёт CI.
Коммит и пуш в main:
git add -A
git commit -m "Обновить страницу"
git push
.github/workflows/pages.yml:
checkout → установка Hugo → hugo --minify --gc → upload-pages-artifact →
deploy-pages.Deploy from a branch, GitHub дополнительно собирает ветку Jekyll-ем и
перетирает результат Hugo.denistv.com (задан в настройках Pages). Файл CNAME
в репозитории для Actions-деплоя не обязателен.Ручной запуск без нового коммита: Actions → Deploy Hugo site to Pages →
Run workflow (workflow_dispatch).
denistv.com (apex) — только четыре A-записи:
185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153.
Лишние A/AAAA ломают выпуск сертификата.www.denistv.com — CNAME на denistv.github.io..services; из этого репозитория не меняется.certbot не нужен. После выпуска включается Enforce HTTPS.Проверка:
echo | openssl s_client -connect denistv.com:443 -servername denistv.com 2>/dev/null \
| openssl x509 -noout -subject -dates -ext subjectAltName
curl -I https://denistv.com/
| Симптом | Причина и что делать |
|---|---|
Сборка падает на Build |
смотреть лог шага; чаще всего синтаксис шаблона или front matter |
| На сайте 404 после пуша | Pages не включён, или Source = Deploy from a branch, или деплой ещё идёт |
| Правка не видна | кеш Pages max-age=600; открыть с ?v=1 или подождать 10 минут |
Ссылки ведут на localhost |
в hugo.toml сломан baseURL; должен быть https://denistv.com/ |
| Ошибка сертификата | домен не привязан к сайту, или появились лишние A/AAAA |
WARN deprecated |
обновить ключ конфига под текущую версию Hugo (например languageCode → locale) |
hugo --minify --gc перед пушем ловит большинство проблем локально.
public/ и не деплоить вручную поверх Actions.baseURL без одновременной правки настроек Pages.main; откат — через git revert.