Jekyll & Hyde

13 November 2010 #jekyll #hosting

На сегодняшний день создается множество различных движков для создания сайтов. Самые популярные это WordPress, Drupal, Joomla, есть еще множество других, отличающихся по своим функциям и возможностям.

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

К другому классу относятся генераторы статических сайтов. Это скрипты/программы, которые позволяют на основании исходного кода и шаблонов страниц, подготовить готовые html-страницы, которые можно использовать на любом сервере. Таких генераторов не так много, но они есть. Самые известные – это Emacs Muse и Jekyll.

Про использование Emacs Muse очень хорошо описано на сайте Alex Ott в статье Как делался этот сайт, поэтому останавливаться на этом способе я не буду.

А затрону движок Jekyll, который используется в социальной сети Github.com.

Github.com предоставляет при регистрации несколько вариантов тарифных планов, самый распространенный – бесплатный, который позволяет использовать на сервере до 300 мегабайт дискового пространства для размещения своих файлов и организовывать неограниченное число публичных репозиториев.

Для того, чтобы организовать сайт, необходимо создать репозиторий вида username.github.com. В имени создаваемого репозитория, как понятно из примера, используется доменное имя третьего уровня, которое будет задействовано при работе.

Изменить домен на свой очень просто. Достаточно создать в репозитории файл CNAME, в котором будет содержаться только одна строка с именем нужного домена. После чего в панели регистратора доменного имени необходимо создать запись типа A, указывающую на ip-адрес 207.97.227.245.

По сути уже все готово для размещения любого статического сайта. Но нам ведь интересн не это. Интересно задействовать jekyll! Сделать это так же довольно просто.

В репозитории создается следующая файловая структура:

 .
 |-- _config.yml
 |-- _layouts
 |   |-- default.html
 |   `-- post.html
 |-- _posts
 |   |-- 2007-10-29-why-every-programmer-should-play-nethack.textile
 |   `-- 2009-04-26-barcamp-boston-4-roundup.textile
 |-- _site
 `-- index.html

Где: _config.yml – файл, который содержит в себе конфигурацию jekyll, о которой подробно можно прочесть на странице Configuration. Причем в файле обычно прописываются только какие-то изменения. По умолчанию используется стандартная конфигурация.

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

_posts – это каталог, который будет содержать в себе записи в формате markdown или html. Имя файла должно быть в следующем формате YEAR-MONTH-DATE-title.MARKUP.

_site – это каталог, в котором будут размещаться файлы, готовые для публикации. Рекомендуют данный каталог прописывать в файле .gitignore.

index.html – файл, в формате Liquid-разметки, содержащий в себе описание того, как будет выглядеть главная страница создаваемого сайта.

Jekyll может работать в виде скрипта, который будет запускаться только при изменении файлов. Обычно это желается путем прописывания строки запуска в скрипты git, отрабатываемых после очередного push. При таком режиме работы jekyll работает очень редко, только в тех случаях, когда требуется генерация страниц. Именно этот режим работы используется на сервере Github.com

Другой вариант работы – это когда jekyll сам начинает выполнять функции web-сервера. Довольно удобно использовать данный режим при отладке, когда генерация сайта производиться на локальной машине. При этом не требуется ставить никаких дополнительных сервисов, типа apache или nginx. И в то же время, можно посмотреть на результат своей работы, перед тем, как загрузить файлы на сервер.

Довольно большая коллекция сайтов, использующих Jekyll представлена на странице Sites. Там же есть ссылки на репозитории данных сайтов, можно посмотреть или использовать разметку страниц, которая используется на данных сайтах.

Для добавления комментариев обычно используют внешние системы, типа Disqus или IntenseDebate. Кто-то пытается разработать свою систему комментариев. Динамика сайту добавляется за счет использования внешних javascript-файлов.

На мой взгляд, jekyll и ей подобные системы генерации сайтов намного более эффективны при создании сайтов и порталов, чем динамические движки. Они позволяют снизить и время загрузки страниц сайта и существенно снизить нагрузку на сервер. Как мне кажется, будущее интернета именно за подобными системами, которые будут создавать основу сайта, а динамический контент будет организован за счет внешних сервисов. Что же будет в реальности, посмотрим.