Actualizando de Alfresco 5 a Alfresco 6

por / viernes, 03 agosto 2018 / Publicado enBlog
¡Descubre todas las novedades de Alfresco 6 en nuestro canal de YouTube!

En keensoft UST Global, comenzamos a utilizar Alfresco Community de manera interna a principios de 2013 con Ubuntu 12.04. Partimos de una versión 4.0.d pero en seguida actualizamos a la versión 4.2.c. Desde entonces, hemos ido reflejando en nuestro blog todos los procesos de actualización:

Hace unos días, Alfresco liberó definitivamente la versión 6 y, de acuerdo a nuestro principio de experimentar con las nuevas versiones antes de recomendarla a nuestros clientes, comenzamos a planificar la migración de nuestro gestor documental.

Situación inicial

En nuestro servidor, disponíamos del siguiente software base:

  • Ubuntu 14.04
  • Alfresco CE 201707
  • PostgreSQL 9.4.12

Con una memoria total de 16 GB, esta era la asignación de recursos para cada servicio:

  • 8 GB Alfresco y Share (Tomcat)
  • 2 GB SOLR (Jetty)
  • 4 GB PostgreSQL

Algunas otras características:

  • La autenticación está integrada con nuestro OpenLDAP corporativo
  • Disponemos de diferentes módulos AMP de personalización (muchos de ellos desarrollados por nosotros mismos)

Tamaño del repositorio:

$ cd /opt/alfresco/alf_data/contentstore
$ du –max-depth=1 -h
3.0G ./2013
14G ./2014
6.4G ./2015
14G ./2016
11G ./2017
20G ./2018
66G .

El nuevo servidor

Dado que el software estaba instalado en el servidor original de 2012, hemos decidido instalar un nuevo servidor con prestaciones equivalentes y el servicio de Docker disponible:

  • Ubuntu 18.04
  • Docker 17.05
  • 16 GB RAM

Alfresco recomienda la instalación del producto a partir de su versión 6 a través de imágenes Docker, por lo que decidimos utilizar un sencillo Docker Compose para cumplir nuestros requisitos de uso.

Hemos utilizado las siguientes imágenes base:

Aunque hemos hecho algunos ajustes para adaptarlas a nuestros requisitos.

version: "3"

services:
    httpd:
        build: ./httpd
        ports:
          - 80:80
        links:
          - alfresco
          - share
          - solr6

    adf:
      build: ./adf
      depends_on:
        - alfresco
      ports:
        - 3000:3000

    alfresco:
        build: ./alfresco
        privileged: true
        environment:
            JAVA_OPTS : "
                -Ddb.driver=org.postgresql.Driver
                -Ddb.username=alfresco
                -Ddb.password=alfresco
                -Ddb.url=jdbc:postgresql://postgres:5432/alfresco
                -Dsolr.host=solr6
                -Dsolr.port=8983
                -Dsolr.secureComms=none
                -Dsolr.base.url=/solr
                -Dindex.subsystem.name=solr6
                -Ddeployment.method=DOCKER_COMPOSE
                -Dcsrf.filter.enabled=false
                -Xmx6g -Xms6g
                "
        volumes:
          - ./data/alf-repo-data:/usr/local/tomcat/alf_data
          - ./data/ocr_input:/ocr_input
          - ./data/ocr_output:/ocr_output
        ports:
          - 21:21        #FTP port
          - 25:25        #SMTP port
          - 143:143      #IMAP port
          - 445:445      #CIFS
          - 137:137/udp  #CIFS
          - 138:138/udp  #CIFS
          - 139:139      #CIFS

    share:
        build: ./share
        environment:
            - REPO_HOST=alfresco
            - REPO_PORT=8080
            - "CATALINA_OPTS= -Xms2g -Xmx2g"

    postgres:
        image: postgres:10.1
        environment:
            - POSTGRES_PASSWORD=alfresco
            - POSTGRES_USER=alfresco
            - POSTGRES_DB=alfresco
        # From pg_tune (4 GB + 2 CPUs + 300 connections)
        command: "
          postgres -c max_connections=300
            -c shared_buffers=1GB
            -c effective_cache_size=3GB
            -c maintenance_work_mem=256MB
            -c checkpoint_completion_target=0.7
            -c wal_buffers=16MB
            -c default_statistics_target=100
            -c random_page_cost=1.1
            -c effective_io_concurrency=200
            -c work_mem=3495kB
            -c min_wal_size=1GB
            -c max_wal_size=2GB
            -c max_worker_processes=2
            -c max_parallel_workers_per_gather=1
            -c max_parallel_workers=2
            -c log_min_messages=LOG
            "
        volumes:
           - ./data/postgres-data:/var/lib/postgresql/data
        ports:
            - 5432:5432

    solr6:
        image: alfresco/alfresco-search-services:1.1.1
        environment:
            - SOLR_ALFRESCO_HOST=alfresco
            - SOLR_ALFRESCO_PORT=8080
            - SOLR_SOLR_HOST=solr6
            - SOLR_SOLR_PORT=8983
            - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
            - SOLR_JAVA_MEM=-Xms2g -Xmx2g
        # Set permissions for user with uid 1000 ('isadm' in host, 'solr' in container)
        volumes:
          - ./data/solr-data:/opt/alfresco-search-services/data

    ocrmypdf:
        build: ./ocrmypdf
        hostname: ocrmypdf
        volumes:
          - ./data/ocr_input:/ocr_input
          - ./data/ocr_output:/ocr_output

Adicionalmente, para que la aplicación ADF fuese servida por el puerto HTTPs y la ruta /adf/ hemos realizado algunos cambios en el código fuente de la aplicación.

package.json

"build": "npm run server-versions && ng build --prod --base-href /adf/",

proxy.conf.js

"target": "https://0.0.0.0:443",
"secure": true,

src/app.config.json

"ecmHost": "https://{hostname}{:port}",

Finalmente, hemos configurado Docker Compose para que funcione como un servicio de arranque automático con systemd.

[Unit]
Description=Alfresco 6 Server
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/local/bin/docker-compose -f /opt/alfresco/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /opt/alfresco/docker-compose.yml down -v

[Install]
WantedBy=multi-user.target

Tras realizar una prueba completa de los addons y extensiones que teníamos sobre Alfresco 6 (hay que tener especial atención con los de repositorio), tuvimos que actualizar unos cuantos:

En este punto ya habíamos podido verificar que Alfresco 6 funcionaba en el nuevo servidor sobre el nuevo software base con nuestras personalizaciones aplicadas. Así que realizamos una primera importación de datos para poder probar el rendimiento.

Pruebas de capacidad

Dada la incertidumbre de la nueva infraestructura , a pesar de disponer de los mismos recursos, lanzamos algunas pruebas de capacidad para asegurar el mantenimiento de la calidad del servicio.

Para ello diseñamos tres escenarios alternativos:

  • Instalación de Alfresco 201707 por componentes con Tomcat, Jetty y PostgreSQL
  • Instalación de Alfresco 6 en Docker Compose
  • Instalación de Alfresco 6 en Docker Compose y base de datos PostgreSQL en local

Uno de los mantras más repetidos por los expertos en Docker es que las bases de datos funcionan mejor sobre un servidor que mediante un container Docker, así que incluimos el último escenario para verificar si en nuestro entorno esa afirmación resultaba cierta.

Una vez analizados los resultados, concluimos que el rendimiento de Docker Compose era equivalente (o incluso más rápido) que una instalación por componentes y que instalar la base de datos aparte no tenía un gran impacto sobre el rendimiento. Así que seguimos con nuestra idea inicial de instalar Alfresco 6 en un único Docker Compose para todos los servicios.

La actualización

Llegados a este punto la actualización resultó fácil, ya que habíamos probado todos los elementos por separado y funcionaban a la perfección.

Con el servicio anterior en funcionamiento, realizamos una copia de los contenidos.


$ rsync -avzh -e "ssh -p 22" root@alfresco5:/opt/alfresco/alf_data/content* /opt/alfresco/data/alf-repo-data/

Una vez que la sincronización estaba realizada, paramos el servidor de Alfresco 5 y realizamos el dump de la base de datos.


$ sudo service alfresco stop
 
$ sudo su - postgres
 
$ cd /opt/alfresco/postgresql/bin
$ ./pg_ctl start
 
$ ./pg_dump alfresco > /tmp/exportFile-20180801.dmp
Password:
 
$ ./pg_ctl stop
$ exit

Levantamos el servicio de postgres en Alfresco 6 y restauramos la base de datos.


$ docker-compose up postgres

$ cat exportFile-20180801.dmp | docker exec -i docker_postgres_1 psql -U alfresco -d alfresco

Volvemos a lanzar la sincronización para actualizar los últimos cambios.


$ rsync -avzh -e "ssh -p 22" root@alfresco5:/opt/alfresco/alf_data/content* /opt/alfresco/data/alf-repo-data/

Borramos los índices de SOLR para que vuelvan a ser calculados y lanzamos definitivamente nuestro flamante Alfresco 6.


$ rm -rf /opt/alfresco/data/solr-data

$ docker-compose up -d

Adicionalmente, creamos un repositorio GIT para gestionar toda la configuración Docker realizada en el servidor y poder disponer de un histórico de cambios de configuración.

La actualización a Alfresco 6 es un proceso equivalente a las actualizaciones desde Alfresco 4 y 5, aunque la nueva infraestructura basada en Docker nos permite mejorar el rendimiento y la flexibilidad del servicio.

Responsable tecnológico para soluciones de gestión documental en keensoft. Especialista en Alfresco y en implantaciones de Administración Electrónica.

Deja un comentario

SUBIR