3 неправильных и 1 правильный способ сделать блог

Illustration of a person sitting on the floor, leaning against a wall with a book in hand, featuring a two-tone background split diagonally, stylized with soft shadows and a minimalistic design. Illustration of a person sitting on the floor, leaning against a wall with a book in hand, featuring a two-tone background split diagonally, stylized with soft shadows and a minimalistic design.

Моему личному сайту, kirill.sh, на котором можно найти всё, что я думаю о личной продуктивности, путешествиях и различных книгах, уже около 7 лет. Это был один из первых сайтов, которые я создал будучи пятнадцатилетним школьником. Конечно, на тот момент выглядел проект совсем иначе. Его дизайн и содержание я оставлю за кадром. Во-первых, потому что тогда мне придётся краснеть (и далеко не за дизайн). Во-вторых, потому что я в первую очередь хочу рассказать о технической стороне проекта, которая менялась по меньшей мере 4 раза.

Спойлер: если вы всё таки хотите, чтобы я краснел за свои предыдущие статьи, то вбейте fodoj.com в https://web.archive.org/. Или погуглите “fodoj.wordpress.com”.

V0: Только статика

Изначально сайт жил по адресу gornozavodsk.com. Это было впечатляющее месиво из javascript-свистоперделок, полуголых девиц из аниме и строк текста, которые мог написать только школьник, начавший изучать веб-разработку.

V1: blogger.com и wordpress.com

В какой-то момент я решил что хочу вести блог и завёл такой на blogger.com. Судя по всему, тот сервис мне показался неудобным и я перешёл на wordpress.com. Это было последнее правильное техническое решение, которое я принял касательно fodoj.com на последующие 7 лет. Блог на wordpress.com успешно просуществовал два с лишним года, после чего я захотел не просто какой-то блог, а полноценный личный сайт с крутыми штуками и невероятной гибкостью.

V2: Добро пожаловать в мир CMS

На тот момент я уже понимал, что писать свой движок для блога – тупое решение и нужно выбирать из существующих вариантов. При этом мне нужна была гибкость, позволяющая в любой момент выйти за пределы “просто блога” и добавить, например, плашку, выводящую какую книгу я в данный момент читаю (не спрашивайте).

Но если вам всё же интересно, какую книгу я в данный момент читаю, то добро пожаловать на goodreads.

Из всего зоопарка движков я в итоге остановился на ExpressionEngine. Это очень крутой движок, первая версия которого распространялась бесплатно. Сейчас первую версию вряд ли можно найти, а вторая раздаётся только за деньги.

ExpressionEngine мне очень понравился и служил мне верой и правдой целых два года подряд. Кстати, если вы ищете что-то похожее на ExpressionEngine, но бесплатное, то приглядитесь к ModX. Я использовал его для какого-то одного проекта много лет назад и мне понравилось. Возможно, оно всё ещё хорошее.

V3: Момент, когда всё пошло не так

В 2012-ом году мне надоело пользоваться ExpressionEngine. К тому моменту стало понятно, что никто не собирается выпускать к бесплатной версии новые фишки. Я устал от запутанного интерфейса, и мне хотелось чуть больше фич, чем система могла предложить. Более того, я решил полностью переделать дизайн. Короче говоря, я решил написать свой движок для своего блога. И написал. В итоге fodoj.com два года крутился на небольшом Rails-приложении.

На самом деле, у такого подхода есть определённые преимущества. Знаменитый в Ruby-сообществе Джеймс Эдвард Грэй Второй, например, для своего блога тоже написал свой движок. Вы можете выкатить свою хитрую систему комментариев и незаметно внедрить в блог, например, интернет-магазин и хостинг docker-контейнеров (новичкам от веб-дева и хипстерам: это была шутка).

В моём случае, мне нужны были такие “крутые” фишки как:

  • админка для случайных фраз, которые выводятся в шапке сайта
  • markdown редактор для текста
  • ...
  • плашка “этот сайт работает на моём собственном движке”

Со временем важность первого и последнего пунктов слегка снизилась (до нуля), а markdown можно получить и в других местах.

Недостатки же у поддержки своего движка чуть более весомы:

Временные затраты на разработку ненужных новых фич

Ладно: это всё таки Ruby on Rails и мне не составляет труда закодить любую нужную функциональность за расслабленный вечер, полный чая мате и оркестра Глена Миллера. Тем не менее, это целый вечер, который я мог бы потратить, например, на написание новых фич для mkdev или новых статей (или на что-то более приземлённое, типа похода в кино).

Но что более важно: сайт не нуждается в новой функциональности. За прошедший год я добавил следующие killer-фичи: robots.txt, sitemap и rss-фид. У нас на mkdev даже есть статья про то, как это всё сделать на Ruby on Rails: Правильный блог на Rails: sitemap, robots и rss.

В добавлении даже этих тривиальных вещей может оказаться множество небольших нюансов, о которых позаботились разработчики существующих систем.

Скорость

Существует определённый (и весьма очевидный) выигрыш в скорости при переходе с Rails приложения, крутящегося на бесплатном Heroku, на статический сайт, размещённый на AWS S3 и раздающийся через Cloudfront.

Поддержка

Новая уязвимость в Rails? Срочно обновлять FJEngine! Новая уязвимость в Ruby? Срочно обновлять FJEngine! Heroku поменял routing-правила? Ну вы поняли. Знаете, сколько разных уязвимостей в простом HTML файле? Вот именно что.

V4: Светлое будущее с Middleman

Встречайте Middleman: написанный на ruby генератор статичных сайтов. Принцип работы простой: вы создаёте сайт используя все удобные штуки, ускоряющие разработку. А затем генерируете одной командой итоговый набор HTML\CSS, который и заливаете на хостинг.

Из коробки Middleman поддерживает все радости современной веб-разработки вроде SCSS, erb-шаблонов, partials, локализации. Так же для него написана тонна расширений для любых нужд, включая деплой на S3 и подсветку кусков кода.

Существует несколько популярных альтернатив для Middleman. Самые значимые это Octopress и Jekyll. Последний даже используется для Github Pages. Я выбрал Middleman потому что, навскидку, для него гораздо больше готовых плагинов, его легче расширять и я работал с ним в прошлом. Официальный плагин для блога поддерживает всё, что мне нужно. Не исключаю, что всего, что мы будем делать в следующих статьях серии, можно добиться при помощи Octopress и Jekyll. У меня нет опыта ни с тем, ни с другим, поэтому буду рад услышать в комментариях истории успеха их применения.

Что дальше?

В следующих статьях серии я подробно опишу весь процесс миграции с FJEngine на Middleman и расскажу как автоматизировать деплой Middleman сайтов.