redmine_fluid_icon

FreeBSD e Redmine com Mongrel Cluster e Apache

Na procura de um software para substituir um sistema de “controle de chamados” ( tickets ) acabei esbarrando com o Redmine, que é um excelente gerenciador de projetos, escrito em Ruby on Rails e totalmente customizável.

Já que meu sistema operacional predileto é o FreeBSD e nele existe um port do Redmine resolvi subir esse ambiente usando um FreeBSD 8.0, Mongrel Cluster e Apache 2.2 com proxy_balance.

As imagens para download do FreeBSD estão disponíveis aqui: 32 bits e 64 bits

Com o FreeBSD instalado, precisamos atualizar o ports, que é uma coleção de programas instalada a partir do seu fonte:

portsnap fetch extract
portsnap fetch update

Terminada a atualização do arvore do ports, vamos instalar os arquivos do Redmine:

cd /usr/ports/www/redmine; make install clean

No decorrer da instalação ele pedirá a confirmação de algumas opções e também vai instalar algumas dependências necessários. Primeiro ele pedirá qual o banco de dados a ser utilizado pelo Redmine, neste caso escolhi o Mysql.

Em seguida ele pede as configurações necessárias para compilar o Ruby.

Também são pedidas configurações de compilação para as dependências como o Perl, M4 e Libiconv, nestas basta deixar padrão e clicar em Ok.

Instalando o Mongrel para fazer o cluster com o módulo proxy_balance do apache:

cd /usr/ports/www/rybygen-mongrel_cluster; make install clean

E também o Apache 2.2:

cd /usr/ports/www/apache22; make install clean

Para compilar o Apache com o módulo proxy_balance temos que selecionar a opção quando a caixa de dialogo de configuração aparecer:

Por fim, instalamos o Mysql:

cd /usr/ports/databases/mysql50-server/

Com todos os softwares que precisamos instalados, agora podemos configurar o sistema para o rodar o Redmine com o apache e o mongrel_cluster.

Primeiramente vamos configurar o Mysql para subir automaticamente e também criar uma base de dados para o Redmine:

Adicione a seguinte linha no arquivo /etc/rc.conf do FreeBSD para o Mysql subir automaticamente:

mysql_enable="YES"

Para iniciar o Mysql:

/usr/local/etc/rc.d/mysql-server start

A senha do usuário root no Mysql vai estar em branco, e para conectar no basta digitar:

mysql -uroot -p

Voilá, você esta conectado e agora criamos a base e também um usuário para acessar ela:

create database redmine character set utf8;
grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'minhasenha';

Após criar a base de dados vamos configurar e testar o Redmine.

cd /usr/local/www/redmine/
vi config/database.yml

Precisamos editar o arquivo database.yml e adicionar as seguintes linhas abaixo para o Redmine conectar no Mysql:

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: minhasenha
  encoding: utf8

Agora geramos alguns arquivos e alimentamos a base de dados do Redmine

cd /usr/local/www/redmine/
rake generate_session_store
rake db:migrate RAILS_ENV="production"
rake redmine:load_default_data RAILS_ENV="production"
chown -R www:www files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets

Neste momento podemos testar o Redmine apenas usando o WEBrick:

cd /usr/local/www/redmine/
ruby script/server -b 0.0.0.0 -p 3000 -e production

Agora basta apontar seu browser para url http://localhost:3000

Assim que o Redmine for testado podemos finalizar com o Mongre_Cluster e o Apache:

Para rodar o mongrel_cluster automaticamente, basta fazer os seguintes passos:

mkdir /usr/local/etc/mongrel_cluster
touch /usr/local/etc/mongrel_cluster/redmine.yml

Adicionar as seguintes linhas no arquivo /usr/local/etc/mongrel_cluster/redmine.yml:

user: www
cwd: /usr/local/www/redmine
log_file: log/mongrel.log
port: "10000"
environment: production
group: www
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3

O mongrel vai subir 3 servidores escutando na porta 10000, 10001 e 10002 do endereço local (127.0.0.1), você pode usar estas configurações para ter um alta performance ou mesmo alta disponibilidade se rodar em servidores separados.

Iniciando

mongrel_rails cluster::start -C /usr/local/etc/mongrel_cluster/redmine.yml

Parando

mongrel_rails cluster::stop -C /usr/local/etc/mongrel_cluster/redmine.yml

Reinicializando

mongrel_rails cluster::restart -C /usr/local/etc/mongrel_cluster/redmine.yml

Em fim, vamos configurar o proxy_balance do apache, primeiro vamos criar e editar o seguinte arquivo:

vi /usr/local/etc/apache22/extra/httpd-redmine.conf

Neste arquivo adicionamos as seguintes configurações e substitua o “dominio.com” pelo seu domino:


  ServerName balance.dominio.com

    SetHandler balancer-manager
    Deny from all
    Allow from 192.168.0.0/24



BalancerMember http://127.0.0.1:10000
    BalancerMember http://127.0.0.1:10001
    BalancerMember http://127.0.0.1:10002



       ServerName redmine.dominio.com
       ProxyRequests Off
       ProxyPass / balancer://redmine/
       ProxyPassReverse / balancer://redmine/
       RewriteEngine On
       RewriteRule ^/(.*) balancer://redmine/$1 [L,P]

O host virtual de exemplo que criei como “balancer.dominio.com” é onde você vai gerenciar o seu cluster:

E apontando para o “redmine.dominio.com” tenho o sistema rodando perfeitamente:

E para finalizar e deixar tudo rodando automaticamente quando seu sistema FreeBSD subir, deixe seu /etc/rc.conf com as seguintes linhas:

mysql_enable="YES"
mongrel_cluster_enable="YES"
mongrel_cluster_conf_dir="/usr/local/etc/mongrel_cluster"
apache22_enable="YES"

Site do Redmine: www.redmine.org
Documentação: www.redmine.org/wiki/redmine/Guide

Plugin para o Firefox: addons.mozilla.org/firefox/addon/11545
Plugin para o Chrome: chrome.google.com/extensions/detail/maognoipicmbggkgjihiaimhpmnaaggm