domingo, 29 de diciembre de 2013

Instalación de Redmine en Debian 7




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.

  • Añadir el repo de Postgres
  • sudo vi /etc/apt/sources.list.d/pgdg.list
    
    # Postgresql
    deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
    
  • Añadir clave de verificación
  • wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    
  • Actualizar los paquetes e instalar postgresql-9.3
  • sudo apt-get update
    sudo apt-get install postgresql-9.3
    
  • Damos permisos para conectarnos a las bases de datos
  • sudo vi /etc/postgresql/9.3/main/pg_hba.conf
    
    # Cambiar la siguiente línea:
    local   all             postgres                                peer
    
    # por:
    local   all             postgres                                trust
    
  • Reiniciar el servidor para que aplique los cambios:
  • sudo /etc/init.d/postgresql restart
    
  • Crear la base de datos
  • $ 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-essential
    
    Instalar 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.
  • Descargar la última versión disponible. En el momento de escribir este artículo es la versión 2.4.2
  • 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 redmine
    
    La 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.
  • Crear el archivo de configuración de la base de datos a partir del que viene de ejemplo y editarlo
  • 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: utf8
    
    Importante 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.
  • Añadir una gema que luego utilizaremos para que se instale junto con el resto.
  • echo 'gem "fcgi"' > Gemfile.local
    
  • Instalar gema de postgresql
  • sudo gem install pg
    
  • Instalar gestor de gemas
  • sudo gem install bundler
    
  • Instalar todas las dependencias de Redmine
  • sudo bundle install --without development test
    
  • Crear las tablas de la base de datos
  • RAILS_ENV=production rake db:migrate
    
  • Crear los datos iniciales (recomendado en inglés)
  • RAILS_ENV=production rake redmine:load_default_data
  • Crear directorios y dar permisos
  • mkdir -p tmp tmp/pdf public/plugin_assets
    chmod -R 755 files log tmp public/plugin_assets
    
  • Generar el session store secret
  • rake generate_secret_token
    Y 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=3000
    
    Nos 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.
  • Desde el directorio redmine copiamos el archivo htaccess y de fcgi a partir de las plantillas.
  • cp public/htaccess.fcgi.example public/.htaccess
    cp public/dispatch.fcgi.example public/dispatch.fcgi
    chmod +x public/dispatch.fcgi
    
  • Editar el archivo de configuración de entornos para utilizar el de producción por defecto
  • vi config/environment.rb
    
    # Añadir la siguiente línea al principio del archivo
    ENV['RAILS_ENV'] ||= 'production'
    
  • Añadir el nuevo virtual host al apache
  • 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>
    
  • Dar permisos de escritura al usuario de apache a algunos archivos y directorios
  • sudo chown -R www-data:www-data files log tmp public/plugin_assets
  • Reiniciar apache
  • sudo /etc/init.d/apache2 restart
    Y 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.

  • Instalar la nueva versión como hemos hecho hasta ahora y comprobar que todo funciona correctamente.
  • Parar apache y hacer una copia de seguridad de nuestra base de datos actual (espero que además hagas copias periódicas).
  • sudo /etc/init.d/apache2 stop
    pg_dump -U postgres redmine > db_redmine.sql
    
  • Después de instalar la nueva versión de redmine, en lugar de crear todas las tabla en la base de datos, lo que tenemos que hacer es ejecutar la migración de las mismas.
  • rake db:migrate RAILS_ENV=production
    
    Esto 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.
  • Si tenemos plugins instalados, ejecutar sus migraciones.
  • rake redmine:plugins:migrate RAILS_ENV=production
  • Copiar los archivos subidos del directorio files del redmine antiguo al nuevo.
  • Limpiar cache y sesiones.
  • rake tmp:cache:clear
    rake tmp:sessions:clear
    
  • Finalmente reiniciar apache y logarnos de nuevo. Luego, en el menú Administration -> Information podemos comprobar que la migración se ha realizado correctamente y estamos con la versión adecuada:


    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 :-)
  • 12 comentarios:

    Roberto dijo...

    Quizás valdría la pena mencionar, que en caso de ocupar la versión de redmine que hay empaquetada en debian, se gana la posibilidad de tener múltiples instancias de redmine corriendo con solo una instalación, ahorrando tiempo de gestión sobre la instancia, en caso de que se necesaria esta figura.

    Igualmente la guía está súper útil. Muchas gracias!

    Iván dijo...

    Hola Roberto,

    nunca he necesitado tener varias instancias de Redmine sobre la misma instalación. Me lo apunto por si alguna vez lo necesito.

    Aún así, para estos casos me gusta instalar la versión que yo quiero y no la que está en los repos (que además es muy antigua):

    $ apt-cache show redmine
    Package: redmine
    Version: 1.4.4+dfsg1-2+deb7u1

    Isaac Lacoba dijo...

    Buenas. He seguido tu tutorial y me ha ayudado a saber cómo instalar y configurar todos los componentes necesarios para tener corriendo redmine en local(apache, ruby y sus gemas,...). Quiero instalar redmine en un servicio de hosting, pero no tengo ni idea de cómo hacerlo. ¿Cambia mucho este tutorial para el caso que planteo?
    PD: por supuesto el hosting soporta ruby on rails.

    Iván dijo...

    Hola Isaac,

    si tienes acceso por ssh a la máquina y permisos de root para instalar todas las dependencias y configurar apache no debería cambiar nada. Es igual que si lo instalas en tu máquina.

    Saludos, Iván.

    Anónimo dijo...

    Gracias por el tutorial, todo funciono a la perfección, a excepción del ultimo paso (CONFIGURACION APACHE) ¿Como hago si lo instale en un server de mi misma red? que coloco en el nameserver?

    Anónimo dijo...

    Hola, he seguido tu tutorial y me ha servido mucho, antes de dar con él no sabía ni la mitad del software que necesitaba instalar jejeje He seguido los pasos a rajatabla pero no soy capaz de hacer que funcione correctamente en la prueba final, me sale esto: $ ruby script/rails server webrick -e production
    => Booting WEBrick
    => Rails 3.2.16 application starting in production on http://0.0.0.0:3000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    Exiting
    /var/lib/gems/1.8/gems/activerecord-3.2.16/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `initialize': FATAL: la autentificación password falló para el usuario «root» (PG::ConnectionBad)
    FATAL: la autentificación password falló para el usuario «root»

    Si se te ocurre alguna solución te lo agradecería mucho puesto que ando perdida. Un saludo

    Iván dijo...

    Hola,

    @Anónimo1: En el ServerName tienes que poner el nombre por el que te quieras conectar al servidor. Si no necesitas que sea accesible desde internet puedes poner alguno que puedas resolver con los dns de tu red interna. Sino, siempre puedes poner cualquier nombre y forzar en tu /etc/hosts ese nombre a la ip del servidor.

    @Anónimo2: El error indica que el password para el usuario root no es válido. Revisa todos los pasos porque yo creo un usuario en Postgresql para el redmine y luego configuro ese para conectarse a la base de datos.

    Saludos, Iván.

    Anónimo dijo...

    Excelente post!!

    Ines dijo...

    Hola, por favor necesito instalarlo con Mysql, ya trate dos veces distintas y no logro dejarlo configurado. Me ayudas con algun post, o link que me diga como hacer, segui los pasos de algun tutorial pero no lo puedo hacer andar. Mi problema creo que esta con ruby :(

    Iván dijo...

    @Inés: Nunca he instalado Redmine con Mysql así que no te puedo ayudar demasiado. Supongo que la única diferencia es que tendrás que instalar las gemas de ruby y los paquetes necesarios de mysql en lugar de los de Postgresql.

    Saludos, Iván.

    Jose Manuel Rojas dijo...

    Buenas tardes amigo, excelente post, mis felicitaciones. Ya lo apliqué y me funcionó todo excepto los dos siguientes detalles:

    1. Para ejecutarlo con el server web embebido debe hacerse con la siguiente línea:
    ruby bin/rails server webrick -e production
    y no con esta:
    ruby script/rails server webrick -e production

    2. El enlace simbólico de la APP recomiendo que se haga en /var/www

    Jose Manuel Rojas dijo...

    Es importante acotar que lo instalé con GNU/Linux Debian Jessie y Postgres 9.4

    Publicar un comentario