Как выложить свой сайт на Hugo в GitHub
Когда я захотел завести свою страницу в интернете, то сразу возник вопрос — а где ее разместить и как сделать? Вариантов несколько: платформа типа Blogger/LiveJournal, свой сервер и Wordpress/верстать самому/взять генератор сайтов. Готовые платформы не очень гибкие, а поддерживать решение на своем сервере не хочется. Да и свистелки мне были особо не нужны — только текст и картинки. В итоге я пришел к связке Hugo + Github Pages + Github Actions.
В двух словах что есть что.
- Hugo — генератор статических сайтов, создает html на основе markdown. Работает очень шустро, и мне показался наиболее понятным из существующих генераторов.
- Github Pages — хостинг статических сайтов. Можно добавить
index.html
в свой GitHub репозиторий, и он автоматичеки будет доступен наhttps://username.github.io/repo
. Можно привязать свой домен. - Github Actions — сервис для CI/CD. Может много чего, нам пригодится для автоматической сборки сайта.
Я не буду останавливаться на том, как установить и использовать Hugo, на сайте есть прекрасная документация.
Настройка Hugo
У GitHub Pages есть два режима работы — хостить сайт из корня master ветки, из директории /docs
в master ветке, или корня ветки gh-pages. Нам нужен второй режим, так как в корне будут лежать настройки и контент, а собранный сайт в отдельно директории. Для этого в config.toml
нужно добавить настройку publishDir = "docs"
. Если запустить команду hugo
, то можно увидеть директорию docs
с собранным html.
Настройка GitHub Pages
Тут все просто, особенно если не нужен свой домен. Нужно натыкать пару галочек в настройках проекта. В случае если хочется использовать свое доменно имя, нужно будет у провайдера доменных имен прописать DNS сервер, все это хорошо описано в документации.
Настройка GitHub Actions
На данный момент уже есть настроенный Hugo и GitHub pages. В принципе на этом можно и остановиться — написал статью, собрал сайт, закоммитил, запушил, и готово. Но хочется же все автоматизировать ;) Довольно часто, во время написания, Hugo запускается с параметрами для сборки черновиков, каких-то других тем, или вообще не запускается. Получается что после отправки версии в GitHub, мы можем получить не то, что хотим. Можно исключить человеческий фактор, и переложить сборку проекта на плечи GitHub Actions. Для этого нужно.
-
Добавить директорию
docs
в.gitignore
. То, что мы собираем локально, пусть и остается локально. -
Создать в корне проекта директорию
.github/worflows
, и положить туда файликpublish.yml
со следующим содержимым:name: publish on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@master with: ref: master - name: build uses: github-actions-x/hugo@master - name: push uses: github-actions-x/commit@master with: github-token: ${{ secrets.GH_TOKEN }} push-branch: 'master' commit-message: 'settings' force-add: 'true'
-
Получить GitHub токен. Нужен чтобы коммит из Github Actions происходил от лица пользователя, и триггерился запуск сборки Github Pages. Права нужно выдать на
repo
. -
Зайти в настройки проекта GitHub (таб с шестеренкой) ->
Secrets
. Нужно создать секрет с именемGH_TOKEN
, и вставить токен с предыдущего шага. -
Теперь можно запушить проект в GitHub, он автоматически соберется, появится коммит
publish
, и в GitHub Pages появятся изменения.