devngrow

блог о человеке и компьютере

Hugo на Github за N минут

Posted at — Nov 20, 2020
после неудачи с Gitlab, а конкретно с повторным соединением кастомного домена к моей Gitlab Page, махнув на это рукой, было принято решение использовать GitHub. На Github все немного по-другому, например в Gitlab можно создать приватный репозиторий, в котором будут храниться все файлы с локального устройства созданные командой hugo new site ., Gitlab сам сгенерирует сайт аля hugo server. Github Pages отображает index.html в коневой папке репозитория, и ни о какой генерации сайта здесь так речи не идет, поэтому в ходе этой статьи будет создана структура, которую надо понять и принять (если до этого подобное делалось на gitlab), а именно: будет создан приватный репозиторий с содержанием тех же файлов что и на локальной машине (как при hugo new site .), в котором будет храниться все подряд (генератор, настройки, доп материалы, статьи); будет создан публичный репозиторий username.github.io в котором будет размещен исключительно сгенерированный сайт. Ну и само собой маленький скрипт который автоматизирует этот “движ”. Едем

Шаг №1: Создание общей папки блога, соединение с GitHub.

Устанавливаем hugo на MacOS:

brew install hugo

Далее я бы рекомендовал создать(иметь) директорию GitHub, в которой и проводить собственно дальнейшие действия:

Темы для сайта на Hugo

mkdir blog
cd blog
hugo new site .
cd themes
git clone https://github.com/vividvilla/ezhil.git # на примере темы этого сайта
cp exampleSite/* ../..
cd ..
git init
git remote add origin https://github.com/username/blog_private_rep.git
git pull origin master
touch .gitignore
echo "public/" >> .gitignore
git add .
git status
git commit -m 'initial commit'
git push -u origin master https://github.com/username/blog_private_rep.git

Также необходимо редактировать параметр baseURL в файле config.toml на baseURL="username.github.io"

cd ..
git clone https://github.com/username/username.github.io.git
cd username.github.io
git pull origin master
cd ..
cd blog/
hugo -d ../username.github.io/
cd ../username.github.io/
git status
git add -all
git commit -m 'initial commit'
git push origin master

Сайт уже должен отображаться по адресу https://username.github.io/

Если не отображается тема - вероятнее всего ошибка в корректности значения baseURL в config.toml.

Шаг №2: Использование стороннего домена:

В настройках репозитория username.github.io https://github.com/username/username.github.io/settings в разделе GitHub Pages необходимо добавить адрес вашего домена и сохранить.

В настройках вашего домена необходимо добавить IP адреса Github’a.

@ A record 185.199.108.153

@ A record 185.199.109.153

@ A record 185.199.110.153

@ A record 185.199.111.153

Если что можно еще добавить redirect www.доменноеимя.com:

www URL Redirect Record https://доменноеимя.com

!!!

При использовании стороннего домена необходимо редактировать значение baseURL в config.toml и задать значение адреса сайта на домене: baseURL="https://доменноеимя.com"

Шаг №3: Немного автоматизации

В папке с приватным проектом (в примере: директория blog) создадим файл deploy.sh после этого откроем его (чем угодно, хоть блокнотом)

touch deploy.sh
nano deploy.sh

Файл deploy.sh должен иметь следующее содержание (обратите внимание, что все еще необходимо заменить username на Ваше !!):

#!/bin/sh

# If a command fails then the deploy stops
set -e

printf "\033[0;32mDeploying updates to GitHub...\033[0m\n"

# Build the project.
hugo -d ../username.github.io/ # здесь!

# Open generated site local
cd ../username.github.io/  # здесь!
# Add changes to git.
git add .

# Commit changes or you can edit it and use any other message.
msg="rebuilding site $(date)"
if [ -n "$*" ]; then
	msg="$*"
fi
git commit -m "$msg"

# Push source and build repos.
git push

Так же в качестве дополнительного средства автоматизации - упрощение запуска самого файла deploy.sh:

  1. Какой командой Вам было бы удобно запускать данный скрипт?

  2. Путь к самому файлу deploy.sh? например: ~/GitHub/blog/deploy.sh

  3. Вариации shell

    3.1 Если у Вас zsh (стандартно на MacOS Catalina и выше) ~/.zshrc

    3.2 Если у Вас bash на MacOS ~/.bash_profile

    3.3 Если у Вас bash на Linux ~/.bashrc

Тогда команда выглядела бы как:

echo "1=\"cd 2 && sh deploy.sh\"" >> 3, где вместо 1, 2, 3- ответы на соответствующие вопросы

Например:

echo "post=\"cd ~/GitHub/blog && sh deploy.sh\"" >> ~/.zshrc

После чего необходимо выполнить команду: source 3, продолжая пример это:

source ~/.zshrc

​ С GitHub оказалось сложнее понять структуру строения сайта и почему так, а tutorial на сайте hugo почему-то не сработал 🤷‍♂️ Нельзя сказать что GitHub работает с Hugo лучше, чем Gitlab, в плане документации, логики организации, деплоймента - тем не менее все работает как часы, а в данной структуре тоже можно найти свои плюсы. Например более гибкую систему составления и размещения постов, ведь теперь можно обходиться без черновиков, тестировать на локальном устройстве и пушить уже готовые статьи.

comments powered by Disqus