Таки так, цей блог працює на Pelican

  у розділі Технічні теми 

Блог

Вже віддавна мені хотілося простого блогу, який просто виглядає, зручно читається, легко редагується та швидко відкривається.

Незважаючи на популярність Wordpress, на якому працював мій блог останні 2 роки1, усі експерименти з темами для цього двигунця не давали бажаного результату.

У пошуках щастя я придивлявся до Blogger, Tumblr та схожих на них мінімалістичних системах блогінгу. Але різного роду обмеження2 не давали мені душевного спокою.

В сучасних динамічних двигунцях (Wordpress, Drupal Joomla), сторінки створюються веб-сервером "на льоту"3. На такі операції витрачається багато часу та комп’ютерних ресурсів сервера.

Крім того такі динамічні системи дуже схильні до хакерських зламів4.

В одному з подкастів я почув про системи статичних блогів.

Статичні системи генерують усі потрібні файли, усі потрібні варіанти веб-сторінок, вже готовими, у вигляді звичайних HTML-файлів. Ці файли можна викладати на будь-якому хостингу, у локальній директорії чи веб-сховищах на кшталт Dropbox, Amason S3 тощо5.

Наповнення сторінки (статті) зберігаються у вигляді звичайних текстових файлів, простого формату, які легко створювати, редагувати, переносити тощо.

Для генерування сайту використовується спеціальна програма, яка запускається на комп’ютері користувача. Вона читає усі файли статей, перетворює їх у HTML-код та формує сторінки на основу певного шаблону.

Дивовижно, як розвиток технологій, дійшовши до динамічних генераторів з реляційними базами даних може повертатися до основ — звичайних текстових файлів :) . Звичайно, існують системи в яких динамічне створення даних є обов’язковим. Але для простого блогу, часто, це є надлишково і непотрібно, а часто й небезпечно4.

Формати, у якому зберігаються статті, переважно стандартні для усіх генераторів. Це широковживані, у вузьких колах :), мови розмітки тексту. Найпростішим прикладом таких розміток є BB-коди форумів, або Wiki-розмітка.

В технічно-орієнтованих середовищах широкого застосування набули Markdown, reStructuredText, Textile.

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

Попри простоту як основну ідеологію, потрібно зауважити, що генератори статичних сайтів будуть зрозумілі лише технічно підготовленим користувачам. Які не бояться командного рядка. :) Базових основ Ruby/Python/Bash (в залежності від конкретної системи) буде достатньо.

Недаремно такі системи характеризуються як "хакерами для хакерів". ;)

Генератори статичних сайтів

Виявляється, існує досить багато таких систем. Відрізняються вони, як правило, мовою, на якій написано систему та системою HTML-шаблонів.

Наприклад:

Octopress

Octopress

Чи не найпопулярніша система серед "статичних" блогерів.

Працює на Ruby. Ситема HTML-шаблонів — Liquid.

Розроблена на основі Jekyll, яка була створена свого часу для популярного програмістського порталу Github.

Чудова документація. Статті пишуться у форматі Markdown. До речі, навіть стандартний HTML-шаблон виглядає симпатично. Багато додатків, що розширюють функціонал.

Проте, я не зміг прийняти Octopress через Ruby, з яким я ніколи не працював. начебто прості команди встановлення, для мене не означають нічого:

gem install bundler
rbenv rehash
bundle install
rake install

Коротше я спасував і почав шукати більш знайомі аналоги. добрим кандидатом були Python-орієнтовані системи.

Pelican

Pelican

На ньому я і зупинився.

Написаний на Python. Працює з розміткою reStructuredText або Markdown. Система шаблонів — Jinja2 (дуже схожу систему використовує, наприклад, Django). Зручний режим для перевірки сайту (локальний-веб-сервер). Має зрозумілу документацію.

А також:

  • Зручна система шаблонів
  • Підтримка коментарів (Disqus)
  • Підтримка багатомовності сайту
  • Підсвітка синтаксису коду (додаток Pygments)
  • Генерування Atom/RSS
  • Підтримка тегів, категорій, мультиавторів
  • Інтеграція з Google Analytics

Насправді, система виявилась достатньо простою в користуванні. А завдяки зручній системі шаблонів додати нові функції, для сайту, зовсім не важко.

В Ubuntu, встановлення системи виглядає просто, як:

pip install pelican Markdown
mkdir ~/code/yoursitename
cd ~/code/yoursitename
pelican-quickstart

Те ж саме можна зробити і на Windows.

Далі заходимо в каталог content і створюємо там текстовий файл з розширенням .md такого вмісту:

Date: 2012-10-12
Title: Таки так, цей блог працює на Pelican
Tags: Pelican
Slug: pelican-powered-blog
Category: Технічні теми

#Заголовок 1-го рівня

Ось так просто пишеться в форматі Markdown:

**Жирний текст**, *Похилий текст*

Список:
* Один
* Два
* Три

1 Три
2 Два
3 Один

[СуперСайт](http://Посилання-На-Нього)

До речі, більшість параметрів (metadata:) "шапки" файлу є необов’язковими. Наприклад, дата статті може братися з дати створення сайту. А її адреса (slug) — з параметру title.

Генеруємо сайт:

make html

Все. В директорії output лежить і чекає готовий сайт, який можна викладати в Інтернет.

Шаблони для Pelican, завдяки двигунцю шаблонів Jinja2 виглядають ось так:

{% extends "base.html" %}

{% block windowtitle %}{{ article.title }}{% endblock %}

{% block content %}
    <div class='article'>

        <div class="content-title">
            <h1>{{ article.title }}</h1>
            {% include "metadata.html" %}
        </div>

        <div class="entry-content">
            {{ article.content }}
        </div>

        <hr>

        <h2>Коментарі</h2>
        {% include "twitter.html" %}
        {% include 'disqus.html' %}
    </div>
{% endblock %}

Все красиво і логічно.

Конфігураційний файл системи виглядає ось так:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

AUTHOR = u"Юрій Сметана"
SITENAME = u"СЮМ"
SITEURL = ''
TIMEZONE = 'Europe/Kiev'

DEFAULT_LANG = 'uk'
DEFAULT_PAGINATION = 7
DISQUS_SITENAME = 'yura-dis'

GOOGLE_ANALYTICS = 'UA-38XXXX-2'

ARTICLE_URL = '{date:%Y}-{date:%m}-{date:%d}/{slug}/'
ARTICLE_SAVE_AS = '{date:%Y}-{date:%m}-{date:%d}/{slug}/index.html'

PAGE_URL = 'pages/{slug}/'
PAGE_SAVE_AS = 'pages/{slug}/index.html'

TAG_URL = 'tag/{name}/'
TAG_SAVE_AS = 'tag/{name}/index.html'

CATEGORY_URL = 'category/{name}/'
CATEGORY_SAVE_AS = 'category/{name}/index.html'

240 статей мого блогу генеруються 10-15 секунд.

Pelican — молода система, написана ентузіастом з Франції. Завдяки відкритому коду та використання Github до розробки системи залучаються усі охочі.

Існує декілька проблем, які, тим не менше, особливо не заважають та поступово усуваються розробниками та користувачами, що надсилають свої патчі. До речі, відсутній пошук по сайту. ;)

Можна завантажити додаткові шаблони, або створити власний. На шаблонах детально не зупиняюсь, бо це вже питання HTML/CSS, яке не має безпосереднього відношення до системи.

Можу сказати, що переїзд на систему статичного блогу тривав, для мене, близько 3-х тижнів. 2 — теоретично і + 1 тиждень саме перенесення, виправлення, налаштування і т.п.

Про це все я планую написати додатково.

Епілог

На цьому дозвольте відкланятися. Як завжди, стаття переросла у простирадло. :)


  1. А перед тим — ще 2 роки на Joomla! 

  2. Blogger навіть не дозволяє вказати нормальну адресу статті (наприклад /2012/my-any-super-title/), вже мовчу про втрату усіх посилань при переході з Wordpress, бо неможливо встановити переадресації. 

  3. Динамічні системи отримують дані про зміст сторінки та її структуру з бази даних. Цей зміст обробляється та "вкладається у певний HTML-шаблон і вже після цього видається браузеру. 

  4. Бо різні параметри відображення даних, у динамічних системах, задаються безпосередньо у адресі сторінки що виконується, відтак зловмисник знаючи вади системи може сформувати таку адресу, що зіб’є систему з пантелику, чи змусить виконати її якусь шкідливу функцію (наприклад показати системний файл чи паролі користувачів з бази даних). 

  5. Тобто будь-де, де Ваші файли можуть зберігатися та бути доступними з Інтернету. 


Коментарі