Выбираем генератор статических сайтов

Написал 10 сентября, 2014 в 16:35

облачное хранилище

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

Первая публикация в этом цикле будет посвящено сравнительному анализу генераторов статических сайтов.

Критерии сравнения

Генератором статических сайтов называется программный инструмент, превращающий текстовые записи (с разметкой или без) в статичные HTML-страницы. Все инструменты такого рода работают примерно одинаково: берется контент, склеивается с шаблоном, после чего отправляется на хостинг. Количество существующих генераторов статических сайтов исчисляется сотнями, если не тысячами.

Как из всего этого множества выбрать действительно стоящий продукт? Мы решили подготовить свой сравнительный обзор, который. как мы надеемся. поможет кому-то из вас определиться с выбором. Для сравнения мы отобрали генераторы, которые, во-первых, можно «подружить» с нашим облачным хранилищем. Во-вторых, мы учитывали еще и следующие критерии:

  • простоту установки и настройки;
  • наличие дополнительных расширений и плагинов;
  • уровень поддержки (как развивается продукт, как часто он обновляется; имеется ли подробная документация);
  • поддерживаемые способы деплоя.

Обзор генераторов

MiddleMan, Jekyll, Octopress

Все три из перечисленных генераторов написаны на Ruby и во многом схожи по набору функций. Именно поэтому мы решили объединить их в одну группу.

Процедура установки всех этих продуктов сопряжена с некоторыми трудностями: версии Ruby, включенной в официальные репозитории Linux-систем, скорее, всего будет недостаточно — придется обновить ее до самой последней. Также потребуется установить менеджер пакетов RubyGems и менеджер версий Rbenv.

MiddleMan мы активно используем в собственной практике: именно на нем работает промо-сайт облачного хранилища, а также сайт selectel.io. Несомненным его преимуществом является хорошая и подробная документация, написанная простым и понятным языком. Для Middleman написано немало расширений и плагинов, список которых постоянно обновляется.

Поддерживается деплой с помощью FTP, SFTP, rsync, git (на официальном сайте выложены скрипты для автоматизации процедуры деплоя; еще одно расширение опубликовано на GitHub). Возможен также деплой на AWS и BitBalloon (имеются соответствующие плагины).

Jekyll (см. также статью на Хабре ) известен в первую очередь тем, что используется в качесте дефолтного движка для статических сайтов на основе GitHub Pages. Очень часто он используется для ведения блогов. Несомненным преимуществом Jekyll является поддержка разметки Liquid: это дает возможность создавать шаблоны, используя конструкции исключительно языка разметки, а не языка программирования.

Расширений и плагинов для Jekyll существует довольно много (см. информацию на официальном сайте, а также здесь и здесь). Официальные плагины «заточены» в основном на работу с GitHub Pages. Плагины, опубликованные на GitHub, в большинстве своем предназначены для расширения возможностей блоггинга (добавление облака тэгов, полнотекстовый поиск по блогу и даже специализированный плагин для научных и образовательных блогов).

Поддерживается деплой по FTP, а также с помощью rsync и git.

В отличие от двух предыдущих продуктов, Octopress является специализированным генератором: он по сути представляет собой надстройку над Jekyll c дополнительными плагинами и responsive-шаблоном, обеспечивающими более удобное ведение блогов.

В качестве формата разметки постов по умолчанию используется Markdown, но можно использовать и обычный HTML. Несомненным плюсом Octopress является поддержка переезда с других площадок: например, все записи из блога на Wordpress можно перенести в новый статический блог при помощи специального скрипта (правда, велика вероятность того, что после переноса оформление некоторых текстов может «поломаться», и их потребуется править вручную). «Из коробки» поддерживается и работа с сервисом Disqus, что упрощает перенос комментариев. Блог на основе Octopress можно интегрировать с социальными сетями (Facebook, Twitter, Google Plus и другими).

Существуют плагины, реализующие, например, вставку календарей (похожих на те, что иногда встречаются в блогах на Wordpress), списка похожих постов, облака тэгов и так далее.

По умолчанию поддерживается деплой с помощью git (на GitHub Pages или Heroku) или rsync (на любой хостинг, где можно настроить SFTP или можно запустить rsync). Можно настроить и деплой по FTP (о том, как это сделать, можно прочитать, например, здесь).

Hyde

Этот генератор статических сайтов изначально замышлялся как полный аналог Jekyll, только написанный на Python — отсюда и название, отсылающее к знаменитой повести Р.Л. Стивенсона «Странная история доктора Джекилла и мистера Хайда».

Следует различать старую и новую версию Hyde. Старая версия основана на Django templates; в настоящее время ее разработка приостановлена (последние коммиты в репозитории на GitHub датируются 2009 — 2010 годом). Новый Hyde (см. также репозиторий на GitHub) в настоящее время находится в активной разработке.

По функциональности новый Hyde не отличается от MiddleMan и Jekyll. Мы немного потестировали его, и он произвел на нас вполне приятное впечатление. Из обнаруженных недостатков выделим только один: проект, как уже сказано выше, находится в стадии активной разработки. Именно поэтому документация к нему представлена пока что в очень сжатом и лаконичном виде, а плагинов и расширений существуют очень мало (вот их небольшой список на официальном сайте).
Поддерживается деплой на GitHub Pages и Amazon S3.

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

Pelican

Pelican также написан на Python. По сравнению со многими генераторами статических сайтов он обладает исключительно широким набором функций: работа с черновиками, интеграция с социальными сетями, добавление изображений, конвертация HTML-страниц в PDF, поддержка многоязычности и многое другое. Он очень хорошо подходит для ведения блогов (существует плагин для переноса блогов на Wordpress). Посты можно писать в Markdown, а также в форматах reStructuredText и Asciidoc.

Устанавливается Pelican через pip. При установке пользователю будут заданы несколько вопросов: где хранить файлы сайта, как будет называться сайт, куда и каким способом его нужно деплоить. Поддерживается множество способов деплоя: по FTP, по SSH, на Amazon S3, GitHub Pages, Dropbox и RackSpace Cloud Files.

Grow

Grow (см. также официальный репозиторий на GitHub) — очень интересный и перспективный инструмент, обнаруженный нами совсем недавно. Он написан на Python. Чтобы установить Grow, достаточно скачать скрипт с официального сайта — все необходимые пакеты будут установлены в автоматическом режиме.
В основе Grow лежит подход «конфигурация, а не код». Что это значит? Чтобы создать новый проект (в терминологии Grow проекты называются подами — pods), нужно клонировать на локальную машину тему, которая представляет собой репозиторий на GitHub. Тема включает набор конфигурационных файлов, с помощью которых описывается вся архитектура веб-сайта. Никакого программного кода при этом писать не нужно.

Все настройки проекта хранятся в конфигурационном файле podspec.yaml. В нем указываются следующие параметры:

    • метаданные проекта (имя и т.п.);
    • используемые в проекте инструменты предварительной обработки (например, SASS, Closure Compliler или другие);
    • информация по локализации сайта (в частности, список локалей, в которых сайт будет доступен);
    • информация о статичных файлах и специальных страницах;
    • настройки деплоя.

Как осуществляется в Grow работа с контентом? Весь редактируемый контент (он может быть представлен как в формате Markdown, так и в HTML) хранится в директории /content. Структрура страниц описывается в конфигурационных файлах в формате YAML (см. пример здесь). Во время сборки сайта Grow генерирует страницы на основе прописанных настроек.

Grow может автоматически переводить текстовые фрагменты — для этого используется библиотека Goslate library, работающая с Google Translate. Чтобы перевести сайт, достаточно просто выполнить команду translate.

В качестве площадки для деплоя можно указать любой веб-сервер. Поддерживается деплой на Dropbox, Google Cloud Storage, Amazon S3, Dropbox, Google AppEngine.

Конечно, в рамках беглого обзора рассказать обо всех особенностях работы с Grow вряд ли возможно. Рекомендуем попробовать — инструмент очень перспективный.

Nanoblogger

Этот генератор статических сайтов, ориентированный на создание блогов, примечателен тем, что написан на bash. В качестве основных инструментов для создания статичных HTML-страниц он использует утилиты командной строки cat, grep и sed.
При всей своей простоте Nanoblogger по возможностям не уступаем многим генераторам, написанным на Python или Ruby. Из его полезных функций можно выделить поддержку Atom/RSS, возможность создания на сайте календаря, сортировку постов по категориям, создание архива постов и другие.

Устанавливается Nanoblogger предельно просто: он включен в официальный репозитории большинства популярных дистрибутивов Linux и устанавливается при помощи стандартного менеджера пакетов.

С Nanoblogger удобно работать из командной строки. Все команды подробно описаны в документации, их синтаксис прост и понятен.
Исходный код также написан предельно просто, в случае необходимости его всегда можно модифицировать и «подогнать» под нужды конкретного проекта (см., например, публикацию, в которой автор делится собственным опытом конфигурирования блога на основе Nanoblogger).

Для nanoblogger существуют плагины и расширения. Официальный набор плагинов (nanoblogger extras) также включен в официальные репозитории и устаналивается стандартным способом.

К сожалению, в 2013 году работа по развитию и усовершенствованию Nanoblogger была приостановлена на неопределенный срок (см. информацию на официальном сайте).

DocPad

DocPad написан на CoffeeScript. Для работы с ним на клиентской машине должен быть установлен NodeJS.

Многими он используется для блогов, но реальные возможности его применения гораздо шире. Этот продукт не представляет собой генератор статических сайтов в чистом виде: его можно использовать и как генератор, и как движок, и как шаблонизатор. DocPad оснащен достаточно удобным API, который позволяет использовать только те функции, которые нужны в данный момент; остальные всегда можно реализовать самостоятельно.

Несомненным преимуществом DocPad является, конечно же, очень подробная документация. Кроме того, на официальном сайте опубликованы так называемые «скелеты» — заготовки, на основе которых пользователи могут создавать собственные сайты.

Для DocPad написано множество разнообразных плагинов. Из наиболее интересных расширений отметим WYSIWYG-редакторы и веб-интерфейсы, облегчающие публикацию постов в статическом блоге.

На официальном сайте опубликованы скрипты, автоматизирующие деплой на различные площадки: Heroku, Appfog, Windows Azure, Docker, GitHub Pages и другие. Имеется и специализированный скрипт для деплоя в облачные хранилища — Amazon S3 и GoogleStorage.

Заключение

Результаты проделанного обзора можно резюмировать в виде следующей таблицы:

Генератор Язык Лицензия Установка Поддержка Расширения Деплой
MiddleMan
3.3.5
Ruby MIT Требуется последняя версия Ruby, RubyGems Имеется подробная документация, обновления выходят регулярно Много плагинов и расширений, регулярно появляются новые FTP, SFTP, rsync, Git, AWS, BitBalloon
Jekyll
2.3.0
Ruby MIT Требуется последняя версия Ruby, RubyGems, Rbenv Имеется подробная документация, обновления выходят регулярно Много плагинов и расширений Git, FTP. SFTP, rsync, Amazon S3, Heroku
Octopress
3.0
Ruby MIT Требуется последняя версия Ruby, RubyGems, Rbenv Имеется подробная документация, обновления выходят регулярно Много плагинов и расширений GitHub Pages, Heroku, FTP, SFTP, rsync
Hyde
0.8.8
Python MIT Устанавливается через pip Минимальная Плагинов очень мало GitHub Pages, Amazon S3, SFTP
Pelican
3.4
Python GNU GPL Устанавливается через pip Подробная документация, активно разрабатывается и поддерживается Большое количество плагинов для блоггинга FTP, SSH, Dropbox, Amazon S3, Rackspace Cloudfiles
Grow SDK
0.0.31
Python MIT Устанавливается через скрипт Подробная документация с видеороликами Плагинов нет. Имеются дополнительные темы и шаблоны Dropbox, Google Cloud Storage, Amazon S3 Dropbox, Google AppEngine
Nanoblogger
3.5
Bash GNU GPL Устанавливается через менеджер пакетов Разработка и поддержка приостановлены Мало расширений rsync, FTP
DocPad
6.69
CoffeeScript MIT Для установки нужны NodeJS и NPM Имеется подробная документация, обновления выходят регулярно Много различных расширений и плагинов Heroku, Appfog, Windows Azure, Docker, GitHub Pages

Все перечисленные генераторы интересны и уникальны, однако самым интересным проектом на сегодняшний день нам показался Grow SDK.

Для желающих углубиться в тему даем пару полезных ссылок:

Какой опыт использования генераторов статических сайтов есть у вас?

Андрей Емельянов, Технический писатель

Занимаюсь документированием ПО и пишу статьи. Перевожу сложные технические тексты (на работе) и поэзию (на досуге).