Almir 'm3nd3s'

Ruby, Rails, Arduino, GNU/Linux, Software livre...

Meu Ambiente De Trabalho Em 7 Itens: 2013

| Comments

Em 20 de janeiro de 2011, inspirado por um post do Jeveaux, eu publiquei um post sobre as ferramentas que utilizo em meu ambiente de trabalho. Com o passar do tempo é comum que façamos mudanças em nosso ambiente visando melhorar e agilizar nosso processo de trabalho. Então resolvi dar uma atualizada no post para mostrar como e o que estou usando agora.

1. Navegador

Como desenvolvedor web o navegador é uma ferramenta essencial. Há muitos anos vinha utilizando o Mozilla Firefox mas de uns tempos pra cá ele vinha me decepcionando.

Ao menos em minha máquina o Firefox comia muita memória e não raro travava enquanto abria determinada página. Outro problema eram as extensões que eu precisava instalar para torna-lo uma ferramenta de trabalho (Firebug, WebDeveloper, etc).

Hoje abro os demais navegadores apenas para fazer testes nos sistemas que trabalho. É impressionante as informações que podemos extrair através do Developer Tools do Google Chrome, até hoje não aprendi todas. Abaixo deixo alguns links que julgo ser imprecindíveis para quem desenvolve aplicações web, mais específicamente para quem tem o Google Chrome como opção:

2. Editor

Neste caso não há uma mudança grande ou significativa, sempre utilizei Vim como editor principal e já estou tão acostumado que me minha produtividade em outro editor chega a ser péssima.

Assim que comecei a usar o sistema MacOS eu conheci o MacVim, instalei e desde então o utilizava. Um dos motivos que me fazia utiliza-lo era, principalmente, que um dos plugins que eu utilizo, o CommandT, dependia do Vim com suporte a ruby. Como o vim padrão do MacOS não possuía suporte e eu não tinha vontade de compilar o na unha, eu utilizava o MacVim.

Com o uso do homebrew descobri que o Vim dele incluía suporte a ruby, isso e a vontade de usar o Tmux (leia abaixo) me fizeram largar do MacVim para o vim.

3. Tmux

Talvez a mudança/melhoria mais significativa. Ao menos uma coisa é certa, mantenho minha mente e memória ocupados por um bom tempo tendo que decorar mais algumas teclas de atalho, mas nem tanto.

O Tmux é um terminal multiplexer, basicamente é um programa que lhe permite manipular vários programas em um único terminal, assim como o velho conhecido de usuários Unix Like, o GNU screen. A diferença é que o Tmux tem várias features que o transformam em uma opção considerável para programadores que utilizam editores em modo texto. Recomendo olhar na internet alguns vídeos de integração Tmux + Vim + Ruby.

Meu interesse nele surgiu pela vontade de reduzir ainda mais o uso de cliques para escolher janelas e navegar entre elas e as features que ele possui que melhorariam significativamente meu fluxo de desenvolvimento.

4. Git e Github

Simplesmente indispensável. Todos os produtos que desenvolvemos na Giran são versionados pelo Git, nós utilizamos também o Github que parafraseando um amigo, que até hoje não postou nada no blog dele:

Todo desenvolvedor deveria conhecer o Github e ter uma conta.

5. Terminal

Depois de alguns meses usando o ZSH, por meio de um pacote de script providos pelo projeto oh-my-zsh, estou de volta ao Bash. Tive alguns problemas misteriosos utilizando os scripts do oh-my-zsh então resolvi voltar ao Bash, com o auxílio de um outro pacote de scripts deixei-o do jeito que eu queria.

Depois de anos utilizando sistemas Unix Like - antes eu usava Linux (Slackware, Archlinux, Debian, Ubuntu) e hoje MacOSX - não consigo mais utilizar um SO que não tenha um terminal descente.

6. Evernote (GTD)

O Evernote ganhou minha admiração, eu praticamente anoto tudo que julgo importante nele.

Na Giran temos uma reunião diária, chamamos de Daily, nela repassamos tudo que fizemos no dia anterior e o que faremos no dia de hoje bem como os impedimentos que ocorreram até o momento.

Um dos usos que faço do Evernote é anotar o que tenho feito no meu dia de trabalho, com isso conseguirei lembrar o que precisarei dizer na Daily do dia seguinte, bem como me planejar para o dia corrente. A medida que as solicitações vão chegando eu vou colocando na minha lista de coisas a fazer, conforme vou fazendo eu vou marcando como feito e tocando para o próximo da lista.

O Evernote se tornou tão útil pra mim que o utilizo em minha vida pessoal e demais atividades que tenho fora do meu trabalho.

7. Monitor Externo

Nunca tinha pensando que fosse tão bom e produtivo ter um monitor externo.

A possibilidade de distribuir janelas e visualiza-las ao mesmo tempo sem perda de informação é fantástico! Isso me ajuda muito na produtividade. Costumo abrir um terminal (iTerm2) em fullscreen, dividi-lo com tmux, e abrir o vim, visualizar os logs dos servidores, executar comandos, abrir o navegador e ainda sobra espaço. Tudo isso sem precisar ficar fazendo “ALT + TAB”.

E Lá Se Vai 2012, Que Venha 2013!

| Comments

Comentei com alguns amigos que escreveria um blog post de retrospectiva do ano de 2012, isso já tem algumas semanas, mas fui enrolando até que o @jvrmaia publicou o seu blog post retrospectivo, então percebi que tinha que publicar logo senão ficaria feio pra mim :-D. Então, vamos lá!

O ano de 2012 foi um ano irado! Simplesmente o ano de muito trabalho e diversas conquistas. Começarei pela que considero a mais marcante deste ano e provavelmente da minha vida: a conquista da minha graduação. Em julho eu terminei minha graduação em Ciência da Computação, foi uma luta e tanto. Depois de anos na rotina trabalho -> faculdade -> casa -> repete tudo eu finalmente posso escolher o que fazer após o expediente de trabalho :).

Também conquistei a liberdade automotiva :), está sendo uma experiência e tanto. É muito boa a sensação de ir aonde quer na hora que quer e escolher quando voltar.

Vários amigos meus começaram ou já faziam algum tipo de atividade física, alguns com bikes, outros com simples caminhadas e/ou frequentando academias. Então eu e minha digníssima esposa decidimos deixar o banco dos reservas (sedentários) e partimos para a competição (fazer alguma atividade). Ainda estamos, como eu diria… em processo de adaptação :).

Outra parada muito bacana foi eu ter finalmente comprado o meu videogame. Para muitos isso pode ser algo irrelevante né? Afinal, um videogame é algo banal. Deixa eu contextualizar isso: Sempre fui viciado em jogos de videogame, houve uma época que eu estava todos os dias na locadora gastando o pouco dinheiro que eu tinha para jogar. Minha paixão sempre foram os jogos de luta, parte desta história você pode ver aqui. Mas nunca tive dinheiro para comprar um videogame, e quando tive oportunidade financeira para comprar, adquirir um videogame nunca atingira o topo da minha lista de prioridades. Mas este ano consegui realizar meu sonho, coincidentemente ao final da minha faculdade.

Profissionalmente foi um ano de muita luta, carrego a posição e líder técnico do time de desenvolvimento do Adena, posso dizer que é um aprendizado diário e contínuo, muitas vezes aprendo mais do que ensinando o que pessoalmente me deixa muito motivado. Nesse sentido 2013 tende a ser um ano muito promissor, com o término da faculdade posso começar finalmente a estudar o que me interessa sem a preocupação de ter uma prova ao final. É o momento de aprofundar em metodologias, técnicas, padrões e tudo mais.

Foram várias as conquistas também, algumas delas você pode ver aqui.

Sempre participei de grupos e comunidades de software livre, organizando eventos e micro-eventos. Entretanto não tive oportunidade e tempo para ajudar em algum projeto de software. Penso que todo desenvolvedor deveria participar do desenvolvimento de algum software livre, os benefícios de estar em uma comunidade, trocar experiências, ter seu código auditado por uma comunidade e o fato de se trabalhar com pessoas que você não conhece, culturas diferentes, pessoas de outros países, etc há de ser algo de muito valor.

Comecei por baixo, aos poucos reportando algumas issues, corrigindo outras, refatorando algumas implementações. Mas acho que é chegada a hora de participar firmemente de algum projeto, ainda não achei um, na verdade nem fiz pesquisas. Mas como tenho desenvolvido em ruby tende a ser algo em ruby mesmo.

Continuarei ajudando em eventos e mantendo minha participação nos grupos, mas em 2013, assim como foi ao final de 2012, vou me afastar da organização e participar apenas com palestras. Portanto se você que me lê conhecer ou estiver organizando algum evento de desenvolvimento ou software livre fique a vontade para fazer contato, ficarei feliz em ajudar no que for possível ;).

Pretendo continuar o #Horaextra como fizemos neste último semestre de 2012. O #horaextra não foi criado por nós, como pode ver no link foi criado no Rio de Janeiro. Eu fiquei sabendo dele através do @henriquebastos quando de sua vinda aqui às terras capixabas. Desde então tenho seguido mais ou menos o que eles fazem. Mensalmente eu, @vixlima, @jvrmaia, @ra_pha, alguns membros mais do @_tuxes e alguns amigos nos reunimos para comer, beber e conversar, geralmente sobre tecnologia.

Foram ótimos encontros!

Agradeço pelo ano de 2012 e tudo que ele foi e desejo um ano de 2013 repleto de conquistas e muito trabalho para todos nós \o/.

GTD No Meu Dia-a-dia

| Comments

Reuniões, e-mails, solicitações, tarefas, projetos, família, lembretes, faculdade, eventos, lazer, estudos, médico, etc. São alguns exemplos das coisas que nós, querendo ou não, gerenciamos todos os dias. Quanto mais funções você acumula, quanto maior for seu envolvimento com as coisa ao seu redor, mais itens você terá para gerenciar.

OK, talvez o parágrafo inicial tenha ficado um pouco descontextualizado, mas se você já ouviu falar de Getting Things Done, ou só GTD, deve imaginar do que se trata. Aos que não conhecem segue abaixo uma breve explicação sobre o que é o GTD, dito pelo próprio autor Devid Allen:

Tire tudo de sua cabeça. Tome decisões sobre cada coisa no momento em que toma conhecimento dela, sem esperar elas explodirem. Organize lembretes de seus projetos e das próximas ações em cada um deles em categorias apropriadas.

Mantenha seu sistema atualizado, completo e analisado com uma freqüência suficiente para ter confiança em suas escolhas intuitivas sobre o que você está fazendo (ou deixando de fazer) a cada momento.

O texto foi retirado do site Efetividade.net, que também é um ótimo ponto de partida para se estudar o GTD

Trata-se de um sistema de organização pessoal para que você consiga dar fluxo e continuidade a tudo que você precisa fazer, desde projetos pessoais (viagens, eventos, passeios, lazer em geral, família, médico, enfim tudo) até suas tarefas profissionais. Não é o objetivo desde blog post descrever com funciona e como utilizar o GTD. Caso tenha interesse em aprender mais eu sugiro, como ponto de partida, o Efetividade.net.

Não posso dizer que sou usuário assíduo e exemplar do método GTD, entretanto posso afirmar que utilizo algumas das técnicas do GTD, e outras ainda estou criando o hábito de utiliza-las. Contudo o pouco que tenho utilizado tem me ajudado bastante e é isso que gostaria de compartilhar.

Este blog post é sobre como eu tenho utilizado as técnicas do GTD em meu dia-a-dia e como isto tem me ajudado, me permitindo lembrar de cosias que eu deveria lembrar (quando eu precisava lembrar) e não me preocupar com coisas que, digamos, não são importantes (ao menos não no momento).

Listarei algumas ferramentas que utilizo, descrevendo um pouco sobre como eu as utilizo, depois comento um pouco sobre como o GTD melhorou minha produtividade e melhorou o fluxo das tarefas no meu dia-a-dia. Por fim deixo alguns comentários pessoais que podem ajudar quem estiver começando agora com o GTD.

Ferramentas

Trabalho com tecnologia da informação (vulgo informática) e por isso tendencio a procurar por softwares que façam o trabalho por mim, entretanto isto é um erro comum. As ferramentas servem de apoio e portanto a função delas é dar suporte. Adequar-se ao GTD é mais uma questão de mudança de hábito, e como mudar hábitos nunca é tão fácil, muitas pessoas se frustram enquanto tentam aplicar o GTD em suas vidas e acabam por culpar o software que escolheram para lhes ajudarem.

As ferramentas que utilizo no meu dia-a-dia são basicamente: Papel e caneta, Gmail e Evernote. Destes o melhor de todos sem dúvida é a dupla papel e caneta.

Papel e caneta

São meus preferidos e suponho que também seja o de muitos outros colegas. É prático, está sempre a mão e é muito simples de ser utilizado. Eu tenho comigo um Moleskine que ganhei, eu comecei a utilizar ele para meu GTD diário, entretanto o Moleskine é um caderno com preço um pouco acima dos demais, portanto parei de utiliza-lo como anotação diária e passei a usá-lo apenas como referência das reuniões e projetos que participo.

Há algum tempo eu utilizava um caderno quadriculado, só que ele era um pouco grande e me atrapalhava na mesa, portanto passei a utilizar um bloco de anotações simples.

Estou ainda tentando me acostumar com o Pomodoro Technique, muito bom para o passo Fazer do GTD. Então utilizo o bloco de anotações para marcar o que estou fazendo e quantos pomodoros utilizei para executar tal tarefa.

Também utilizo o caderno/bloco como Inbox de solicitações que recebo diariamente, assim não corro o risco de esquecer e ainda me serve de retrospectiva do que fiz durante todo dia.

Evernote

Existem anotações que merecem ser guardadas para referências futuras. Em geral eu descarto as folhas dos blocos, mas as mais importantes eu guardo para referência, outras eu prefiro juntar em uma nota no Evernote.

O Evernote é uma ferramenta impressionante e mesmo que você não tenha interesse em aplicar o GTD em seu dia-a-dia vale a pena instalar e usar a ferramenta. É possível salvar notas, fotos, páginas de sites, enfim, tudo que faça lhe faça necessário criar uma nota sobre. E por ter versões para web, mobile e desktop permite o acesso rápido e fácil às suas notas onde quer que você esteja.

Gmail

Quando comecei a usar o Gmail fiz como a maioria, nunca apagava um e-mail sequer, afinal espaço não era problema. Para piorar a situação eu não me importava em organizar os e-mails que recebia, foram anos assim. Imagina a dificuldade de buscar algo, simplesmente era um sufoco.

Com o GTD passei a encarar meu Gmail como, literalmente, uma Inbox. Tornou-se minha Inbox principal, é no e-mail que recebo a maioria das requisições e tarefas que executo durante meu dia de trabalho. Sendo assim a organização dos e-mails tornou-se algo primordial e necessário, caso contrário usar o e-mail como Inbox não faria qualquer sentido.

Fiz várias pesquisas na internet e descobri uma forma simples, hoje basicamente utilizo assim:

  • Se for algo que eu precise fazer e for rápido (regra dos 2-3 minutos do GTD) eu “faço na hora”;
  • Se levar mais que 2-3 minutos, marco com uma Star (exclamação) para ser feito depois;
  • Se for algo que eu possa delegar, delego e marco com uma Star (setinhas) se precisar que eu acompanhe, caso contrário deleto o e-mail;
  • Se for algo para leitura posterior, tenho duas opções: mando para o Pocket quando se tratar de link ou marco com uma Star (estrela lilaz);
  • Se não for necessária qualquer ação mas o e-mail for importante o bastante, aplico um label “Referência* e Arquivo o e-mail;
  • Apago qualquer e-mail que eu julgar não mais necessário;

Em todos os casos, excetuando quando da exclusão, eu arquivo o e-mail. O importante é não manter o e-mail na Inbox. Desta forma a minha inbox fica limpa sempre para receber novos e-mails e com isso novas solicitações. Uma inbox lotada de e-mails, muitos não lidos, aterroriza sua mente e lhe dá a impressão que há muita coisa a ser feita. Esta forma de organização e atitudes no e-mail me permitem estar no controle sempre.

Compartilhando o que já experimentei

Estas foram as ferramentas que mais utilizo, agora vamos aos meu comentários sobre as experiências que já passei e acho que posso ajudar compartilhando-as.

Não ache que conseguirá usar o GTD do dia pra noite (ou vice-versa)

Quando comecei a usar o GTD eu tive um sério problema. O método pede que você páre, literalmente, durante um ou dois dias para organizar sua vida antes de começar a usar os métodos do GTD, ou seja, organizar tudo que você fez até hoje nos moldes do GTD. Mas convenhamos, se eu tivesse um ou dois dias para parar provavelmente eu não estaria tão desorganizado.

O que fiz? Uma faxina de porco :), joguei a sujeira para deibaxo do tapete e comecei aos poucos aplicando os métodos que eu conseguisse. Conforme falei usar o GTD é uma questão de mudança de hábito, e decidi começar pelas que eu imaginava serem mais fácil, no meu caso a Coleta.

Coleta

Comecei a implementar o GTD em minha vida pela coleta, uma das ações que fazem parte do GTD. O alvo principal foi meu Gmail sempre organizado. No mínimo uma vez por dia eu checo meu email e faço os procedimentos citados no tópico acima. Hoje consigo fazer isso quase instantaneamente quando recebo um e-mail. Minha dica, mantenha sua inbox do (G)mail vazia, faz um bem que você não imagina :-D. Que o diga o amigo @leohackin.

Não tenha medo de apagar seus e-mails, use labels/pastas sempre, crie uma estrutura de labels/pastas que for conveniente para você, especialmente porque se você arquivou o e-mail é porque um dia precisará busca-lo novamente, portanto organização é fundamental.

Anote “tuto”

Uma frase que sempre digo: “Sua mente não tem mente própria”, portanto anote tudo, especialmente as coisas que você sabe precisará lembrar e mantenha isso perto de você. Seja no Evernote, seja no bloco de anotações, seja no caderno, no Smartphone ou em um belíssimo Moleskine. O importante é anotar.

Assim como sugere o GTD, se for um compromisso ou algo que tenha data e hora para acontecer o lugar correto é o calendário. No meu caso tenho usado o Google Calendar, agendando avisos em SMS e/ou e-mail sempre que necessário para me lembrar.

Várias ferramentas = Problemas

Eu tentei utilizar o Gmail tasks, o Wunderlist ou Wunderkit e várias outras ferramentas. Simplesmente não consigo!

Uma das dicas do GTD ou ZTD é que se utilize o mínimo de inbox possíveis pois quanto mais tiver mais locais você precisará procurar por tasks. Eu tentei usar outras ferramentas, mas estou tão bem organizado no meu Gmail e bloquinho de anotações que sinceramente não compensa usar outra ferramenta para isso.

Não estou dizendo que não funcionará para você, só quero dizer para tomar cuidado ao usar muitas ferramentas ao mesmo tempo, você pode ser confundir. E lembrando o que citei acima, as ferramentas não são para usarem o GTD por você, são para te ajudar.

ZTD

Uma variante do GTD é o ZTD - Zen To Done. Ele se baseia no GTD entretanto ele faz um “resumo”, uma compactada no GTD para que se torne ainda mais fácil o uso dos métodos do GTD. Confesso que depois de ler tanto sobre o GTD eu foi apresentado ao ZTD (graças ao amigo @leohackin) e estou gostando. Eu encaro o ZTD como um caminho simples para aplicar o GTD.

Recomendo a leitura, o link oficial pode ser visitado aqui. Se preferir há uma tradução para pt-BR disponível aqui.

Finalizando

Eu teria mais um monte de coisas para compartilhar, mas acho que o blog post está grande o suficiente. Se tiver alguma dúvida, sugestão, etc. fique a vontade para deixar seu comentário, ficarei feliz em ajudar.

Mais uma vez queria deixar claro que o blog post expressa minha opinião e experiência sobre o GTD.

Obrigado e que a força esteja contigo.

Rock’n Rails 2012

| Comments

É isso aí galera, o Rock’n Rails 2012 já está com data e local defindos, como no ano passado o evento será realizado na Universidade Vila Velha no dia 20 de outubro de 2012.

Nós criamos o Rock’n Rails na tentativa de juntar desenvolvedores, curiosos, empresários, todo tipo de pessoa interessada na linguagem para conversarem, aprenderem e principalmente fazerem um networking bacana entre profissionais e empresários afim de fomentar o movimento Ruby/Rails em terras capixabas.

Um ano se passou desde a nossa primeira edição e ficamos orgulhosos com o resultado: conhecemos inúmeras pessoas, expandimos nosso conhecimento e como resultado e consequência disto nós pretendemos fazer um evento ainda melhor este ano.

Como no ano passado o evento está sendo organizado pela equipe da Giran Ecommerce Solutions, o Rock’n Rails não tem fins lucrativos: todos os recursos obtidos junto aos parceiros, patrocinadores e incrições será revertido para cobertura do evento e compra de brindes para sorteio ao final do evento.

Nossa grade de palestras está quase fechada mas já com figuras de peso confirmadas como Bruno Oliveira(@abstractj) da Red Hat e Tiago Motta da Globo.com, Ricardo Valeriano da Caelum e Maxwell Leonardo da Giran. Estamos confirmando mais gente e esperando fechar tudo nos próximos dias.

Esse ano iniciamos com patrocinadores de peso: a Caelum apoiando como sempre a disseminação de conhecimento e a Casa de Código, nova editora de livros feitos por programadores para programadores. Além deles, a He:Labs, desenvolvedora de software e organizadora do evento StartupDev Rumble, nos ajudará esse ano. Nosso muito obrigado a vocês. :)

Como a idéia do evento é ser melhor que o ano passado, estaremos cobrando uma taxa simbólica de R$ 35,00 para cobrir os custos e tentar fazer camisas para todos. :) As inscrições serão abertas em breve, estamos apenas com uma pendência de nosso gateway de pagamentos.

No mais, sintam-se a vontade para ajudar e sugerir, pois movimento e comunidade só se faz com a ajuda e contribuição de todos. Os contatos e mais informações estão disponívels no site do Rock’n Rails, fique a vontade para nos contactar.

Nos vemos no dia 20 de outubro \o/!

Instalando Nginx Com RVM Para Aplicações Rails

| Comments

Olá pessoal! Depois de muito tempo sem um post, eu resolvi fazer algo que estava no meu dashboard há um bom tempo, explicar o básico para se levantar uma aplicação Rails e Nginx em um servidor Linux.

Minha intenção com o post é passar os caminhos básicos de como configurar o Nginx, o Passenger e o RVM em um servidor Linux. O processo é relativamente simples.

Antes de começar o processo de instalação é necessário que você possua acesso de administrador do sistema, ou seja, acesso ao usuário root. Caso você não possua esse nível de acesso os comandos abaixo não darão certo.

Algumas distribuições não permitem o acesso direto ao usuário root, exigindo que você tenha uma conta de usuário normal e só então, a partir dele, mudar o nível de acesso para o root, isso normalmente é feito através do comando sudo. Se for o seu caso sugiro rodar o comando sudo su - que fará você mudar o nível de privilégios para administrador do sitema, aí é só seguir os passos abaixo.

Instalando o RVM

O processo de instalação do RVM não possui muitos mistérios, basta seguir o processo de instalação disponível no site do RVM. Mas para que você não tenha dúvidas segue a linha a ser executada:

Instalando o RVM
1
curl -L https://get.rvm.io | bash -s stable --ruby

Este comando fará a instalação do RVM no sistema, e logo em seguida a instalação da a última versão do ruby disponível, no momento que escrevo esse post a versão mais atual é a 1.9.3-p194.

A instalação do RVM requer o uso do curl, portanto é preciso ter ele instalado, verifique como instalar esse software em sua distribuição/versão de Linux.

Caso ocorra algum erro na instalação do ruby é bem provável que seja pela ausência de alguma dependência na distribuição utilizada, para fazer um levantamento e identificar se falta algo rode o comando rvm requirements. Siga os procedimentos informados e após terminar tente novamente instalar o ruby:

Instalando o ruby manualmente
1
rvm install 1.9.3 #ou a versão que deseja

Instalando o Passenger

Esse talvez seja o passo mais fácil. O passenger é uma gem que por sua vez possui um script que auxilia em todo o processo, como estamos fazendo a instalação em um ambiente servidor nós podemos instalar a gem sem os arquivos de documentação:

Instalando o Passenger
1
gem install passenger --no-ri --no-rdoc

Pronto, agora já temos o passenger instalado. Entretanto ele sozinho não fará muita coisa por você, ou melhor, por sua aplicação. Vamos agora instalar o Nginx.

Instalando o Nginx

Infelizmente não podemos utilizar o Nginx provido pela distribuição Linux que você está usando, isso porque o Nginx não possui o suporte a módulos, algo que o Apache tem, que seria a possibilidade de instalar o Nginx e depois apenas os módulos que necessários (php, ruby, etc.). Para o nosso caso será necessário (re)compilar o Nginx habilitando o suporte ao Passenger, é justamente isso que vamos abordar no próximo tópico.

Instalando o Nginx com suporte ao Passenger (usando o assistente)

Nós utilizaremos o instalador provido pela gem passenger, esse script fará todo o trabalho sujo por você, baixando o nginx, configurando e compilando. Esse processo é recomendado para aqueles que estão começando e querem algo funcional de forma simples. Vamos lá então:

Instaladando o Nginx com suporte ao passenger
1
passenger-install-nginx-module

O script fará uma série de perguntas, vou documentar cada uma delas e explicar para que você se sinta seguro ;).

Logo no início será apresentado um texto informativo sobre o que será realizado durante o processo de instalação, nessa primeira parte será solicitado que você pressione <ENTER> para continuar, ou <CTRL>-C caso tenha se arrependido e queira abortar a instalação. É óbvio que vamos continuar né! :P, senta o dedo aí no <ENTER>.

Logo em seguida o script fará um checklist sobre todas as dependências necessárias para compilar o Passenger e o Nginx, entre os itens verificados estão: compilador, make, curl ou wget, headers do ruby (bibliotecas necessárias para compilação), rubygems, rack, openssl, zlib, etc. Caso algum deles esteja faltando o script fará o alerta e mostrará o que fazer para resolver as dependências.

Se for o seu caso, instale as dependências e depois volte a executar o comando passenger-install-nginx-module novamente.

Após o checklist de dependências o script solicitará qual o método você utilizará para instalar o Nginx + Passenger:

Questionamento sobre qual processo será utilizado para instalar o Nginx + Passenger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Automatically download and install Nginx?

Nginx doesn't support loadable modules such as some other web servers do,
so in order to install Nginx with Passenger support, it must be recompiled.

Do you want this installer to download, compile and install Nginx for you?

 1. Yes: download, compile and install Nginx for me. (recommended)
    The easiest way to get started. A stock Nginx 1.0.10 with Passenger
    support, but with no other additional third party modules, will be
    installed for you to a directory of your choice.

 2. No: I want to customize my Nginx installation. (for advanced users)
    Choose this if you want to compile Nginx with more third party modules
    besides Passenger, or if you need to pass additional options to Nginx's
    'configure' script. This installer will  1) ask you for the location of
    the Nginx source code,  2) run the 'configure' script according to your
    instructions, and  3) run 'make install'.

Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.

Selecione a opção 1 e pressione <ENTER>. Nesta opção será feito o download e compilação do Nginx com suporte ao Passenger pelo próprio script. Logo Após será feito um novo questionamento, desta vez sobre qual será o local onde o Nginx será instalado. Eu prefiro escolher um local diferente por questões de gosto e costume, em meus processos de instalação eu utilizo o path /usr/local/nginx, fique a vontade para escolher qual deles utilizar.

Onde instalar o Nginx
1
2
3
Where do you want to install Nginx to?

Please specify a prefix directory [/opt/nginx]: /usr/local/nginx

Faça a sua escolha e pressione <ENTER> para dar início a compilação, agora é só esperar finalizar o processo.

Ao finalizar a compilação e instalação do Nginx o script exibe alguns parâmetros que devem ser definidos na configuração do Nginx para ativar o passenger, nós não precisamos nos preocupar com isso agora pois o script de instalação já injetou essas diretivas no arquivo de configuração do nginx, mas vale a pena registrar para não ter dúvidas:

Nginx instalado, diretivas de configuração para suporte ao Passenger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Nginx with Passenger support was successfully installed.

The Nginx configuration file (/usr/local/nginx/conf/nginx.conf)
must contain the correct configuration options in order for Phusion Passenger
to function correctly.

This installer has already modified the configuration file for you! The
following configuration snippet was inserted:

  http {
      ...
      passenger_root /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.15;
      passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby;
      ...
  }

After you start Nginx, you are ready to deploy any number of Ruby on Rails
applications on Nginx.

Pressione <ENTER> e outra mensagem informativa será exibida, desta vez é exibido um trecho de configuração da seção server dos arquivos de configuração do Nginx, essa seção é utilizada justamente para configurar uma aplicação/site no Nginx, esta não é inserida automaticamente, precisaremos setar isso quando da configuração de nossa aplicação.

Organizando a instalação

Vamos agora dar uma organizada para termos menos trabalho no futuro, até para melhorar a manutenção. Como é padrão das distribuições linux os arquivos de configuração devem ficar no path /etc, sendo assim ficaria melhor se a configuração do Nginx ficasse em /etc/nginx, vamos criar um link simbólico dos arquivos de configuração do Nginx para o /etc/nginx:

Criando link simbólico do Nginx para olink
1
ln -s /usr/local/nginx/conf /etc/nginx

Outra melhoria que podemos fazer é colocar o binário do nginx em um path globalmente reconhecido pelo linux, para isso vamos criar outro link simbólico:

Criando link simbólico do binário do nginx
1
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

Configurando o Nginx

O Nginx é instalado com um arquivo default de configuração, não vou cobrir todo esse processo, no lugar eu sugiro que você baixe e use o arquivo de configuração abaixo:

A seguir vamos criar algumas pastas para organizar melhor os arquivos de configuração:

Criando a pasta conf.d, sites-enabled e sites-available
1
2
3
mkdir /etc/nginx/conf.d
mkdir /etc/nginx/sites-enabled
mkdir /etc/nginx/sites-available

Configurando seu domínio

Pronto, quase tudo configurado, falta agora configurar o Nginx para responder pelo domínio de seu site, para isso usaremos a diretiva server, vamos utilizar como exemplo o meu domínio almirmendes.com. Vamos criar um arquivo em /etc/nginx/sites-available/ com o nome do seu domínio (o nome não importa, pode ser qualquer um):

Criando arquivo de configuração para o domínio
1
vim /etc/nginx/sites-available/almirmendes.com

Eu tenho, no Gist abaixo, uma configuração que você pode utilizar como exemplo, apenas lembre-se de trocar as entradas que tiverem almirmendes.com pelo seu domínio:

Agora vamos fazer um link simbólico do arquivo almirmendes.com para a pasta `/etc/nginx/sites-enabled/. Se reparar no arquivo de configuração acima, no gist 3482847, ela é a única que está sendo lida pelo Nginx, esta é a forma que temos para ativar uma configuração nova de site. Com isso habilitaremos o site:

Habilitando a configuração do domínio
1
ln -s /etc/nginx/sites-available/almirmendes.com /etc/nginx/sites-enabled/almirmendes.com

Se algum dia precisar desativar o site basta remover o link simbólico e pronto em /etc/nginx/sites-enabled/almirmendes.com. Você ainda terá o arquivo de configuração intacto em /etc/nginx/sites-available.

Para testar a configuração use o seguinte comando:

Testando a configuração do nginx
1
nginx -t

Se no resultado do comando acima aparecer algo semelhante ao exibido abaixo é sinal de que está tudo correto, agora só falta inicializarmos o Nginx ;):

Sintaxe testada pelo Nginx
1
2
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Script de inicialização do Nginx

Por fim falta só adicionar ao sistema o script de inicialização do Nginx. Sugiro que baixe o que está disponível neste link e salve-o em /etc/init.d/nginx. :

Inicializando o Nginx
1
2
chmod +x /etc/init.d/nginx # permissão de execução para o script
service nginx start #inicializa o nginx

Existem inúmeras outas informações a serem adicionadas ao post, entretanto não queria deixá-lo ainda maior. Espero que ajude você a configurar o Nginx, qualquer coisa estamos a disposição. Abraços!