Instalar y migrar Redmine 2.6.1 en Debian Jessie
Redmine es una herramienta web de gestión de proyectos que integra un sistema de seguimiento, permitiendo cubrir todo el proceso de creación, desarrollo y cierre de un proyecto. Además, incluye otras herramientas por defecto como un calendario, diagramas de Gantt, wikis, foros, visor de repositorios de control de versiones y un largo etcétera que puede ampliarse aún más a través de plugins.
Está escrito con el framework Ruby on Rails, es open source y su primera versión se lanzó en junio de 2006. A día de hoy cuenta con la versión 3.3.2, lanzada en enero de 2017.
El motivo de instalar una versión antigua de Redmine (2.6.1 vs 3.4.3) en un sistema relativamente nuevo es debido a que se trata de una migración desde otro servidor y la actualización de Redmine será posterior.
Existen múltiples formas de instalar esta herramienta de gestión de proyectos, que en ocasiones se utiliza como gestor de tickets dentro de una empresa. En este caso lo haré siguiendo la documentación oficial HowTo Install Redmine on Debian 8 with Apache2-Passenger que como bien dice se realiza mediante Passenger, un módulo de conexión entre Ruby y Apache2 que es compatible con servidores web nginx.
El entorno final será una máquina Debian Jessie (Debian 8) con Apache2, montando Redmine con el módulo Passenger y su base de datos con el motor de base de datos MySQL. Igualmente, veremos como instalar los dos plugins procedentes de la antigua instalación y el theme personalizado, así como exportar los ficheros adjuntos.
Ejecuta todos los comandos como usuario normal. Si requiere privilegios de root necesitas utilizar sudo. Consulta cómo añadir un usuario a «sudoers», para darle permisos de administrador.
Instalación de Redmine 2.6.1 en Debian Jessie 8.7
Instalación de los paquetes en Debian
Comenzamos con la instalación de los paquetes necesarios para la ejecución de Redmine en Debian Jessie. Recuerda que debes hacerlo como usuario sin privilegios, anteponiéndole sudo.
Este comando instalará Apache, MySQL y Passengers así como diversas librerías.
sudo apt install mysql-server mysql-client libmysqlclient-dev gcc build-essential zlib1g zlib1g-dev zlibc ruby-zip libssl-dev libyaml-dev libcurl4-openssl-dev ruby gem libapache2-mod-passenger apache2-mpm-prefork apache2-dev libapr1-dev libxslt1-dev checkinstall libxml2-dev ruby-dev vim libmagickwand-dev imagemagick
Descargar, configurar e instalar Redmine
Descargar Redmine 2.6.1
Creamos el directorio donde se ubicará Redmine y establecemos al usuario sin privilegios como propietario. Luego descargamos con wget el paquete comprimido de la versión que deseamos.
1 2 3 4 5 6 |
sudo mkdir /opt/redmine sudo chown -R $(whoami) /opt/redmine/ cd /opt/redmine/ wget http://www.redmine.org/releases/redmine-2.6.1.tar.gz tar xzf redmine-2.6.1.tar.gz cd redmine-2.6.1 |
Las distintas versiones de Redmine podemos encontrarlas en su página oficial: https://www.redmine.org/releases/
Configuración de la base de datos MySQL
Accedemos al sistema gestor de base de datos MySQL con la ejecución de mysql -u root -p
En él creamos una base de datos de nombre redminebd y un usuario llamado redmineuser con todos los privilegios sobre esa base de datos.
1 2 3 4 5 6 7 8 9 10 11 |
mysql> CREATE DATABASE redminebd CHARACTER SET utf8; Query OK, 1 row affected (0.01 sec) mysql> CREATE USER 'redmineuser'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON redminebd.* TO 'redmineuser'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye |
Seguidamente nos ubicamos en el directorio descomprimido y copiamos el fichero de configuración de ejemplo. Para ello ejecutamos cp config/database.yml.example config/database.yml
Editamos el fichero /opt/redmine/redmine-2.6.1/config/database.yml y modificamos los parámetros de conexión con la base de datos de producción, quedando así en nuestro caso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Default setup is given for MySQL with ruby1.9. If you're running Redmine # with MySQL and ruby1.8, replace the adapter name with `mysql`. # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end. # Line indentation must be 2 spaces (no tabs). production: adapter: mysql2 database: redminebd host: localhost username: redmineuser password: "password" encoding: utf8 (...) |
Instalación del paquete
Ubicados en el directorio /opt/redmine/redmine-2.6.1 ejecutamos la instalación del gestor de gemas de Ruby llamado bundler.
Ejecutamos sudo gem install bundler
para instalar la gema y luego bundle install --without development test
para ejecutar la instalación del bundle.
Finalizará advirtiendo que, según nuestra versión de Ruby, deberemos de instalar unas dependencias o no. En nuestro caso no es necesario instalar ninguna gema adicional.
Esto instalará solo el escenario de producción, no instalando el de desarrollo ni el de testeo. Generamos una clave secreta con bundle exec rake generate_secret_token
.
Por último ejecutamos la preparación de la base de datos y la instalación de todas las tablas RAILS_ENV=production bundle exec rake db:migrate
Si ejecutamos RAILS_ENV=production bundle exec rake redmine:load_default_data
cargará datos de prueba en nuestra instalación de Redmine.
Configuración de Apache
El servicio de Apache corre con el usuario www-data, por ello este usuario necesita acceso a algunos directorios. Ejecutamos en nuestra terminal la siguiente batería de comandos:
1 2 3 |
sudo chown -R www-data files log tmp public/plugin_assets sudo chmod -R 755 files log tmp public/plugin_assets sudo chown www-data:www-data Gemfile.lock |
Creamos un enlace simbólico hacia el directorio de la instalación, de manera que el servidor web pueda servirlo a través de HTTP: sudo ln -s /opt/redmine/redmine-2.6.1/public/ /var/www/html/redmine
Editamos el fichero /etc/apache2/sites-available/000-default.conf, que es el VirtualHost generado por defecto.
En nuestro caso, al ser un servidor recién instalado, este sería nuestro VirtualHost sin comentarios:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<VirtualHost *:80> ServerName localhost ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ <Location /redmine> RailsEnv production RackBaseURI /redmine Options -MultiViews </Location> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Editamos el fichero /etc/apache2/mods-available/passenger.conf, quedando así:
1 2 3 4 5 |
<IfModule mod_passenger.c> PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini PassengerDefaultRuby /usr/bin/ruby PassengerUser www-data </IfModule> |
Recargamos el servidor web para que reciba los cambios realizados en la configuración: sudo /etc/init.d/apache2 reload
Migración del Redmine 2.6.1 en producción
El siguiente paso es copiar los datos del gestor de proyectos que ya se encuentra en uso en nuestro servidor con Debian 6.0. Para ello es necesario, principalmente, dos elementos: la base de datos y los ficheros adjuntos. Comenzaremos con la copia de ficheros adjuntos, que puede llevarnos más tiempo y mientras tanto podemos realizar el volcado de la base de datos.
La copia la realizo mediante el comando scp
, pero también puede ser útil realizar una carpeta compartida entre ambos servidores.
En la mayoría de los siguientes pasos hay que recargar el servidor web para que los cambios surtan efectos.
Copiado de ficheros adjuntos de Redmine
Los ficheros adjuntados a las tareas de los proyectos se ubican en el directorio files de nuestra instalación de Redmine. Estos están organizados por años y luego por meses.
Para hacer más fácil el volcado podemos comprimir y empaquetar el directorio con el comando: tar -czvf filesredmine.tar.gz /var/lib/redmine/files/
El directorio de instalación no tiene porque ser el mismo que muestro en el comando, pero en este caso es ese. Si necesitamos cerrar la terminal porque estemos a final de nuestra jornada de trabajo o cualquier otro motivo, podemos hacerlo con nohup tar -czvf /opt/backup-wikis/filesredmine.tar.gz /var/lib/redmine/files/ &
que continuará con la ejecución aunque cerremos la sesión activa.
Una vez comprimido podemos copiarlo a través de scp filesredmine.tar.gz root@194.140.2.146:/migracionEGZ
que igualmente podemos transferirlo con nohup scp filesredmine.tar.gz root@194.140.2.146:/migracionEGZ &
Volcado de la base de datos de producción
Mientras tanto, podemos realizar el volcado de la base de datos, que por norma general llevará muchísimo menor tiempo. Antes debemos de realizar una exportación con mysqldump -u root -p redmine > redmineproduccion.sql
Tras transferirlo al nuevo servidor de la misma manera que los archivos adjuntos, realizamos la importación de la base de datos con mysqldump -u root -p redminebd < redmine_oet.sql
Instalar un nuevo theme en Redmine
El theme instalado en el Redmine en producción es el Circle Theme 2.0.2. Aún así, he encontrado la versión 2.1.1 en su página oficial Circle Theme for Redmine – 100% responsive flat design from RedmineUP que funciona sin problemas.
Para descargar deberás introducir tu email, donde recibirás un link de descarga. Luego descomprimir el archivo descargado con unzip circle_theme-2_1_1.zip
y ubicar la carpeta resultante en /opt/redmine/redmine-2.6.1/public/themes
Como está activado en la base de datos importada, no será necesario activarlo. Aún así, si la apariencia de Redmine no cambia, accede Administración>Configuración>Mostrar para comprobar que Circle aparece en el listado de temas.
Instalar nuevos plugins en Redmine
Igualmente, comprobé para actualizar los plugins de Redmine a la última versión compatible con la instalación realizada. Estos plugins son Redmine Agile y Scrum.
Redmine Agile está instalado en su versión 1.3.11 y Scrum en la versión 0.9.1.
Actualizaré Redmine Agile a la versión 1.4.3 descargándolo de su página oficial. También actualizaré Scrum a la versión 0.10.0, aunque ya está disponible la versión 0.16.2, esta que instalo es la última compatible con Redmine 2.x.
Ambos archivos comprimidos los ubicamos y descomprimimos en /opt/redmine/redmine-2.6.1/plugins para luego ejecutar su instalación con bundle exec rake redmine:plugins:migrate RAILS_ENV=production
Los nombres de los directorios no deben contener espacios o caracteres extraños. De lo contrario, no se ejecutará la instalación y nos dará un error 500 al acceder a la sección de plugins.
Configurar las notificaciones por correo electrónico
Por último, podemos configurar que se realicen notificaciones a través de correo electrónico a los usuarios de Redmine. Esto notificará, según la configuración del usuario, nuevas tareas asignadas, cambios en el estado de la tareas, nuevos comentarios…
Para ello accedemos al apartado Administracion>Configuración>Notificaciones por correo donde aparece el mensaje «Las notificaciones están desactivadas porque el servidor de correo no está configurado. Configure el servidor de SMTP en config/configuration.yml y reinicie la aplicación para activar los cambios.»
Las configuraciones del envío de correos electrónicos se realizan en el fichero ubicado /opt/redmine/redmine-2.6.1/config/configuration.yml Antes debemos copiar el ejemplo.
Al final del archivo, añadimos la configuración de nuestro servidor de SMTP, que en este caso está instalado en otro servidor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
(...) # specific configuration options for production environment # that overrides the default ones production: email_delivery: delivery_method: :smtp smtp_settings: address: "smtp.servidor.com" port: 25 authentication: :login domain: 'servidor.com' user_name: 'redminenotify' password: 'password' enable_starttls_auto: false openssl_verify_mode: none # specific configuration options for development environment # that overrides the default ones development: (...) |