Как я сделал этот блог

Это целая история. Я хотел воскресить свой бложик используя минимум усилий и времени, а в итоге написал свой движок и шаблонизатор... Что же тебе не сидится, а!?

Раньше, когда я только решил запустить свой блог в 2010 году я не долго думая выбрал Wordpress, это было мейнстримом в то время. Выбирать что-то другое не было смысла. Это крутой движок на PHP (на этом языке я тогда специализировался), на нем можно было делать вообще любые сайты, а вот механизм блогов там буквально из коробки. Там удобная админка, можно было легко писать посты, загружать картинки, настраивать разные свойства у страницы. Единственное, на что нужно было потратить время, это выбор прикольного и стильного шаблона, ну и по желания как-то его поднастроить под свои нужды и все, твой персональный блог готов. Почему сейчас, спустя 15 лет не сделать тоже самое?

На самом деле Wordpress до сих пор остается хорошим выбором, а установить его используя Docker-образ можно как никогда просто. Но что тогда не так? Изменилось мое отношение к способу хранения данных. Для WP нужна отдельная база данных. Сам движок обладает сложной структурой. Шаблоны из обычных html-файлов превратились в сложные скриптовые конструкции с бесконечными настройками и конфигурациями. Я же стремлюсь к максмальному упрощению, чтобы мой блог бы на столько простой и примитивный на сколько это вообще возможно сделать. Я хочу чтобы все данные, весь контент, который я набираю своими пальцами был в виде простых текстовых файлов а не базой данных, которую не так уж просто восстановить в случае чего. Я хочу, чтобы каждая страница была обычным Markdown-файлом, а шаблон состоял из одного html и css файла. И такой минимализм выглядит круто.

Я вдохновился некоторыми авторами, которые вели свои минималистичные заметки. Один из них был на платформе https://bearblog.dev/ но к сожалению это именно что платформа, а не опенсорсный движок, который можно установить себе. Потом стал смотреть в сторону генератора сайтов https://gohugo.io/ это очень мощная и продвинутая штуковина с огромным количеством готовых шаблонов и многие используют его для генерации личных блогов. Однако он слишком овер-пауэр для меня, мне не хотелось изучать и ковырять такое ультимативное решение для своей по сути примитивной задачи. Я стал искать более простые аналоги для генерации статических сайтов. Сейчас уже не вспомню варианты, которые рассматривал, но ничего из этого не подошло.

Требования были достаточно простые: никаких БД, хочу держать весь контент в публичном репозитории на гитхаб и использовать Github Pages для хостинга со своим доменом. Изначально я, конечно, рассматривал вариант хостить блог самостоятельно, но если есть Github Pages то зачем придумывать что-то еще, его возможностей хватает на 100%. Я просто заведу репозиторий с блогом, а скрипт Github Actions будет генерировать мне html-файлы. Это и есть идеально простой вариант не требующий своего хостинга, хранящий все данные в одном месте и можно использовать свой домен. Осталось найти подходящий генератор чтобы он работал с Actions. Не нашел ))

В общем опять в дело вступило правило, что если хочешь что-то сделать хорошо, сделай это сам. Да и было интересно реализовать свой генератор, ничего подобного раньше не делал, плюс за одной разобраться с тем как работает местный CI/CD, он же Github Actions, так как с ним я тоже дело не имел. Так родился мой домашний проект https://github.com/redspirit/slova который каждый прямо сейчас может использовать в своем проекте для генерации блога через Actions. Но делать этого не рекомендую, так как проект личный и никем кроме меня не тестировался и там еще есть что нужно допиливать. А еще по мере работы оказалось, что мне нужен свой шаблонизатор ) Изначально взял знаменитый и довольно простой Mustache, но быстро понял, что его фичей слишком мало, и так следом родился другой проект https://github.com/redspirit/listok его я и тестами покрыл и в npm опубликовал, так что рекомендую! Он основан на синтаксисе Mustache.js но сильно расширяет его использованием инклюдов шаблонов в шаблоне и гибкое управление контекстом блоков. В результате около месяца работы над этими проектами родился этот блог, он реализован и работает именно так как я и хотел.

Да, было потрачено много свободного времени, вместо того чтобы писать постики я кодил а потом лениво ловил баги. Однако в результате я получил очень приятное чувство контроля. Всю работу делает не какой-то "черный ящик" а код, каждая строчка которого написана собственными руками. Если что-то нужно будет изменить, я знаю как это сделать и результат будет предсказуемый. Ощущая это писать свои статьи и заметки стало еще приятней )