Статическая генерация блога с помощью Blogofile

Статический блог

Если вы вдруг собрались это читать, рекомендую сначала посмотреть вводное слайдщоу :)

С сегодняшнего дня, этот блог работает на статическом движке. То есть все страницы один раз генерируются на моем компьютере, статичные html'ки заливаются на хостинг, и просто отдаются посетителям. И вот почему:

  • Основная причина - минимализм. Абсолютно незачем для небольшого скромного блога иметь базу данных, и при каждом запросе страницы запускать громадного, неповоротливого, жадно жрущего память монстра типа Wordpress.
  • И Wordpress c 10ком-другим необходимых плагинов, начинает выдавать совершенно монстроурозный html.
  • Вторая причина - экономия и так нехватающего времени.
  • Это чертовски быстро работать с постами как с файлами на локальном компьютере. В плане поиска, замены, копирования редактирования, и.т.д. Ни каких лагов удаленной wordpress админки.
  • Писать посты в формате .markdown - это во-первых классно, а во вторых в два раза быстрее чем через тормозной и кривой редактор того же wordpress (который постоянно пихает теги

    и вообще неожиданным образом корежит верстку). Я еще обязательно напишу сочинение "Почему я люблю Markdown".
  • А еще, я давно хочу избавиться от Wordpressa. Каюсь, по молодости PHP казался мне не таким уж и плохим. Однако теперь, я стараюсь от него максимально дистанцироваться. Смесь четырех языков в одном файле мне теперь кажется дикостью.
  • Ну и опять же, мне проще написать 10-20 строчек кода на Python (например для генерации оглавлений), чем искать какой-нибудь мутный плагин для Wordpess, который неизвестно как повлияют на загрузку сайта.
  • Для меня, как программиста, удобно писать посты не выходя из Sublime Text 2. А так же уютно работать с блогом привычными понятиями, такими как build и deploy. Да и вообще оперировать блогом, как проектом.
  • Я могу использовать привычные скрипты при сборке блога. Например без лишних телодвижений склеить все css в один файл sh командой: cat _css/*.css | cssoptimizer -i -o > _site/style.css, для оптимизации загрузки страницы.
  • Статический сайт гораздо лучше выстоит Хабра-и-прочие эффекты (а на этом скромном бложике такие пару раз были :)
  • Весь контент блога находиться у меня на компьютере, и бекапиться стандартным образом, как все другие проекты. Не надо специально делать дамп MySql базы где базируется Wordpress.
  • Ну и теоретически можно выкатить классный современный блог хоть на Amazon S3, хоть на Dropbox, хоть на narod.ru.

Вещи которые сложно сделать статическими отдаются внешним сервисам:

Поскольку я в последнее время максимально стараюсь отдалился от PHP, а использовать Octopress не могу потому что Руби я так и не освоил, то выбирал из движков для генерации сайта на Python. Выбор был не велик.

Hyde

Hyde - питоновский брат самого популярного статического блога на Руби Jekyll. Боевой крейсер Ямато. Там слишком много всего. Вы только список препроцессоров в разделе Configuring your website прочитайте! Плюс там посты не в чистом .markdown формате, их надо обвешивать Джанго тегами типа {% extends "_post.html" %}, {% block article %}, и.т.д. Или писать еще 1 препроцессор. Нет, спасибо.

Pelican

Все есть - но слабо конфигурируемый. Если вам нужен рабочий, хорошо выглядящих блог - стоит обратить внимание.

Poole

Все в одном файле. Пример того как минимализм переходит в аскетизм, что не всегда хорошо.

Blogofile

Самый популярыный, и вменяемый. Можно легко писать свои контроллеры и фильтры, что-бы расширить функционал.

Правда дефолтная тема имеет несколько минусов:

  • Недружественна к поисковикам (у страниц нет title, keywords, description)
  • На выходе - неоптимальная структура файлов (каждая страница лежит в своей папке - а directory listing медленная операция). Проще говоря, синхронизация будет занимать много времени.
  • Главная страница - это не блог.
  • Нету поддержки тега more, чтобы запрятать длинный пост под кат.
  • Ну и вообще не совсем соответствовал моим понятиям как должен выглядеть правильный блог.
  • и.т.д. Как обычно пришлось все переделывать >:)

Подробно процесс миграции я описывать не буду. Думаю что если вы решите переезжать на blogofile, то навыки программирования на Python у вас уже есть, и вы разберетесь. А чтобы сэкономить ваше время просто выкладываю все свои наработки на Github -

Вы можете поэксперепентировать, запустив у себя на localhost:8080 копию моего блога выполнив следующие комманды описанные в readme

Если хотите знать как у меня реализована та или иная фича - смотрите diff от дефолтной темы

В итоге получается 639 html файлов, которые генерируются за полсекунды. При написании поста добавляются 1-2 и изменяются 10-20 файлов, так что заливка их через lftp занимает от силы секунд 10. Итого - я получаю быстрый и удобный блог, куда приятно писать.

Оцените статью
  • Agata

    А коментрии ты как чистишь? В вордпрессе то понятно...Хоть скриншот сделай для "чайников" вроде меня. Тогда я точно пойму, что то что написано и то что в голове от написанного осталось в качестве понимания - одно и тоже-)

  • Дима

      Комменты управляются внешним сервисом - disqus.com, и подгружаются на статическую страницу с помощью Javascript.

    Админка Disqus выглядит похоже на Wordpress (см. скриншот).

    Остальные скриншоты выложу вечером.

  • CLASSIK

    А Discuss разве при отключении не забирает все каменты что были на блоге? Мне казалось это единственная негативная штука у них.

  • Дима

     У меня есть хитрый скрипт, который забирает их обратно с Disquss и вставляет их в html при генерации блога :). Могу выложить, если интересно.

  • SkaN

    не, все, конечно, ругают PHP, но HTML файлики... а как редактировать статьи, есть парсер что ли какой-то?
    Подобные вещи, кстати, можно делать и без БД, а хранить все в файликах :)

  • Дима

     Йеп, именно парсер файликов, и генератор их в html. Я описал процесс.

  • Internetchikoff

    Да блин. В этом нужно еще разбираться  порядочно.

  • Agata

    Что-то обновлений пока нет-((

  • Дима

    Написал целый пост :). Извини, что заняло так долго, со мной всякая фигня творилась, не до блога было.

  • Teh Kos

    В firefox-e и хроме почему-то комментариев не видно.

  • Дима

    То-то я смотрю, в последнее время комментов мало. Спасибо что сказали!

  • capturis

    python-setuptools python-django поставились без проблем
    uglifyjs пишет: "вместо «uglifyjs» выбирается «node-uglify»" это не
    принципиально, думаю. Далее норм, но локалхост не открылся. Сначала ругался
    No module named BeautifulSoup, поставил BeautifulSoup. Затем оказалось, No module named tidy
    После установки tidy, все равно пишет тоже самое.No module named tidy
    Куда копать? Апач может мешать? localhost/ пашет, localhost:8080 - нет.
    P.S. diff от дефолтной темы - 404

  • Дима

    Да поломали все в Blogofile 0.8 и в Ubuntu 12.10. У меня то 12.04LTS, все работает, сижу себе в ус не дую :).

    В любом случае вам нужно устанавливать немного подругому:

    sudo easy_install Blogofile==0.7.1

    sudo apt-get install python-utidylib

    Если для вашей версии Ubuntu нет пакета cssoptimizer и блог показывается без стилей, в файле build.sh нужно заменить строку:

    cat _css/*.css | csstidy -i -o > _site/style.css

    На:

    cat _css/*.css > _site/style.css

    И запускать тоже подругому:

    ./deploy_localhost.sh

    cd blogofile && blogofile serve&

    Удачи. Спрашивайте если что.

  • capturis

    Однозначно, проблема была в Blogofile 0.8. Даже установив python-utidylib, ничего не запускалось: NameError: name 'blog' is not defined.

    После отката на 0.7.1 наконец-то заработало, хотя и ругнулся find: `./_uploads/*': Нет такого файла или каталога
    Но стилей и правда нет. Варианты в build.sh :
    cat _css/*.css | cssoptimizer -i -o > _site/style.css
    cat _css/*.css | csstidy -i -o > _site/style.css
    cat _css/*.css > _site/style.css
    не срабатывают.

    И да: у меня тоже 12.04.1, а пакета cssoptimizer нет. Может какие репы подключить?
    UPD: разобрался, deploy_production.sh ))) и все работает как надо, редактируется и т.п.

  • Дима

    Нет ничего нового в find: `./_uploads/*' - это нормально - значит что не найдены новые картинки которые нужно соптимизировать и создать thumbnail.

    Бинарник cssoptimizer можно скачать с [1]http://mabblog.com/cssoptimize... и просто скиуть в папку ~/bin.

    Если вы собрали сайт скриптом deploy_production.sh он будет брать все картинки с //thexnews.com, и все ссылки будут относительно моего блога. Чтобы оно собиралось с локальными путями, вам надо разобраться с deploy_localhost.sh. Ну или изменить url в deploy_production.sh на ваш домен.

    cat _css/*.css > _site/style.css должен работать. Идея - склеить все файлы из blogofile/_css в один blogofile/_site/style.css. Проверьте есть ли он, попробуйте почистить кэш браузера и перезапистить сервер blogofile:

    killall blogofile && cd blogofile && blogofile serve&

    Спасибо за фидбек! Через некоторое время обновлю инструкцию. Если сделаете свой блог на этой технологии, пишите - с радостью поставлю ссылку :)

  • rotozeev

    Так это что же выходит, помимо добавления одного нового html файла нужно каждый раз при этом переделывать все остальные html - рубрик, архивов... ?

  • Дима

    HTML файл (вернее markdown файл), содержит только заголовок и текст статьи. Все остальное переделывается скриптом автоматически, меньше чем за секунду.

  • rotozeev

    Так скрипт перелопачивает файлы на сервере, или же программа на локальном компе при написании поста переделывает всю таксономию и каждый раз нужно заливать весь блог?

  • Дима

    Все генерируется локально, потом синхронизируется на сервер. Сервер тупо отдает уже сгенерированные html файлы. Вот тут подробнее расписано.