klen.github.io

in Blog

Создаем свой персональный сайт на Github.

Django-gitrevision, автоматическое обновление статики на клиенте Ctrl→


Mало кто знает, что Github кроме превосходного хостинга ваших Git проектов может также хостить ваш персональный сайт. Например на нем расположен этот блог. В своей первой статье я расскажу как максимально удобно настроить эту функциональность.

Введение

Для начала вам нужно быть зарегистрированным пользователем Github и уметь работать с системой контроля версий Git. Предположим вы готовы.

  • Первое, что вам потребуется — это создать на Github репозиторий с именем вида: username.github.com, где username ваш логин на сервисе. Например для этого блога создан репозиторий http://github.com/klen/klen.github.com
  • Вторым шагом мы создадим локальный репозиторий и привяжем его к удаленному:

Note

В дальнейшем я буду приводить примеры для своего сайта: klen.github.com

mkdir ~/Projects/klen.github.com
cd ~/Projects/klen.github.com
git init
echo 'Hello world!' > index.html
git add .
git commit -m 'Initial commit'
git remote add origin git@github.com:klen/klen.github.com.git
git push -u origin master
Отлично, ваш статический сайт уже готов! В течении 10 минут он появится по адресу:
username.github.com. В дальнейшем он будет обновляться при коммитах в удаленный репозиторий.

Использование генераторов статических сайтов

Созданный нами сайт не слишком удобен для работы, трудно писать содержание используя HTML, сложно поддерживать целостность ссылок. Использовать его например как блог очень затруднительно.

Существует масса проектов генерации статических сайтов и блогов. При работе с ними фактически вы пишете страницы и статьи в удобном для вас формате, а затем генератор обновляет структуру сайта. По-умолчанию Github уже поддерживает написанный на ruby генератор Jekyll. То есть вам необязательно использовать только HTML синтаксис, из коробки вы можете писать в ваш сайт на Markdown. Подробнее читайте в документации Github Pages и Jekyll.

Я предпочитаю генерировать страницы локально и проверять результат без выгрузки содержания на Github. Мне привычнее работать с Python поэтому в качестве генератора сайта мной используется Pelican. Ниже я покажу как поставить его и настроить для работы.

Если вы предпочитаете ruby дальше можете не читать.

Установка и настройка Pelican

Предполагается, что вы знакомы с Python и VirtualEnv.

  1. Так как мы будем использовать Pelican нам необходимо выключить встроенный в Github генератор Jekyll. Это делается добавлением в корень репозитория файла .nojekyll.
touch .nojekyll
git add .
git commit -m 'Disable Jekyll'
  1. Теперь создадим и активируем виртуальное окружение для модулей нашего сайта:
virtualenv .ve_blog
source .ve_blog/bin/activate
  1. Установим в созданный нами VirtualEnv генератор Pelican и необходимый для него движок шаблонов Jinja2:
easy_install pelican
easy_install jinja2
  1. Мы будем держать исходники сайта в поддиректории source, а созданные статические страницы в корне репозитория, чтобы Github их видел. Создадим файл source/hello.rst с нашей первой статьей:
Hello world!
############

:slug: hello

Hello from Pelican!

Note

Я использую синтаксис RST, но вы можете использовать Markdown для своего сайта. Просто сохраняйте файлы с расширением *.md Pelican поддерживает и другие форматы, но надо ставить соответствующие модули.

  1. И соберем статику:
pelican source -o .

Note

Опция -o . заставляет Pelican производить сборку статики в корне проекта.

Если все прошло успешно в корне проекта вы увидите несколько HTML файлов. Откройте index.html в браузере и посмотрите на ваш сайт.

  1. Теперь наши изменения можно сохранить в Git и отправить на Github.
git add .
git commit -m 'Add virtualenv and setup pelican.'
git push origin master

Автоматизация

Настроим наш сайт и немного автоматизируем рутинные операции.

  1. Создадим файл настроек нашего сайта source/settings.py:
AUTHOR = 'Kirill Klenov'
SITENAME = 'klen.github.com'
SITEURL = 'http://klen.github.com'

Note

Подробнее про настройки Pelican, можно прочитать в его документации.

  1. Для упрощения сборки создадим sh-файл .compile
#!/bin/sh

PRJ_DIR=/home/klen/Projects/klen.github.com

VE_DIR=$PRJ_DIR/.ve_blog

# Modify path
OLD_PATH=$PATH
PATH="$VE_DIR/bin:$PRJ_DIR:$PATH"
export PATH

# Compile static files
pelican $PRJ_DIR/source -o $PRJ_DIR -s $PRJ_DIR/source/settings.py -v

# Return PATH
PATH=$OLD_PATH
export PATH

И дадим ему права на исполнение:

chmod +x .compile

Теперь в директории проекта можно вызывать ./.compile и собирать статику даже без активации виртуального окружения.

  1. Следующим шагом создадим Git хук для автоматической генерации сайта при коммитах. Создадим и отредактируем файл .git/hooks/pre-commit:
#!/bin/sh

PRJ_DIR=/home/klen/Projects/klen.github.com

$PRJ_DIR/.compile

Note

Не забудьте сделать его исполнемым.

При каждом коммите изменений в репозиторий, проект будет пере-собран автоматически.

На этом нашу предварительную работу по созданию github-сайта можно считать оконченной. В дальнейшем стоит поподробнее прочитать документацию Pelican, модифицировать стандартную или создать собственную тему оформления и подключить какой нибудь сервис комментариев.

Note

Как нетрудно догадаться исходники этого блога расположены по адресу: http://github.com/klen/klen.github.com

Django-gitrevision, автоматическое обновление статики на клиенте Ctrl→
alt