Upgrade de Proyectos Redmine 1.3 a Redmine 3.4
Es muy importante mantener los servicios actualizados con las últimas versiones disponibles, especialmente para hacer frente a problemas de seguridad, aunque en la práctica esto no siempre resulta ser tan sencillo como debería.
Uno de los mayores temores con las actualizaciones es que deje de funcionar aquel servicio que tanto se necesita en el momento menos oportuno, sin embargo, migrar los proyectos Redmine 1.3 a Redmine 3.4 ha resultado ser bastante más sencillo de lo esperado como se verá a continuación...
Los pasos que siguen contemplan la instalación de la nueva versión de Redmine, la importación y migración de la base de datos, copiado de archivos y repositorios Subversion, así que comencemos:
Uno de los mayores temores con las actualizaciones es que deje de funcionar aquel servicio que tanto se necesita en el momento menos oportuno, sin embargo, migrar los proyectos Redmine 1.3 a Redmine 3.4 ha resultado ser bastante más sencillo de lo esperado como se verá a continuación...
Los pasos que siguen contemplan la instalación de la nueva versión de Redmine, la importación y migración de la base de datos, copiado de archivos y repositorios Subversion, así que comencemos:
- Como el salto entre las versiones 1.3 y 3.4 es bastante grande, mi decisión fue realizar una instalación totalmente nueva de Redmine 3.4, para lo cual pueden seguir éste artículo que escribí hace unos días.
- Con una instalación totalmente nueva, tenemos que proceder a importar y migrar nuestra base de datos 1.3 para que sea compatible con la requerida por Redmine 3.4. Para ello comenzamos por descomprimir nuestra copia de seguridad anterior:
testsrv:~ # mkdir /restore
A continuación creamos una nueva base de datos vacía en la cual vamos a restablecer nuestra copia de seguridad de la versión 1.3 de Redmine.
testsrv:~ # cp /backup/redmine_20170913_2230.tar.gz /restore
testsrv:~ # cd /restore
testsrv:/restore # tar -xzvf migracion.tgz --strip-components=1testsrv:~ # cd /restore/redmine/backups
Luego procedemos a restaurar nuestra copia de seguridad de la base de datos Redmine 1.3:
testsrv:~ # su postgres -c psql postgres
postgres=# CREATE DATABASE redmine_up WITH ENCODING='UTF8' OWNER=redmine;
postgres-# \qtestsrv:~ # psql -U postgres -L salida.txt -d redmine_up -f redmine_db.sql
Nos dirigimos al directorio de configuración de la base de datos para Redmine y editamos el archivo database.yml:testsrv:~ # cd /opt/redmine/config/
Y le renombramos el atributo database de la sección production a la base de datos recientemente restaurada:
testsrv:/opt/redmine/config # vi database.ymlproduction:
adapter: postgresql
database: redmine_up
host: localhost
username: redmine
password: redmine
encoding: utf8 - A continuación actualizamos la llave que utiliza Rails para codificar la información de sesiones contenidas en las cookies por una nueva:
testsrv:/opt/redmine/config # bundle.ruby2.4 exec rake generate_secret_token
- Una vez concluido con el paso anterior nos posicionamos en el directorio /opt/redmine y procedemos a actualizar y migrar el esquema de base de datos de Redmine 1.3 en PostgrSQL para que sea compatible con la versión 3.4 instalada:
testsrv:/opt/redmine/config # cd ..
También aprovechamos la ocasión para migrar la configuración de los plugins en la base de datos:
testsrv:/opt/redmine # bundle.ruby2.4 exec rake db:migrate RAILS_ENV=productiontestsrv:/opt/redmine # bundle.ruby2.4 exec rake redmine:plugins:migrate RAILS_ENV=production
- A continuación realizamos algunas limpiezas:
testsrv:/opt/redmine # bundle.ruby2.4 exec rake tmp:cache:clear RAILS_ENV=production
testsrv:/opt/redmine # bundle.ruby2.4 exec rake tmp:sessions:clear RAILS_ENV=production - No nos tenemos que olvidar de copiar los archivos de Redmine 1.3 al directorio files de la nueva instalación de Redmine 3.4:
testsrv:/opt/redmine # mv files files_orig
testsrv:/opt/redmine # cp -Rf /restore/redmine/files /opt/redmine
testsrv:/opt/redmine # chown -Rf wwwrun:www /opt/redmine/files - Para migrar un repositorio Subversion ya existente a un nuevo repositorio de Redmine procedemos a renombrar el directorio original /opt/redmine/svn y si hicimos una copia full del directorio del proyecto Redmine entonces lo podremos copiar directamente:
testsrv:~ # mv /opt/redmine/svn /opt/redmine/svn_orig
Si en el caso contrario solo disponemos de las copias de seguridad de los repositorios (archivos dump), entonces utilizando el comando svnadmin debemos crear un nuevo repositorio Subversion vacío para nuestro proyecto de Redmine y luego proceder a importar las revisiones a partir del archivo dump. Por último asignamos el dueño correspondiente a los repositorios de destino.
testsrv:~ # cp -Rf /restore/redmine/svn /opt/redmine
testsrv:~ # chown -Rf wwwrun:www /opt/redmine/svntestsrv:~ # mkdir /opt/redmine/svn
El siguiente paso consiste en dirigirnos a la pestaña Administration –> Settings –> Repositories en la herramienta Redmine donde volvemos a re-generar la API key y guardar los cambios.
testsrv:~ # svnadmin create /opt/redmine/svn/prueba
testsrv:~ # svnadmin load /opt/redmine/svn/prueba < /restore/redmine/backups/svndumps/prueba.dump
testsrv:~ # chown -Rf wwwrun:www /opt/redmine/svn
Con el nuevo código del API Key editamos el archivo redmine del directorio /etc/cron.d:testsrv:~ # vi /etc/cron.d/redmine
y procedemos a reemplazar el código anterior con el nuevo en todas las directivas programadas:# Generacion de tareas a partir de correos entrantes.
Y para culminar este apartado debemos reiniciar el servicio cron:
* * * * * root rake -f /opt/redmine/Rakefile --silent redmine:email:receive_imap RAILS_ENV="production" host=imap.gmail.com port=993 username=mi_cuenta@gmail.com password=contraseña_de_cuenta_gmail ssl=SSL folder=INBOX project=prueba tracker=Soporte allow_override=project,tracker,priority unknown_user=accept no_permission_check=1 move_on_failure=INBOX move_on_success=INBOX
# Generacion automatica de repositorios subversion.
* * * * * root ruby.ruby2.4 /opt/redmine/extra/svn/reposman.rb --redmine IP_SERVIDOR/redmine --scm Subversion --svn-dir /opt/redmine/svn --owner wwwrun --url file:///opt/redmine/svn --verbose --key=9U9RLWv097mKlRqpHIPG >> /dev/null
# Sincronización de comentarios de commits asociados a tareas.
* * * * * root curl "http://IP_SERVIDOR/redmine/sys/fetch_changesets?key=9U9RLWv097mKlRqpHIPG" > /dev/null 2>&1
# Backup Redmine
30 22 * * * root /opt/redmine/script/backup >> /dev/nulltestsrv:/opt/redmine # systemctl restart cron
- Finalmente reiniciamos el servicio Apache:
testsrv:/opt/redmine # systemctl restart apache2
Comentarios
Publicar un comentario