Redmine en Debian

Redmine es una herramienta de ticketing de código abierto muy completa. Además del gestor de incidencias, incorpora una wiki, un repositorio y un diagrama de Gantt que, en conjunto, permiten canalizar a través de ella gran parte del flujo de trabajo diario de una empresa. En esta entrada veremos la manera de instalarla y configurarla en un servidor Debian.

En primer lugar debemos configurar un servidor de BBDD, si no lo tenemos ya. Para ello, ejecutamos el siguiente comando, que instalará los paquetes necesarios:

apt install mysql-server

No es necesario que configuremos una base de datos huésped para la aplicación, ya que a través de este comando instalamos la aplicación y, por el camino, creamos la BBDD y configuramos la conexión contra ella de manera automática:

apt install redmine-mysql

A falta del servidor web, ya tendríamos todo listo para lanzar la aplicación. En mi caso, he configurado Apache, ya que la implementación con Passenger, el servidor de aplicaciones con soporte para el framework Ruby on Rails (sobre el que está desarrollada Redmine) es muy cómoda, pues incluye una plantilla tipo que usaremos para configurar nuestro host. Así pues, instalamos Apache:

apt install apache2 libapache2-mod-passenger

Acto seguido, copiamos la plantilla mencionada anteriormente en el path de hosts disponibles que más tarde habilitaremos y la renombramos como queramos:

cp /usr/share/doc/redmine/examples/apache2-passenger-host.conf /etc/apache2/sites-available/nuestrositio.conf

Editamos el archivo de configuración, que nos mostrará una plantilla en la que únicamente habremos de cambiar el ServerName (y quitarle la almohadilla) por el que vayamos a configurar y el path de la aplicación (DocumentRoot) en caso de que no queramos que se ubique en el propuesto por defecto (/usr/share/redmine/public). Hecho esto, ya sólo queda habilitar el módulo Passenger, nuestro host (crea un enlace simbólico de /sites-available/ a /sites-enabled/), deshabilitar el host por defecto y recargar la configuración de Apache:

a2enmod passenger && a2ensite nuestrositio.conf && a2dissite 000-default && systemctl reload apache2

A partir de este punto ya tendríamos la aplicación instalada y corriendo (http://ipdenuestramáquina). Las credenciales por defecto son admin – admin. Si se quiere instalar un certificado SSL se puede seguir esta guía, y si se quiere acceder a la aplicación desde Internet a través de un dominio esta otra (a partir de Para nota). En los siguientes párrafos, pues, abordaremos aspectos de configuración básica para personalizar la aplicación y la configuración de un MTA sencillo para que la aplicación pueda enviar correos automáticos y transformar los que recibe en incidencias.

Vamos con la configuración básica. Si Redmine tiene un fallo es que, por defecto, para entrar y llegar a tu proyecto hay que dar demasiados clics, ya que hay que ir a Iniciar sesión para autenticarse (un absurdo, ya que se sobreentiende que la aplicación estará limitada a un cerco de usuarios) y después de eso muestra la página Inicio que, salvo que la personalices de algún modo, carece de utilidad. Como usuario admin, en Administración – Configuración – Autenticación marcamos el checkbox de Se requiere identificación para que la página que muestre la aplicación sea el login. En la misma línea, para que tras hacer login no nos aparezca la página Inicio y sí Mi página (donde se nos desglosa nuestra actividad y la de los proyectos a los que pertenecemos) borramos la siguiente línea del archivo config/routes.rb (en el raíz de la aplicación), bajo Rails.application.routes.draw do:

root :to => ‘welcome#index’, :as => ‘home’

Y pegamos esta otra:

root :to => ‘my#page’, :via => :get, :as => ‘home’

Con esto ya tenemos bastante ganado, pero no lo suficiente, ya que el tema estándar es una castaña que ni tan siquiera muestra diferencias visualmente entre incidencias de diferente prioridad:


Cambiamos el tema por defecto a Alternate (Administración – Configuración – Mostrar – Tema), ya que este colorea las incidencias en función de su prioridad. Además, en Administración – Tipos de peticiones/Estados de las peticiones/Listas de valores podemos cambiar los campos tipo, estado y prioridad por los que consideremos o incluso añadir (Campos personalizados) o eliminar alguno.

Dentro de configuración se pueden especificar otros campos, como los roles o los permisos, pero eso ya es bastante intuitivo, de modo que vamos a por más cosas que puedan resultar de utilidad para quien lee esto: los plugins. Si en /usr/share/redmine no existe el directorio plugins lo creamos y lo dotamos de permisos para el usuario www-data (chown www-data\: plugins/). Todos los plugins se instalan de la siguiente manera:

  • En el directorio plugins descargamos el plugin que queramos (en Redmine hay un montón) con git clone seguido de la url del plugin.
  • Actualizamos la BBDD con el siguiente comando ejecutado en el raíz de la aplicación: bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • Reiniciamos la aplicación: systemctl restart apache2

En esta última parte abordaremos el tema del correo: envíos automáticos (notificaciones y pérdida de contraseña) y configurar recepción para crear incidencias de este modo. En primer lugar debemos instalar un MTA. Nuestro candidato es uno muy sencillo de instalar llamado sSMTP, que apenas requiere configuración y cumplirá de sobra con lo que necesitamos para este propósito:

apt-get install ssmtp

En el archivo de configuración (/etc/ssmtp/ssmtp.conf) borramos lo existente y, salvo que se quiera una configuración más específica (se pueden configurar restricciones y excepciones) lo dejamos de la siguiente manera, en el supuesto de que lo estemos configurando para una cuenta GMAIL:m

root=mail@queusaremosparaesto.com
mailhub=smtp.gmail.com:587
hostname=localhost
AuthUser=mail@queusaremosparaesto.com

AuthPass=contraseña
UseSTARTTLS=YES
UseTLS=YES

Para que funcione, claro, es imperativo que en nuestra cuenta de GMAIL tengamos habilitado el acceso IMAP: Configurar – Reenvío y correo POP/IMAP y marcamos el checkbox de Habilitar IMAP.

Hecho esto ya casi podemos empezar a enviar correos. Sólo falta crear un archivo llamado configuration.yml en /etc/redmine/ y especificar lo siguiente:

email_delivery:
delivery_method: :smtp
smtp_settings:
ssl: true
address: «smtp.gmail.com»
domain: «gmail.com»
port: 465
authentication: :login
user_name: «mail@queusaremosparaesto.com»
password: «contraseña»

Reiniciamos la aplicación y ya estaría listo. En Administración – Configuración – Notificaciones podemos personalizar un encabezado y pie de página tipo para los correos automáticos, así como los tipos de eventos a notificar.

Por último, configuramos la recepción de correo para que los que se envíen a la dirección que hemos configurado en el MTA en los pasos anteriores desde una dirección perteneciente a un usuario con permisos para crear incidencias genere un ticket cuyo título se corresponda con el asunto y cuya descripción con el cuerpo. Para ello vamos a instalar un programa sencillo, creado para este propósito, llamado rufus-scheduler:

gem install rufus-scheduler

Una vez instalado, añadimos una línea con el siguiente texto al archivo Gemfile, ubicado en el raíz de la aplicación: gem «rufus-scheduler». De igual modo, en /etc/apache2/mods-enabled/passenger.conf debemos añadir la línea PassengerSpawnMethod direct dentro del IfModule definido. Para terminar, creamos un archivo con cualquier nombre, terminado en la extensión .rb en config/initializers (dentro del raíz de la aplicación) y lo configuramos así:

require ‘rubygems’
require ‘rake’
require ‘rufus-scheduler’
load File.join(Rails.root, ‘Rakefile’)
ENV[‘host’]=’imap.gmail.com’
ENV[‘port’]=’993′
ENV[‘ssl’]=’SSL’
ENV[‘username’]=’mail@queusaremosparaesto.com’
ENV[‘password’]=’contraseña’
ENV[‘project’]=’ProyectoGenérico’
scheduler = Rufus::Scheduler.new
#En la línea de debajo definimos cada cuántos minutos checkea si hay nuevos correos:
scheduler.interval ‘2m’ do
task = Rake.application[‘redmine:email:receive_imap’]
task.reenable
task.invoke
end

Actualizamos la base de datos como tras la instalación de un plugin (bundle exec rake redmine:plugins:migrate RAILS_ENV=production) y ya habremos terminado. En el archivo de configuración anterior se ha especificado un proyecto para el que entren todas las incidencias. Si se prefiere, se puede borrar esa línea y de este modo se podrían crear en cualquier proyecto, pero en el cuerpo del correo el remitente deberá incluir Project: proyectoquequiera. Considero que es más eficaz que se canalicen hacia uno genérico, ya que se pueden mover desde ahí y es menos latoso que el hecho de que el usuario tenga que procurarse la string cada vez que quiera abrir una incidencia por correo. Además, si en el asunto ponemos entre corchetes y seguido de una almohadilla el número de una incidencia existente, esta se actualizará con el cuerpo del correo, en lugar de crear una nueva.

Para terminar, indicar que todos los ejemplos relativos a la configuración de correo sirven únicamente para una cuenta GMAIL a la que se accede a través de IMAP. Para configurar una cuenta GMAIL en POP3 deberíamos cambiar la task Rake.application por redmine:email:receive_pop3 y el host y el puerto por los indicados aquí. En caso de que quisiéramos configurar una cuenta Hotmail, aplicarían estos parámetros.