Instalando Redmine em Nginx no Centos 6.X

O que ando aprendendo nesta caminhada sobre a Terra

Instalando Redmine em Nginx no Centos 6.X

Neste artigo eu vou mostrar como configurei o Redmine versão 2.5.2 (2014-07-06) em um servidor Web Nginx.

O Redmine é uma aplicação web para gestão de projetos. Eu o conheci há algum tempo atrás em uma das empresas por onde passei e é uma excelente alternativa gratuita para quem precisa gerir projetos, sejam eles de desenvolvimento ou não.

O Nginx é um servidor Web que vem ganhando muito espaço nos últimos anos devido a sua performance para grandes quantidades de requisição.

O Redmine foi escrito na linguagem de programação Ruby e utiliza o Framework Rails. Por conta disso, não basta apenas seguir os passos de instalação descritos no manual do Redmine quando se trata de fazer ele funcionar sobre o Nginx. É necessário uma versão configuração especial do Nginx e vou mostrar nos próximos parágrafos como configurar um ambiente completo para que seja possível executá-lo.

Primeiro devo deixar claro que utilizo o Centos (Versão 6.5) e que todas as configurações e comandos serão para este Sistema Operacional. Caso esteja utilizando um outro SO, faça a devida conversão de comandos e caminhos.

Eu já usava o Redmine sob o Apache e sua configuração teve muitos percalços devido as diferentes versão de Ruby e de Rails. Como não tinha nenhuma experiência com essa linguagem sofri bastante com erros de compilação e incompatibilidade de módulos e Gems entre outros.

Quando mudei de servidor resolvi adotar o Nginx como o Web Server e acabei deixando o Redmine como último item a configurar, já que ainda o tinha rodando no Apache no servidor antigo. Quando finalmente cheguei no ponto de fazer isso eu já tinha um ambiente bem maduro sob o Nginx incluindo sites de terceiros. Para a minha ingrata surpresa, mesmo concluindo todos os passos do manual de instalação o Redmine não executava corretamente e descobri que não ia ser possível (para mim) fazer ele rodar na versão existente nos repositórios do Centos. Era necessário uma versão específica para Rails.

Agora aqui vai um aviso: Se você já tem um Nginx rodando e bem configurado, tome todas as precauções no que diz respeito a ter de volta seu ambiente, caso algo dê errado.

Temos então pelo menos duas possibilidades. Uma é a existência de um ambiente já configurado e executando nginx e outra de uma instalação limpa. Se você está pensando em migrar do Apache para o Nginx e já tem ou pretende usar o Redmine, pode se servir deste artigo para fazer a instalação limpa e depois migrar seus sites hospedados em Apache para o Nginx (está fora do escopo desse artigo).

Vou explicar a instalação limpa. Ela é bem simples se seguir os passos.

1 – Instalando o suporte a ruby.

A primeira coisa que precisamos é ter suporte a linguagem Ruby. Esse foi um dos pontos de dor de cabeça, pois acredite, há várias versões da linguagem e nunca nem sempre a aplicação desenvolvida para um versão vai executar em outra, embora seja possível executar diferentes versões de ruby em um mesmo ambiente. Sempre certifique-se da versão suportada pela aplicação que deseja hospedar. No caso do Redmine 2.5.2 os requisitos são Ruby 2.1 e Rails 3.2.

Na minha experiência, tentar instalar o Ruby via Yum no Centos não foi uma boa idéia e então resolvi usar o RVM para instalar o ruby e tudo o mais que for dependente dele.

Outro item importante é não instalar o Redmine usando o root. Use um usuário separado do nginx. Isso evita alguns problemas que não irei explicar agora. No exemplo eu estou utilizando um usuário criado para acesso ao servidor sem acesso de root e utilizo o root para algumas instalações específicas.

Instalando o RVM

O RVM (Ruby Version Manager) permite criar múltiplos ambientes Ruby e com ele instalar Ruby e Rails é muito mais simples.

Comecemos instalando a chave gpg para validar o pacote.

gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
\curl -L https://get.rvm.io | bash -s stable --ruby=2.1 --rails

Ao término da execução do comando acima já teremos o RVM, o Ruby 2.1 e o Rails instalados. Este processo varia de tempo de acordo com a conexão, mas não deve levar mais do que cinco minutos. Caso o Curl não esteja disponível, instale-o através do comando

sudo yum install -y curl libcurl libcurl-devel

No momento em que escrevo este artigo, as versões que serão instaladas são RVM 1.26.7, Ruby 2.1.5 e Rails 4.2.0.

Ao termino verifique os avisos gerados. Um deles se refere que para iniciar o uso do RVM é necessário executar um comando source. Execute o comando exatamente como foi proposto e logo em seguir rvm reload.

Agora instalamos o nginx através do passenger-install-nginx-module, um script que instala o nginx já compilado com o suporte a passenger, que é o módulo necessário para executarmos a aplicação Ruby no Ngnix. Para isso executamos o o comando:

[regis@redmine ~]$ gem install passenger

e em seguida

[regis@redmine ~]$ rvmsudo passenger-nginx-install-module

NOTA: Neste ponto pode acontecer de ser exibido uma mensagem de que não foi possível encontrar passenger-nginx-install-module. Caso isso aconteça verifique se o modulo realmente foi criado. Caso esteja usando os caminhos padrão da instalação e a versão do ruby indicada ele deverá estar em /usr/local/rvm/gems/ruby-2.1.5/bin/passenger-install-nginx-module.

Quando perguntado sobre as opções de compilar automaticamente ou por conta própria, escolha a opção 1.
Por questão de compatibilidade de caminhos e como trata-se de uma instalação limpa optei por utilizar o mesmo caminho que o nginx teria caso fosse instalado pelo yum. Quando perguntado sobre o caminho digite /etc/nginx ou deixe o padrão /opt/nginx. Fica a gosto de cada um.

Neste ponto já temos o nginx instalado com suporte a Ruby, porém esta instalação cria o script de incialização do serviço em /etc/init.d.
Para criar o script tem dois caminhos: O primeiro é usar o script deste link. O segundo é usar o script da instalação via Yum da seguinte forma.
1 – Certifique-se de não ter iniciado o nginx ainda. Renomeio o diretório de instalação /etc/nginx para /etc/nginx.bkp.
Ex.:

[regis@redmine ~]$ mv /etc/nginx /etc/nginx.bkp

Instale o nginx via yum

[regis@redmine ~]$ yum install nginx

Apague o diretório /etc/nginx

[regis@redmine ~]$ rm -Rf /etc/nginx

Retorne o diretório do nosso nginx para o original

[regis@redmine ~]$ mv /etc/nginx.bkp /etc/nginx

Edite o arquivo /etc/sysconfig/nginx e modifique o caminho existente /etc/nginx/nginx.conf para /etc/nginx/conf/nginx.conf
Teste a inicialização do serviço com

[regis@redmine ~]$ service nginx start

A resposta que deve ser obtida é

starting nginx:                                            [  OK  ]

E confirme acessando o ip no navegador para que a página de boas vindas seja exibida.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.