Gitolite поломался и лишил меня возможности деплоить сайты. Этот блог, powered by генератор статики cyrax, собирался по гитовому хуку на VPS, а с недавних времен на домашнем сервере.

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

Недолгий research существующих блогоплатформ (Octopress, Jekyll, Hyde) под Github Pages выявил, что лучше бложить вручную (если уж переходить на /просто/ статику, то и инструмент для нее должен быть предельно простым). Этот пост о том, как это сделать.

Необходимы три составляющие:

  1. Cyrax (например, моя пропатченная версия без вывода даты в URL)
  2. Аккаунт на Github
  3. Контент блога с темплейтами jinja2

Cyrax можно установить командной sudo pip install cyrax, либо собрать из исходников sudo python2 setup.py install.

Платный аккаунт на github.com стоит $7 в месяц, и позволяет держать "кишки" блога скрытыми. К тому же страничка на гитхабе не засоряется, ведь ее еще показывать будущему продвинутому работодателю.

Дефолтные темплейты для cyrax'а есть в комплекте с исходниками, но свои собственные написать не составляет труда при знании HTML/CSS и луркании документации по Jinja2.

Самое интересное начинается, когда надо заставить все это вместе работать.


Итак, у нас есть master, где хранятся посты и тмплейты блога. Чтобы они отобразились на GitHub Pages, надо запушить их в ветку gh-pages. Но так как в gh-pages должен попасть не сам master, а выхлоп cyrax'а, то нужно воспользоваться руководством Github:

git symbolic-ref HEAD refs/heads/gh-pages создает ветку gh-pages, которая является ссылкой на текущий master. rm .git/index удаляет всю информацию о текущем индексе, соответственно все файлы становятся untracked. git clean -fdx форсированно удаляет все untracked файлы и директории.

Таким образом, мы получаем пустую ветку, которую можно заполнять с чистого листа. Чтобы она никуда не пропала, надо в нее что-нибудь прокоммитить. Например, файл CNAME, в содержимом которого будет домен блога.

Затем надо переключиться в master, запустить cyrax и получить собранный сайт в директории _build. Переключившись обратно в ветку gh-pages, мы сможем переместить содержимое _build в корень и прокоммитить. Чтобы не делать, эту рутину каждый раз, достаточно вызвать скриптик:

#!/bin/bash

git co master
cyrax
git co gh-pages
mv _build/* .
rm -r _build
echo 'deploying complete'

После того, как ветка gh-pages запушена, сайт сразу будет выложен на GitHub Pages.

Если используется свой домен, то этот домен нужно прописать в файле CNAME, и не забыть добавить A-запись у регистратора, указывающую на IP 204.232.175.78.