O Blogofile é um sistema de gerenciamento de conteúdo, desenvolvido em
Python e que utiliza a biblioteca Mako para o sistema de templates,
podendo ser usado em conjunto com o Git para controle de versão.
Ele compila arquivos escritos em diferentes linguagens de marcação -
como rst e Markdown, só para citar dois exemplos - para arquivos
xHTML válidos. É utilizado para gerenciar sites e blogs, com a
vantagem de produzir arquivos estáticos que não dependem de base de dados
ou de alguma linguagem instalada no servidor para geração de páginas
dinâmicas. Quando utilizado para gerar blogs, utiliza o Disqus como
gerenciador comentários.
Instalação em sistemas Debian
Os seguintes passos descrevem a instalação do Blogofile e do Git num servidor
remoto, que também deverá ter algum servidor web instalado para servir as
páginas xHTML geradas pelo programa.
A instalação do Blogofile pode ser simplificada ao utilizarmos o pacote
setuptools, que gerencia a instalação de bibliotecas python. Os seguintes
comandos instalam o setuptools, o git e o Blogofile com todas suas dependências:
$ sudo aptitude install setuptools
$ sudo aptitude install git-core
$ sudo easy_install -U blogofile
Com isto feito, podemos iniciar um blog simples numa pasta vazia no diretório
$HOME do usuário:
$ mkdir $HOME/blogofile
$ cd $HOME/blogofile
$ blogofile init simple_blog
O comando blogofile init simple_blog cria alguns arquivos e pastas que podem
ser editados para criar um site ou blog. Neste último caso, os posts ficam na
pasta _posts e devem possuir o formato
nome-do-post.linguagem-de-marcação. Após criarmos páginas ou posts, podemos
gerar os arquivos estáticos, que ficam armazenados na pasta _site:
Configuração
Após o processo de instalação no servidor remoto, devemos configurar o git
para iniciar um repositório na pasta do blog ou site para que possamos editar
os arquivos num computador local. No computador local, podemos configurar o
blogofile por meio do arquivo _config.py, criar páginas ou posts, editar
o estilo CSS e adicionar imagens para, finalmente, gravar as alterações locais
no servidor remoto.
Configurando o Git
A configuração do Git descrita nesta seção possibilita a geração automática
de arquivos estáticos após cada push do computador local para o remoto.
No computador remoto, devemos inicialmente criar um arquivo de configuração
do usuário ($HOME/.gitconfig) com o seguinte conteúdo:
[user]
name = Nome do usuário
email = nomedousuario@dominio.com
Agora, podemos iniciar o repositório e adicionar os arquivos:
$ cd $HOME/blogofile
$ git init
$ git add .
$ git commit -m "Commit Inicial"
A parte mais importante do processo é a criação do arquivo post-receive,
que deve ser gravado na pasta $HOME/blogofile/.git/hooks/ com o seguinte
conteúdo:
#!/bin/sh
unset GIT_DIR
cd $HOME/blogofile
git reset --hard
/usr/local/bin/blogofile build
Também devemos torná-lo executável:
$ chmod +x $HOME/blogofile/.git/hooks/post-receive
Este arquivo será executado após cada push, gravando as mudanças nos
arquivos do repositório e chamando o comando blogofile build que cria
as páginas estáticas.
Ainda na máquina remota, devemos configurar o git para aceitar as mudanças
diretamente no branch MASTER. Este comportamento é aceitável num único
repositórios com um único usuário, não devendo ser aplicado em repositórios
que possuam mais de um usuário ou que sejam idealizados para possuir vários
branches. Para tanto, adicionamos as seguinte linhas no arquivo
$HOME/blogofile/.git/config:
[receive]
denyCurrentBranch = ignore
Configurando o Blogofile
Agora podemos começar a trabalhar na máquina local ao clonarmos o
repositório remoto. Com isto, podemos trabalhar localmente e só enviar as
mudanças para o computador remoto quando as configurações, páginas ou posts
estiverem prontos. Para clonar o repositório remoto:
$ git clone ssh://nome-do-usuário@máquina-remota:porta/caminho-do-repositório
O comando trará todos os arquivos remotos para a máquina local. Podemos, então,
configurar o blogofile, editando o arquivo _config.py localmente. Algumas
variáveis deste arquivo que podemos personalizar:
# URL do site ou blog
site.url = ""
# Nome do site ou blog
blog.name = ""
# Descricao do site ou blog
blog.description = ""
# Zona horaria de Sao Paulo
blog.timezone = "America/Sao_Paulo"
# numero de posts por pagina
blog.posts_per_page = 5
# Habilita Permalinks automaticos
blog.auto_permalink.enabled = True
# Formato do permalink. Neste caso, indicamos para o blogofile que
# desejamos somente o titulo do post no permalink
blog.auto_permalink.path = "/:title"
# Habilita comentarios do disqus
blog.disqus.enabled = True
# Nome de usuario do disqus
blog.disqus.name = ""
# Desabilita pagina inicial customizada. Util no caso de blogs
# instalados diretamente na raiz do site
blog.custom_index = False
Criando Posts
Podemos criar posts no blogofile utilizando várias linguagems de marcação,
como rst, markdown e até mesmo html. É importante que o título do arquivo
contenha como "extensão" o nome da linguagem de marcação. O seguinte exemplo
contém o código que foi utilizado para criar o primeiro post deste
blog (nomeado 1. Primeiro Post.markdown):
---
title: Primeiro Post
categories: Pessoal
date: 2011/06/11 17:10:00
tags: teste, dummy
---
Este é o **primeiro** post deste blog, apenas para servir de template
para os posteriores.

Nele utilizei as variáveis title, categories e date para indicar ao
blogofile, respectivamente, o título, a categoria e a data de criação do post.
O uso da variável tags é opcional.
Para enviar as mudanças de configuração e algum post:
$ git add _posts/nome-do-post.extensão
$ git commit -a -m "Insere post e configuração do _config.py"
$ git push origin master
Conclusão
O blogofile é um gestor de conteúdo indicado para ser utilizado em servidores
de baixos recursos de memória ou processamento, pois cria blogs e sites
estáticos que não necessitam de base de dados ou de linguagens de
programação para geração de páginas dinâmicas. Além disso, permite a
customização tanto das páginas e estilos do site como também da lógica por
trás da geração dos conteúdos via modificação ou criação de scripts python.