Maksym Prokopov personal blog
Idea is a something worth sharing

Переезжая на Hugo

01.06.2020

Reading time: 4 min.

Первая запись в wordpress блоге датируется декабрем 2009. Видимо в это время мне стало понятно, что поддерживать контент-менеджмент в написанном на Parser 3 сайте nexus.org.ua стало накладно и я сделал выбор в пользу популярного движка блогов wordpress. Надо признать, под влиянием medium он сильно прибавил в юзабилити и редактировать посты стало в нем одно удовольствие.

Как видите на 2009 год я считал, что поднять mysql и запустить php было очень хорошей идеей. Все это так, пока ты не становишься старше и не принимаешь решение, что поддержкой wordpress ты заниматься не хочешь, потому что:

  1. Нужно следить за сертификатами от letsencrypt.
  2. Обновлять php.
  3. Обновлять wordpress, который хаканый-перехаканый неоднократно.
  4. Следить за состоянием mysql
  5. В 2010 году все это контейнеризировалось, но все же. Сложности добавилось с приходом докера. Как теперь безопасно обновлять имаджи и какие именно использовать?
  6. Следить за сетью в докере и связностью с контейнерами nginx и letsencrypt.
  7. Думать о бекапах базы mysql, думать о бекапах картинок к статьям.

В какой-то момент не хочется заниматься поддержкой всех этих технологий, а хочется просто писать в блог.

Чем старше становишься, тем больше ценишь простоту, в которой, как известно, гениальная истина.

Так на арене появился Hugo, отчасти еще и потому, что совпал с моей возрастающей заинтересованностью программированием на Go.

Вот мой новый стек:

  1. Hugo
  2. Disqus
  3. GitHub

К слову это не первый подход к выбору движка. Сначала мне понравилась идея с Perun, написанный на clojure модуль для системы сборки boot, которая позволяет функционально расширить его еще и до статического генератора сайтов. Присматривался на Jekyll, который, как известно на Ruby, а Ruby это наше все.

Сначала я сделал перепроектирование https://it-premium.com.ua на Hugo вместо RoR, и сразу понял, это - то что нужно! Во-первых статика это то, во что так или иначе переходит каждый сайт когда его рендером занимается браузер. Быстрее чем статический сайт сделать нельзя, хотя многие пытаются, используя Javascript-based фреймворки на подобие Gatsby.

Hugo поддерживает не только markdown, но и различные продвинутые сценарии, так в странице “Путешествую” список стран и мест находится в YAML файле и включается из Markdown при помощи custom tag. На каждой странице список друзей также стал формироваться из отдельного YAML. Кстати, уже никто не обменивается ссылками как раньше?

мой trips.yaml файл, рендер которого вы можете увидеть здесь

- date: 2020
  place: Испания, Барселона
  comment: увы и ах, из-за короны-19 отменена :(

- date: 2019-2020
  place: Норвегия, Аскер
  duration: 2 недели

- date: 2019
  place: Германия, Фрайбург
  duration: 3 дня

- date: 2019
  place: Австрия, Вена, 1 месяц
  duration: 1 месяц

- date: 2019
  place: Турция, пригород Анталии 1 неделя
  duration: 2 недели

- date: 2019
  place: Германия, Берлин
  duration: 3 дня

- date: 2019
  place: Сицилия, гастротур
  duration: 6 дней

- date: 2018-2019
  place: Таиланд, о. Самуи
  duration: полгода

- date: 2018
  place: Италия (Тоскана), гастротур
  duration: 6 дней

- date: 2018
  place: Финляндия (Юваскюля, Хельсинки)
  duration: 3 дня

- date: 2018
  place: Германия, Гамбург
  duration: 3 дня

- date: 2017
  place: Германия, Маннгейм, Штуттгарт
  duration: 1 месяц

- date: 2016
  place: Египет (Хургада), Турция (Стамбул)

- date: 2013-2014
  place: Тайланд (Бангкок, Айютайя, Паттайя) [Камбоджа (Сиам-Реап, Сиануквиль, Баттамбанг, Кампот, Пном-Пень)][1]

- date: 2012
  place: Малайзия (Куала-Лумпур, о. Тиоман) Филиппины (о. Боракай, о. Палаван (Ель-Нидо, Пуерто-Принсесса)) Индонезия (о. Сулавеси, Тогеанские о-ва (о. Маленге, о. Бомба), Тана-Тораджа (Рантепао + окрестности), Макассар, о. Бали)

- date: 2011
  place: Сингапур Вьетнам (Хошимин, Ханой, Хью, ) Индонезия (о. Бали, о. Ломбок, о. Ява (плато Диенг, Джогджакарта, вулкан Иджен)

- date: 2010
  place: Индонезия (о. Ява (вулкан Бромо) о. Бали)

- date: 2009
  place: Тайланд (Бангкок, о. Чанг)

- date: 2008
  place: Египет (Шарм-Ель-Шейх, Каир (пирамидки))

а рендерит его вот такой простой кусочек в layouts/shortcodes/travel.html

<ul>
{{ range $.Site.Data.travel }}
    <li>
        {{.date}} {{.place}} {{.duration}} {{.comment}}
    </li>
{{ end }}
</ul>

Все линки для навигации сверху берутся из соответствующих мета-полей в файлах в каталоге content/pages. Достаточно просто создать там новый файл с содержимым и он автоматически появится в меню!

My pages list as files

Для миграции всего контента с блога wordpress я воспользовался соответствуюей утилитой.

Остался вопрос с комментариями, и он также решается при помощи известного disqus. Дорогой читатель, подскажи, если знаешь engine получше.

Мне нравится эта элегантная простота, скорость рендера и общее удовольствие от процесса, а редактировать Markdown можно любым из редакторов по вкусу. Мой выбор - emacs.

P.S Так как мой выбор - emacs, то я могу публиковать заметки прямо в формате org-mode!