Usando Octopress

#cms

Definição

O Octopress, como o próprio site diz é:

Um framework de blog para hackers

É um framework feito usando Jekyll, que por sua vez é um gerador de sites estáticos.

Como para alguns pode ser muito trabalhoso usar o Jekyll, pois é preciso escrever seu próprio template html, css, javascripts e toda a configuração. Mas usando o Octopress bastante disso já é feito, claro que depois que se aprende a usar você faz suas próprias customizações.

Obtendo o Octopress

No meu caso não pensei que iria usar o Octopress então fiz um clone (e não um fork), mas caso você já tenha decidido usá-lo faça um fork. De qualquer forma obtenha o Octopress:

$ git clone git://github.com/imathis/octopress.git

Setup

Antes de qualquer ação execute o bundle install para instalar as dependências.

O arquivo de configuração é _config.yml. Basicamente só é necessário mudar url, title, subtitle e author e caso queira as configurações do github, twitter, Google Analytics e do disqus:

url: http://blog.dmitryrck.com
title: Unix and Me
subtitle: About unix, web programing and me
author: Dmitry Rocha

Agora o rake install vai copiar o tema padrão:

$ rake install
## Copying classic theme into ./source and ./sass

E para levantar um preview:

$ rake preview

E ficará disponível na porta 4000 da sua máquina: http://localhost:4000.

Blogando

Os arquivos das postagens devem ser armazenadas seguindo este padrão: YYYY-MM-DD-post-title.markdown, dentro de source/_posts.

O próprio Octopress já tem uma tarefa rake para executar esta ação:

$ rake new_post["Título da Postagem"]

No meu caso ela não está funcionando e eu ainda tenho que fazer isso no “braço”.

Abra o seu editor de texto favorito e comece a escrever:

As primeiras linhas são em yaml, para informar configurações e informações da postagem:

---
title: "Titulo da Postagem"
date: 2011-09-08 21:33
comments: true
tags: categoria1, categoria2
---

Comece a escrever daqui...

É importante lembrar que como yaml as categorias precisam ser informadas seguindo o seu padrão, não apenas separadas por vírgula.

Leia mais em Blogging Basics.

Deploy

Caso queira usar o heroku para hospedagem só é preciso retirar o diretório public do .gitignore. Só alerto que isso pode acarretar em mais conteúdo para seu commit, exemplo: caso seja modificado o author do site, a maioria dos arquivos em public serão afetados.

Já na minha hospedagem Linode eu utilizo o capistrano para atualizar e tive alguns problemas, tudo foi resolvido com o config/deploy.rb semelhante a este:

set :keep_releases, 5
set :scm, :git
set :scm_verbose, false
set :repository, 'git@endereco.com:/octopress.git'
set :deploy_via, :remote_cache
set :user, 'dmitry'
set :deploy_to, '/home/dmitry/blog'
set :use_sudo, false
role :app, 'blog.dmitryrck.com', :primary => true
default_run_options[:pty] = true

namespace :octopress do
  task :generate, :roles => :app do
    run "cd #{release_path} && bundle exec jekyll"
  end
end

after 'bundle:install', 'octopress:generate'
after 'deploy:update_code', 'deploy:cleanup'

E com o nginx apontando para o diretório public dentro do “current” do capistrano.

Atualização

Após escrever este artigo uma atualização do Octopress (ou do Jekyll) passou a não ser mais compatível com ruby18 e como ainda não atualizei o servidor passei a usar o seguinte script para fazer a autalização:

#!/bin/bash

# Não use '/' ao final de endereço de pastas
ssh_user="dmitry@blog.dmitryrck.com"
remote_tmp_dir="/tmp/.site_update"
remote_final_dir="/home/dmitry/blog/current/public"

echo '## Generating Site with Jekyll'
bundle exec rake generate >/dev/null 2>/dev/null
echo '## Sending Site with rsync'
rsync -az --delete public/ ${ssh_user}:${remote_tmp_dir}
ssh ${ssh_user} "rsync -a --delete ${remote_tmp_dir}/ ${remote_final_dir}"