Это первый пост, написанный с помощью блого-генератора Pelican и использованием разметки Markdown.
Pelican — это прилодение на питоне, позволяющее генерировать статический вебсайт по определенному шаблону. Основным назначением является генерация статического блога из контента в формате reStructuredText или Markdown.
Основным плюсом статического сайта является малое потребление ресурсов, нет необходимости иметь постоянное хранилище данных (баз данных).
Однако, статические сайты не могут иметь динамического содержимого или интерактивно взаимодействовать с пользователем.
Установка и использование блого-генератора, хорошо описана в документации. Единственным советом является использование отдельного виртуального окружения для Pelican:
$ virtualenv pelican
$ source pelican/bin/activate
(pelican)$ pip install -e git://github.com/getpelican/pelican#egg=pelican
(pelican)$ pip install Markdown
Для генерации базовых настроек и структуры проекта необходимо активировать виртуальное окружение и вызвать команду pelican-quickstart в необходмой дериктории. Затем необходимо проследовать диалогу программы. Важно ответить утвердительно на вопрос программы о создании Makefile, который упростит дальнейшее использование генератора.
$ source pelican/bin/activate
(pelican)$ pelican-quickstart
После настройки проекта создадим первый пост в папке content. Для этого необходимо создать новый файл с расширением md (Markdown) следующего содержания
Date: 2012-11-23
Title: Some title
Tags: thats, cool
This is the content of my super blog post.
Или rst (reStructuredText)
Some title
##############
:date: 2012-11-23 11:00
:tags: thats, cool
:category: yeah
:author: Test
This is the content of my super blog post.
Затем запустить в корне проекта.
(pelican)$ make html # сгенерирует вебсайт в папке output.
(pelican)$ make serve # запустит локальный вебсервер для проверки сайта.
Также удобно использовать встроенный режим сервера разработки, который запускает веб сервер и следит за изменениями файлов тем либо контента, и автоматически перегенерирует сайт.
(pelican)$ make devserver
По умолчанию Pelican предоставляет возможность развертывать сгенерированный вебсайт используя FTP, SSH или Dropbox. Но этого может быть недостаточно. Меня, например, заинтересовала возможность автоматически разворачивать вебсайт после обновления git репозитория, содержащего контент. Рассмотрим этот вариант, для этого нам необходим сервер, на котором находится как git репозиторий сайта, так и вебсервер, обслуживающий вебсайт. Конечно, веб сервер может находится и на другом сервере, это немного усложнит конфигурацию, поэтому этот вариант не рассматривается.
Итак, установим Pelican на сервер точно так же, как это было сделано для локального тестирования: необходимо создать виртуальное окружение и установить в него все необходимые компоненты. Предположим, что окружение будет находится в домашнем каталоге пользователя git, также отвечающего за обслуживание git репозиториев.
Git позволяет запускать сторонние шелл скрипты на сервере после различных событий, мы будем использовать событие post-update. Для этого создадим пустой шелл скрипт с именем post-update в каталоге hooks для голого git репозитория (не содержащего кода) или .git/hooks для простого репозитория. Этот скрипт нам понадобится для запуска процесса развертывания.
Далее идея состоит в том, что после того, как изменения загружены в репозиторий наш скрипт должен создать локальный клон основного репозитория, активировать для него виртуальное окружение и запустить make html, после чего синхронизировать каталог output с каталогом назначения используя rsync. Назовем первый скрипт deploy.sh и поместим в произвольный каталог.
#!/bin/sh
unset GIT_DIR
BASEDIR=$(dirname $0)
# Этот скрипт содержит одну строку, настраивающую CLONE_LOCATION
. ${BASEDIR}/vars.sh
VIRTUAL_ENV=/home/git/envs/pelican
if [ -d "$CLONE_LOCATION" ]; then
cd ${CLONE_LOCATION}
git checkout -f --
git pull -u --force
else
mkdir -p ${CLONE_LOCATION}
cd ${CLONE_LOCATION}
git clone PATH_TO_REPO_TO_CLONE ${CLONE_LOCATION}
fi
git reset --hard origin/master # это нужно, если был force push
. ${VIRTUAL_ENV}/bin/activate
make html
find ${CLONE_LOCATION}output/ -type d | xargs chmod a+x
chmod -R a+r ${CLONE_LOCATION}output/
sudo -u www-data ${BASEDIR}/sync.sh
sync.sh:
#!/bin/sh
BASEDIR=$(dirname $0)
. ${BASEDIR}/vars.sh
DESTINATION=/var/www/PATH_TO_WEBSITE/
if [ -d "$CLONE_LOCATION" ]; then
rsync -acvp --delete ${CLONE_LOCATION}output/ ${DESTINATION}
fi
Вот и все. Добавляем вызов скрипта deploy.sh в скрипт post-update. Теперь при каждом удачном git push, на сервере будет запускаться наш скрипт, который обновит весь вебсайт на сервере.
PHP web developer, python developer