Blogofile e Git

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:

$ blogofile build

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.
![Hello World](/images/hello.png "Hello World!")

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.

Comentários

Comments powered by Disqus