.. title: Blogofile e Git .. slug: blogofile-e-git .. date: 2011/06/13 00:05:00 .. description: O blogofile é um CMS escrito em python que compila arquivos fonte escritos em linguagem de marcação para html estático, podendo ser usado para gerenciar blogs e sites. .. category: tutoriais .. tags: blogofile, git, cms, python, debian O [Blogofile][1] é um sistema de gerenciamento de conteúdo, desenvolvido em [Python][2] e que utiliza a biblioteca [Mako][3] para o sistema de templates, podendo ser usado em conjunto com o [Git][4] para controle de versão. Ele compila arquivos escritos em diferentes linguagens de marcação - como [rst][5] e [Markdown][6], 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][7] 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: :::shell #!/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: :::python # 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][8] 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. [1]: http://www.blogofile.com "Site do Blogofile" [2]: http://www.python.org "Python - Linguagem de programação" [3]: http://www.makotemplates.org "Mako - Biblioteca de templates" [4]: http://www.git-scm.com "Git - Controle de versão" [5]: http://docutils.sourceforge.net/rst.html "reStructuredText" [6]: http://daringfireball.net/projects/markdown "Markdown - Linguagem de marcação" [7]: http://disqus.com "Disqus - Gerenciamento de comentários" [8]: http://blog.claudineipereira.com/primeiro-post/ "Primeiro post de Claudinei Pereira"