{"id":452,"date":"2019-09-02T02:09:55","date_gmt":"2019-09-02T02:09:55","guid":{"rendered":"https:\/\/94r.es\/?p=452"},"modified":"2022-06-20T21:49:18","modified_gmt":"2022-06-20T19:49:18","slug":"redmine-en-debian","status":"publish","type":"post","link":"https:\/\/94r.es\/index.php\/2019\/09\/02\/redmine-en-debian\/","title":{"rendered":"Redmine en Debian"},"content":{"rendered":"\n<p><p style=\"text-align: justify;\">Redmine es una herramienta de ticketing de c\u00f3digo abierto muy completa. Adem\u00e1s del gestor de incidencias, incorpora una wiki, un repositorio y un diagrama de Gantt que, en conjunto, permiten canalizar a trav\u00e9s 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.<\/p><\/p>\n\n\n\n<p style=\"text-align: justify;\">En primer lugar debemos configurar un servidor de BBDD, si no lo tenemos ya. Para ello, ejecutamos el siguiente comando, que instalar\u00e1 los paquetes necesarios:<\/p>\n\n\n\n<blockquote><p>apt install mysql-server<\/p><\/blockquote>\n\n\n\n<p style=\"text-align: justify;\">No es necesario que configuremos una base de datos hu\u00e9sped para la aplicaci\u00f3n, ya que a trav\u00e9s de este comando instalamos la aplicaci\u00f3n y, por el camino, creamos la BBDD y configuramos la conexi\u00f3n contra ella de manera autom\u00e1tica:<\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>apt install redmine-mysql<\/p><\/blockquote><\/p>\n\n\n\n<p style=\"text-align: justify;\">A falta del servidor web, ya tendr\u00edamos todo listo para lanzar la aplicaci\u00f3n. En mi caso, he configurado Apache, ya que la implementaci\u00f3n con Passenger, el servidor de aplicaciones con soporte para el framework Ruby on Rails (sobre el que est\u00e1 desarrollada Redmine) es muy c\u00f3moda, pues incluye una plantilla tipo que usaremos para configurar nuestro host. As\u00ed pues, instalamos Apache:<\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>apt install apache2 libapache2-mod-passenger<\/p><\/blockquote><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Acto seguido, copiamos la plantilla mencionada anteriormente en el path de hosts disponibles que m\u00e1s tarde habilitaremos y la renombramos como queramos:<\/p><\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>cp \/usr\/share\/doc\/redmine\/examples\/apache2-passenger-host.conf \/etc\/apache2\/sites-available\/nuestrositio.conf<\/p><\/blockquote><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Editamos el archivo de configuraci\u00f3n, que nos mostrar\u00e1 una plantilla en la que \u00fanicamente habremos de cambiar el ServerName (y quitarle la almohadilla) por el que vayamos a configurar y el path de la aplicaci\u00f3n (DocumentRoot) en caso de que no queramos que se ubique en el propuesto por defecto (\/usr\/share\/redmine\/public). Hecho esto, ya s\u00f3lo queda habilitar el m\u00f3dulo Passenger, nuestro host (crea un enlace simb\u00f3lico de \/sites-available\/ a \/sites-enabled\/), deshabilitar el host por defecto y recargar la configuraci\u00f3n de Apache:<\/p><\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>a2enmod passenger &amp;&amp; a2ensite nuestrositio.conf &amp;&amp; a2dissite 000-default &amp;&amp; systemctl reload apache2<\/p><\/blockquote><\/p>\n\n\n\n<p>A partir de este punto ya tendr\u00edamos la aplicaci\u00f3n instalada y corriendo (http:\/\/ipdenuestram\u00e1quina). Las credenciales por defecto son admin &#8211; admin. Si se quiere instalar un certificado SSL se puede seguir <a href=\"https:\/\/94r.es\/index.php\/2018\/05\/20\/certificado-ssl-para-host-nginx-en-debian\/\">esta gu\u00eda<\/a>, y si se quiere acceder a la aplicaci\u00f3n desde Internet a trav\u00e9s de un dominio <a href=\"https:\/\/94r.es\/index.php\/2019\/04\/11\/plex-desde-la-consola-bash\/\">esta otra<\/a> (a partir de <em>Para nota<\/em>). En los siguientes p\u00e1rrafos, pues, abordaremos aspectos de configuraci\u00f3n b\u00e1sica para personalizar la aplicaci\u00f3n y la configuraci\u00f3n de un MTA sencillo para que la aplicaci\u00f3n pueda enviar correos autom\u00e1ticos y transformar los que recibe en incidencias.<\/p>\n\n\n\n<p style=\"text-align: justify;\">Vamos con la configuraci\u00f3n b\u00e1sica. 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 <em>Iniciar sesi\u00f3n <\/em>para autenticarse (un absurdo, ya que se sobreentiende que la aplicaci\u00f3n estar\u00e1 limitada a un cerco de usuarios) y despu\u00e9s de eso muestra la p\u00e1gina Inicio que, salvo que la personalices de alg\u00fan modo, carece de utilidad. Como usuario admin, en Administraci\u00f3n  &#8211; Configuraci\u00f3n &#8211; Autenticaci\u00f3n marcamos el checkbox de <em>Se requiere identificaci\u00f3n <\/em>para que la p\u00e1gina que muestre la aplicaci\u00f3n sea el login. En la misma l\u00ednea, para que tras hacer login no nos aparezca la p\u00e1gina <em>Inicio<\/em> y s\u00ed <em>Mi p\u00e1gina<\/em> (donde se nos desglosa nuestra actividad y la de los proyectos a los que pertenecemos) borramos la siguiente l\u00ednea del archivo config\/routes.rb (en el ra\u00edz de la aplicaci\u00f3n), bajo <em>Rails.application.routes.draw do<\/em>:<\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>root :to =&gt; &#8216;welcome#index&#8217;, :as =&gt; &#8216;home&#8217;<\/p><\/blockquote><\/p>\n\n\n\n<p>Y pegamos esta otra:<\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>root :to =&gt; &#8216;my#page&#8217;, :via =&gt; :get, :as =&gt; &#8216;home&#8217;<\/p><\/blockquote><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Con esto ya tenemos bastante ganado, pero no lo suficiente, ya que el tema est\u00e1ndar es una casta\u00f1a que ni tan siquiera muestra diferencias visualmente entre incidencias de diferente prioridad:<\/p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"1024\" height=\"250\" src=\"https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1024x250.png\" alt=\"\" class=\"wp-image-459\" srcset=\"https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1024x250.png 1024w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-300x73.png 300w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-768x187.png 768w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-830x202.png 830w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-230x56.png 230w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-350x85.png 350w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-480x117.png 480w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image.png 1447w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption><br><\/figcaption><\/figure>\n\n\n\n<p><p style=\"text-align: justify;\">Cambiamos el tema por defecto a Alternate (<em>Administraci\u00f3n &#8211; Configuraci\u00f3n &#8211; Mostrar &#8211; Tema<\/em>), ya que este colorea las incidencias en funci\u00f3n de su prioridad. Adem\u00e1s, en <em>Administraci\u00f3n &#8211; Tipos de peticiones\/Estados de las peticiones\/Listas de valores<\/em> podemos cambiar los campos tipo, estado y prioridad por los que consideremos o incluso a\u00f1adir (<em>Campos personalizados<\/em>) o eliminar alguno.<\/p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"1024\" height=\"262\" src=\"https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-1024x262.png\" alt=\"\" class=\"wp-image-461\" srcset=\"https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-1024x262.png 1024w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-300x77.png 300w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-768x197.png 768w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-830x213.png 830w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-230x59.png 230w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-350x90.png 350w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1-480x123.png 480w, https:\/\/94r.es\/wp-content\/uploads\/2019\/09\/image-1.png 1429w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><p style=\"text-align: justify;\">Dentro de configuraci\u00f3n se pueden especificar otros campos, como los roles o los permisos, pero eso ya es bastante intuitivo, de modo que vamos a por m\u00e1s 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:<\/p><\/p>\n\n\n\n<ul><li>En el directorio plugins descargamos el plugin que queramos (<a href=\"https:\/\/www.redmine.org\/plugins?page=1\">en Redmine hay un mont\u00f3n<\/a>) con <em>git clone <\/em>seguido de la url del plugin.<\/li><li>Actualizamos la BBDD con el siguiente comando ejecutado en el ra\u00edz de la aplicaci\u00f3n: <em>bundle exec rake redmine:plugins:migrate RAILS_ENV=production<\/em><\/li><li>Reiniciamos la aplicaci\u00f3n: <em>systemctl restart apache2<\/em><\/li><\/ul>\n\n\n\n<p><p style=\"text-align: justify;\">En esta \u00faltima parte abordaremos el tema del correo: env\u00edos autom\u00e1ticos (notificaciones y p\u00e9rdida de contrase\u00f1a) y configurar recepci\u00f3n 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\u00f3n y cumplir\u00e1 de sobra con lo que necesitamos para este prop\u00f3sito:<\/p><\/p>\n\n\n\n<p style=\"text-align:center\"><blockquote><p>apt-get install ssmtp<\/p><\/blockquote><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">En el archivo de configuraci\u00f3n (\/etc\/ssmtp\/ssmtp.conf) borramos lo existente y, salvo que se quiera una configuraci\u00f3n m\u00e1s espec\u00edfica (se pueden configurar restricciones y excepciones) lo dejamos de la siguiente manera, en el supuesto de que lo estemos configurando para una cuenta GMAIL:<em>m<\/em><\/p><\/p>\n\n\n\n<p><em>root=mail@queusaremosparaesto.com<br> mailhub=smtp.gmail.com:587<br> hostname=localhost<br> AuthUser=mail@queusaremosparaesto.com<\/em> <em><br> AuthPass=contrase\u00f1a<br> UseSTARTTLS=YES<br> UseTLS=YES<\/em><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Para que funcione, claro, es imperativo que en nuestra cuenta de GMAIL tengamos habilitado el acceso IMAP: <em>Configurar &#8211; Reenv\u00edo y correo POP\/IMAP<\/em> y marcamos el checkbox de <em>Habilitar IMAP.<\/em><\/p><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Hecho esto ya casi podemos empezar a enviar correos. S\u00f3lo falta crear un archivo llamado configuration.yml en \/etc\/redmine\/ y especificar lo siguiente:<\/p><\/p>\n\n\n\n<p><em>email_delivery:<br>     delivery_method: :smtp<br>     smtp_settings:<br>       ssl: true<br>       address: \u00absmtp.gmail.com\u00bb<br>       domain: \u00abgmail.com\u00bb<br>       port: 465<br>       authentication: :login<br>       user_name: \u00abmail@queusaremosparaesto.com\u00bb<br>       password: \u00abcontrase\u00f1a\u00bb<\/em><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Reiniciamos la aplicaci\u00f3n y ya estar\u00eda listo. En <em>Administraci\u00f3n &#8211; Configuraci\u00f3n &#8211; Notificaciones<\/em> podemos personalizar un encabezado y pie de p\u00e1gina tipo para los correos autom\u00e1ticos, as\u00ed como los tipos de eventos a notificar.<\/p><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Por \u00faltimo, configuramos la recepci\u00f3n de correo para que los que se env\u00eden a la direcci\u00f3n que hemos configurado en el MTA en los pasos anteriores desde una direcci\u00f3n perteneciente a un usuario con permisos para crear incidencias genere un ticket cuyo t\u00edtulo se corresponda con el  asunto y cuya descripci\u00f3n con el cuerpo. Para ello vamos a instalar un programa sencillo, creado para este prop\u00f3sito, llamado rufus-scheduler:<\/p><\/p>\n\n\n\n<p><blockquote><p>gem install rufus-scheduler<\/p><\/blockquote><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Una vez instalado, a\u00f1adimos una l\u00ednea con el siguiente texto al archivo Gemfile, ubicado en el ra\u00edz de la aplicaci\u00f3n: <em>gem \u00abrufus-scheduler\u00bb<\/em>. De igual modo, en \/etc\/apache2\/mods-enabled\/passenger.conf debemos a\u00f1adir la l\u00ednea <em>PassengerSpawnMethod direct<\/em> dentro del <em>IfModule<\/em> definido. Para terminar, creamos un archivo con cualquier nombre, terminado en la extensi\u00f3n .rb en config\/initializers (dentro del ra\u00edz de la aplicaci\u00f3n) y lo configuramos as\u00ed:<\/p><\/p>\n\n\n\n<p><em>require &#8216;rubygems&#8217;<br> require &#8216;rake&#8217;<br> require &#8216;rufus-scheduler&#8217;<br> load File.join(Rails.root, &#8216;Rakefile&#8217;)<br> ENV[&#8216;host&#8217;]=&#8217;imap.gmail.com&#8217;<br> ENV[&#8216;port&#8217;]=&#8217;993&#8242;<br> ENV[&#8216;ssl&#8217;]=&#8217;SSL&#8217;<br> ENV[&#8216;username&#8217;]=&#8217;mail@queusaremosparaesto.com&#8217;<br> ENV[&#8216;password&#8217;]=&#8217;contrase\u00f1a&#8217;<br> ENV[&#8216;project&#8217;]=&#8217;ProyectoGen\u00e9rico&#8217;<br> scheduler = Rufus::Scheduler.new<br> #En la l\u00ednea de debajo definimos cada cu\u00e1ntos minutos checkea si hay nuevos correos:<br> scheduler.interval &#8216;2m&#8217; do<br>   task = Rake.application[&#8216;redmine:email:receive_imap&#8217;]<br>   task.reenable<br>   task.invoke<br> end<\/em><\/p>\n\n\n\n<p style=\"text-align: justify;\">Actualizamos la base de datos como tras la instalaci\u00f3n de un plugin (<em>bundle exec rake redmine:plugins:migrate RAILS_ENV=production<\/em>) y ya habremos terminado. En el archivo de configuraci\u00f3n anterior se ha especificado un proyecto para el que entren todas las incidencias. Si se prefiere, se puede borrar esa l\u00ednea y de este modo se podr\u00edan crear en cualquier proyecto, pero en el cuerpo del correo el remitente deber\u00e1 incluir Project: proyectoquequiera. Considero que es m\u00e1s eficaz que se canalicen hacia uno gen\u00e9rico, ya que se pueden mover desde ah\u00ed 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\u00e1s, si en el asunto ponemos entre corchetes y seguido de una almohadilla el n\u00famero de una incidencia existente, esta se actualizar\u00e1 con el cuerpo del correo, en lugar de crear una nueva.<\/p>\n\n\n\n<p style=\"text-align: justify;\">Para terminar, indicar que todos los ejemplos relativos a la configuraci\u00f3n de correo sirven \u00fanicamente para una cuenta GMAIL a la que se accede a trav\u00e9s de IMAP. Para configurar una cuenta GMAIL en POP3 deber\u00edamos cambiar la task Rake.application por redmine:email:receive_pop3 y el host y el puerto por los indicados <a href=\"https:\/\/support.google.com\/mail\/answer\/7104828?authuser=1&amp;hl=es&amp;authuser=1&amp;visit_id=637029863497346403-2950590385&amp;rd=1\">aqu\u00ed<\/a>. En caso de que quisi\u00e9ramos configurar una cuenta Hotmail, aplicar\u00edan <a href=\"https:\/\/support.office.com\/es-es\/article\/configuraci%C3%B3n-pop-imap-y-smtp-para-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040\">estos <\/a>par\u00e1metros.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Redmine es una herramienta de ticketing de c\u00f3digo abierto muy completa. Adem\u00e1s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/452"}],"collection":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/comments?post=452"}],"version-history":[{"count":28,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/452\/revisions"}],"predecessor-version":[{"id":487,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/452\/revisions\/487"}],"wp:attachment":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/media?parent=452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/categories?post=452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/tags?post=452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}