A la hora de gestionar proyectos existen multitud de herramientas y opciones disponibles. Algunas son gratis, otras no, unas ofrecen la posibilidad de instalarlas en tus propios servidores, otras se contratan "en la nube".
Redmine es una de las que permiten instalarlo en tus propios servidores. Se trata de un gestor de proyectos escrito con Ruby on Rails, es multiplataforma y soporta múltiples bases de datos. Además es software libre con licencia GPLv2.
Entre sus características destaca el soporte multi-proyecto, sistema de roles y permisos muy flexible y personalizable, gestión de tareas, wikis, foros, subida de archivos y documentos, notificaciones por email y por RSS,...
Llevo casi 4 años utilizando Redmine en el día a día del trabajo (además de administrándolo) y después de instalarlo varias veces de cero y actualizarlo entre versiones otras tantas por fin me he decidido a juntar todas mis notas y escribir un tutorial actualizado.
Partimos de una Debian 7 64 bits recién instalada sin nada adicional a excepción de OpenSSH. Toda la instalación se realizará con un usuario no root en su home, aunque algunos comandos requieren el uso de sudo. Aunque Redmine viene configurado por defecto para utilizar MySQL, en mi caso lo voy a instalar utilizando Postgresql.
Instalación de Postgresql 9.3
En los repos de Debian no está la última versión por lo que lo mejor es utilizar un repo oficial. En la actualidad ya se ha publicado la versión 9.3.2 y será ésta la que utilicemos.sudo vi /etc/apt/sources.list.d/pgdg.list # Postgresql deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update sudo apt-get install postgresql-9.3
sudo vi /etc/postgresql/9.3/main/pg_hba.conf # Cambiar la siguiente línea: local all postgres peer # por: local all postgres trust
sudo /etc/init.d/postgresql restart
$ psql -U postgres psql (9.3.2) Type "help" for help. postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my-secret-password' NOINHERIT VALID UNTIL 'infinity'; postgres=# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Instalación de paquetes adicionales
Para poder compilar las gemas de ruby que instalaremos más tarde necesitamos una serie de paquetes. Algunos son los mínimos para poder compilar cualquier fuente: gcc, make,... y otros son necesarios para las gemas.sudo apt-get install build-essentialInstalar librería necesaria para utilizar Postgresql desde una aplicación Ruby on Rails
sudo apt-get install libpq-dev
Instalación de Apache
Para poder servir el Redmine una vez instalado vamos a utilizar apache.Instalar apache2 y habilitar los módulos necesarios:
sudo apt-get install apache2 libapache2-mod-fcgid libapache2-mod-proxy-html libfcgi-dev sudo a2enmod rewrite sudo a2enmod proxy_http sudo a2enmod proxy
Instalación de ImageMagick
Para la generación de pdfs y pngs Redmine utiliza ImageMagick, por lo que si queremos utilizar esta funcionalidad deberemos instalarlo junto con las librerías necesarias.$ sudo apt-get install imagemagick libmagickwand-dev libmagickcore-dev
Instalación de Ruby
Ahora ya podemos instalar Ruby. Utilizaremos la versión 1.9.3.sudo apt-get install ruby1.9.3
Instalación de Redmine
Por fin, después de haber instalado todas las dependencias podemos empezar con la instalación de Redmine.wget http://www.redmine.org/releases/redmine-2.4.2.tar.gz tar zxvf redmine-2.4.2.tar.gz ln -s redmine-2.4.2 redmine cd redmineLa creación del enlace simbólico no es necesaria pero es una buena práctica. Además nos sirve en el futuro para actualizar la versión sin tener que tocar la configuración del Apache.
cp config/database.yml.example config/database.yml vi config/database.yml production: adapter: postgresql database: redmine host: localhost username: redmine password: "my-secret-password" encoding: utf8Importante quitar mysql de los environments de develop y test porque sino luego intentará instalar las dependencias y fallará. Poner "postgresql" en todos aunque no se configure nada más. Sólo vamos a usar el environment de producción.
echo 'gem "fcgi"' > Gemfile.local
sudo gem install pg
sudo gem install bundler
sudo bundle install --without development test
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
mkdir -p tmp tmp/pdf public/plugin_assets chmod -R 755 files log tmp public/plugin_assets
rake generate_secret_tokenY listo, ahora sólo falta probar que todo funciona correctamente. Para ello, ejecutamos el servidor web embebido (no utilizar en producción).
$ ruby script/rails server webrick -e production => Booting WEBrick => Rails 3.2.13 application starting in production on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2013-12-28 11:05:17] INFO WEBrick 1.3.1 [2013-12-28 11:05:17] INFO ruby 1.9.3 (2013-11-22) [x86_64-linux] [2013-12-28 11:05:17] INFO WEBrick::HTTPServer#start: pid=25214 port=3000Nos conectamos con el navegador a http://localhost:3000 y nos logamos con admin/admin.
Configuración de Apache
Para servir el Redmine para poder utilizarlo en producción vamos a utilizar Apache junto con fcgi.cp public/htaccess.fcgi.example public/.htaccess cp public/dispatch.fcgi.example public/dispatch.fcgi chmod +x public/dispatch.fcgi
vi config/environment.rb # Añadir la siguiente línea al principio del archivo ENV['RAILS_ENV'] ||= 'production'
sudo vi /etc/apache2/sites-enabled/000-default <VirtualHost *:80> ErrorLog /var/log/apache2/redmine-error-log CustomLog /var/log/apache2/redmine-access-log combined ServerName redmine.my-domain.com ServerAdmin admin@my-domain.com DocumentRoot /home/ivan/redmine/public ProxyPreserveHost On <Directory "/home/ivan/redmine/public/"> Options Indexes ExecCGI FollowSymLinks Order allow,deny Allow from all AllowOverride all </Directory> </VirtualHost>
sudo chown -R www-data:www-data files log tmp public/plugin_assets
sudo /etc/init.d/apache2 restartY listo, si todo va bien deberíamos poder conectarnos a nuestro nuevo Redmine con el dominio que hayamos definido en nuestro virtual host, en este caso http://redmine.my-domain.com.
Bola extra: Actualizar una versión antigua de Redmine
Como he comentado al principio del artículo, llevo utilizando Redmine casi 4 años (empecé en la versión 0.9.6) y he actualizado de versión en bastantes ocasiones. El proceso de actualización es muy simple.sudo /etc/init.d/apache2 stop pg_dump -U postgres redmine > db_redmine.sql
rake db:migrate RAILS_ENV=productionEsto lo que hace es ejecutar todas las migraciones desde la versión que teníamos instalada hasta la versión actual para que el modelo de datos sea el adecuado.
rake redmine:plugins:migrate RAILS_ENV=production
rake tmp:cache:clear rake tmp:sessions:clear
Para el que no esté muy seguro sobre las actualizaciones, decir que en todas las actualizaciones de estos años no he tenido ningún problema y todas han funcionado a la perfección. En esta última actualización he pasado directamente de la versión 1.4.4 a la 2.4.2. Han sido cinco versiones mayor (2.0, 2.1, 2.2, 2.3 y 2.4) y 27 versiones en total de diferencia entre ambas y cero problemas :-)