- 95 millones de dólares de inversión.
- Valorada en 1.000 millones de dólares.
- Más de 300 millones de descargas en 96 releases desde marzo de 2013
I have been playing with Amazon Web Services since few months ago. AWS is for a SysAdmin like Disneyland is for a 8 years old child, I enjoy so much doing this kind of stuff.
If you are not familiar with AWS products/services, let me describe with Amazon words and in my own words what are the most important services and concepts we have been using for deploying an Alfresco on-premise installation in AWS:
Once said so, my colleague Luis Sala has been working together with the Amazon AWS crew and they have made a CloudFormation template to deploy an Alfresco cluster in just minutes. This template is available here: https://github.com/AlfrescoLabs/alfresco-cloudformation.
This CloudFormation template will create a 2 nodes Alfresco cluster inside a virtual private cloud (VPC), a Load Balancer (ELB) with sticky sessions bases on the Tomcat JSESSIONID, a shared ContentStore based on S3, a shared MySQL DB based on a RDS instance. Each Alfresco node will be in a separate Availability Zone and finally the template includes auto-scaling roles for add extra Alfresco nodes when some thresholds are reached.
We will have something like the diagram below, I say “like this” because we will have only 2 Alfresco nodes in the cluster and the auto-scaling will add more nodes in case of thresholds are reached (clic to see it bigger).
Finally in the video below you can see step by step a real CloudFormation deployment, I think the video screencast is self-explanatory, it does not have audio. As you can see, the video is 6 minutes length after cropping some dead times but it was around 15 minutes total.
I thought it is a very interesting approach about Alfresco clustering and it worth it to share with you all. Any question or feedback is welcome, even in spanish or english 😉
OpenDJ is a fork of the former Sun OpenDS. Is a free and Open Source LDAPv3 server. It is not under our Alfresco Supported Platforms umbrella but it works fine for demo porpuses and is very easy to install, configure and maintain. Since OpenDJ is a Java application you can run it in Linux, Mac or “even” Windows 😉
Lets see how how to start with OpenDJ from scratch.
Download the application downloader and launcher here: http://download.forgerock.org/downloads/opendj/20130305020001/install/QuickSetup.jnlp (you may also download the entire package from here http://www.forgerock.org/opendj.html but I think with QuickSetup is the easier way)
Download this initial LDIF file with demo users and groups for the first population of our new brand LDAP server.
You must have installed Java in your system in order to execute file QuickSetup.jnlp. Then double click to open it. And follow as in the video:
Now lets configure our Alfresco Server (I did all this steps with Alfresco Enterprise 4.1.3 but should be valid for any 4.X version).
[bash]
# vi tomcat/shared/classes/alfresco-global.properties
[/bash]
Add next line with our new authentication system before the default chain.
[bash]
authentication.chain=ldap1:ldap,alfrescoNtlm1:alfrescoNtlm
[/bash]
Create the needed directory for our new settings:
[bash]
# mkdir -p tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1
[/bash]
Create your own config file, set as your needs:
[bash]
vi tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties
[/bash]
File:
[bash]
ldap.authentication.active=true
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=uid=%s,ou=people,dc=alfresco,dc=com
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://localhost:1389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
ldap.authentication.defaultAdministratorUserNames=
ldap.synchronization.active=false
ldap.synchronization.java.naming.security.authentication=simple
ldap.synchronization.java.naming.security.principal=cn\=Directory Manager
ldap.synchronization.java.naming.security.credentials=secret
ldap.synchronization.queryBatchSize=0
ldap.synchronization.attributeBatchSize=0
ldap.synchronization.groupQuery=(objectclass\=groupOfNames)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=groupOfNames)(!(modifyTimestamp<\={0})))
ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)
ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))
ldap.synchronization.groupSearchBase=ou\=groups,dc\=alfresco,dc\=com
ldap.synchronization.userSearchBase=ou\=people,dc\=alfresco,dc\=com
ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
ldap.synchronization.timestampFormat=yyyyMMddHHmmss’Z’
ldap.synchronization.userIdAttributeName=uid
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.userOrganizationalIdAttributeName=o
ldap.synchronization.defaultHomeFolderProvider=largeHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupDisplayNameAttributeName=description
ldap.synchronization.groupType=groupOfNames
ldap.synchronization.personType=inetOrgPerson
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true
ldap.authentication.java.naming.read.timeout=0
[/bash]
To have a full control about what is happening during the LDAP authentication add next lines to your custome log configuration file like next one. If you don’t have a custom log file already you can create it:
[bash]
cp tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties tomcat/shared/classes/alfresco/extension/custom-log4j.properties
[/bash]
Add next options to the file:
[bash]
vi tomcat/shared/classes/alfresco/extension/custom-log4j.properties
[/bash]
Content:
[bash]
# LDAP
log4j.logger.org.alfresco.repo.importer.ImporterJob=debug
log4j.logger.org.alfresco.repo.importer.ExportSourceImporter=debug
log4j.logger.org.alfresco.repo.security.authentication.ldap=debug
[/bash]
Now reboot and try. Also you can do that easily and without reboot using JMX with console
Remember to keep watching your logs:
[bash]
tail -f tomcat/logs/catalina.out
[/bash]
When Alfresco is starting after our changes, you must see something like this:
[bash]
2013-03-07 09:46:26,175 INFO [management.subsystems.ChildApplicationContextFactory] [main] Starting ‘Authentication’ subsystem, ID: [Authentication, managed, ldap1]
2013-03-07 09:46:26,212 WARN [authentication.ldap.LDAPInitialDirContextFactoryImpl] [main] LDAP server supports anonymous bind ldap://localhost:1389
2013-03-07 09:46:26,234 INFO [authentication.ldap.LDAPInitialDirContextFactoryImpl] [main] LDAP server does not support simple string user ids and invalid credentials at ldap://localhost:1389
2013-03-07 09:46:26,235 INFO [authentication.ldap.LDAPInitialDirContextFactoryImpl] [main] LDAP server does not fall back to anonymous bind for a simple dn and password at ldap://localhost:1389
2013-03-07 09:46:26,237 INFO [authentication.ldap.LDAPInitialDirContextFactoryImpl] [main] LDAP server does not fall back to anonymous bind for known principal and invalid credentials at ldap://localhost:1389
2013-03-07 09:46:26,247 INFO [management.subsystems.ChildApplicationContextFactory] [main] Startup of ‘Authentication’ subsystem, ID: [Authentication, managed, ldap1] complete
[/bash]
And after your first login:
[bash]
2013-03-07 09:47:34,404 DEBUG [authentication.ldap.LDAPAuthenticationComponentImpl] [http-8080-5] Authenticating user "toni"
2013-03-07 09:47:34,421 DEBUG [authentication.ldap.LDAPAuthenticationComponentImpl] [http-8080-5] Setting the current user to "toni"
2013-03-07 09:47:34,422 DEBUG [authentication.ldap.LDAPAuthenticationComponentImpl] [http-8080-5] User "toni" authenticated successfully
[/bash]
Remember to change your LDAP log debug level before going live, something like INFO could be enough.
Packt Publishing, la editorial que ha publicado varios libros sobre Alfresco, ha lanzado recientemente un nuevo libro llamado Intelligent Document Capture with Ephesoft. Ha sido escrito por Pat Myers, VP de Zia Consulting (partner de Alfresco) e Ike Kavas fundador y CTO de Ephesoft que también fue empleado de Kofax antes de empezar este nuevo proyecto.
En blyx.com ya he escrito varias veces [1] , [2] sobre soluciones de digitalización y escaneo, incluso hicimos un webinar con Baratz sobre Alfresco y Ephesoft con demo incluida .
Este libro, basado en la versión 3 del producto, es estupendo para reforzar todo lo comentado anteriormente ya que Ephesoft es una herramienta que ha evolucionado mucho en los pocos años de vida que tiene.
Ephesoft es una solución para procesar documentos en papel, fax, correo electrónico, desde un ERP o cualquier otra herramienta corporativa que genere documentos gráficos o imágenes de los mismos, está hecha en Java (contiene Spring, Lucene, Hibernate, Jbpm, etc.) y es Open Source (con versión Community y Enterprise), clasifica, separa y extrae metadatos de forma inteligente implementando OCR desde una interfaz web bastante intuitiva y orientada tanto a administradores como a revisores u operadores. Además soporta interfaces de integración y exportación de los documentos con sus metadatos (personalizados o no) a diferentes soluciones de ECM mediante CMIS, como puede ser el caso de la integración con Alfresco que vimos en el webinar. Ephesoft es una alternativa a otras soluciones que hay en el mercado como Kofax o Athento.
Generalmente, los libros que comento en el blog y no me parecen medianamente provechosos no les dedico un post. Este libro es una referencia interesante y un punto inicial para hacer proyectos con Ephesoft. Si estás en este mundo de digitalización y ECM, y sea cual sea tu nivel de responsabilidad te recomiendo este libro, aunque hay capítulos muy específicos y orientados a desarrolladores, seguro que te aportará argumentos para tu día a día y mejorar o reforzar los conocimientos de captura inteligente. Si ya dominas totalmente la solución y has hecho proyectos con Ephesoft posiblemente aprendas poco leyendo el libro. Aunque muchos de los temas cubiertos en el libro se pueden encontrar por Internet, aquí lo tienes todo en el mismo sitio, explicado con fluidez y bien organizado. ¿Le falta algo? Si, parte de instalación, despliegue y arquitectura, pero también se encuentra por internet. ¿Lo recomiendo? Si.
En este video mostramos en que consiste esta nueva oferta llamada Alfresco One, las nuevas características de Alfresco y capacidades de sincronización. La demo comienza a partir del minuto 21 (Sincronización con la nube, Alfresco Mobile y Alfresco Desktop Sync). En definitiva, las nuevas tecnologías están cambiando la forma en que las organizaciones trabajan con los contenidos, cómo los comparten, como se realizan los procesos de negocio y como se organizan. Desde la nube a instalaciones de Alfresco en local y la necesidad de acceso a los contenidos desde dispositivos móviles. Aprende como Alfresco resuelve estos problemas para usuarios, departamentos de IT y organizaciones en general.
Alfresco One, sincronización y mucho más from Alfresco Spain Portugal on Vimeo.
[GTranslate]
En este webinar hablamos sobre los servicios de suscripción y soporte que ofrecemos en Alfresco a nuestros clientes de la versión Enterprise. Nuestro objetivo con esta presentación es dar a conocer los servicios y valor añadido que obtienen nuestros clientes cuando adquieren la suscripción de Alfresco Enterprise.
Recuerda que puedes encontrar otros webinars, presentaciones y vídeos en nuestra web de Eventos OnDemand.
La editorial Packt Publishing ha publicado un interesante libro sobre Liferay llamado “Liferay Portal 6 Enterprise Intranets”. Si estás interesado en montar una intranet y conocer a fondo esta tecnología, seguramente este es el libro que necesitas, completo y de fácil lectura. Como siempre, Packt pone a disposición de los clientes tanto la versión en papel como la versión en PDF del libro (o los dos a la vez), algo que sin duda es una idea genial para consultas, búsquedas, eBooks readers y por qué no, para los más impacientes. También puedes adquirirlo en Amazon aquí.
En el libro, orientado a usuarios avanzados, administradores y desarrolladores, encontramos temas interesantes (incluyendo un agradecimiento especial al amigo Jorge Ferrer), entre ellos me gustaría destacar las siguientes:
Aquí puedes descargar el capítulo 11 que trata sobre gestión de servidores y clustering.
Ya sabes, comprar un libro es la mejor inversión. Yo sigo ampliando mi biblioteca y lo iré compartiendo con vosotros.
Los que conocéis Alfresco en profundidad sabéis que éste guarda algunas sorpresas interesantes. Entre ellas se encuentran las consolas. Básicamente son herramientas que nos permiten acceder a información o hacer tareas de bajo nivel con Alfresco vía web, destinado principalmente a programadores o administradores.
Vamos a ver que consolas tenemos disponibles y en qué nos pueden ayudar cada una de ellas.
Nota 1: para acceder a estas consolas previamente hay que estar logueado como usuario “admin” en Alfresco Explorer (http://localhost:8080/alfresco).
Nota 2: para ejecutar comandos en estas consolas hay que escribir el comando y pinchar en “Submit”, si escribimos el comando y pulsamos “Enter” no ejecutará el comando.
La “Consola del Repositorio” es una alternativa al cliente web (Alfresco Explorer) y nos permite desplegar, recargar, activar y desactivar modelos en caliente. Podemos hacer lo mismo con ficheros .properties relacionados con idiomas. Un comando de ejemplo podría ser “deploy model alfresco/extension/exampleModel.xml“.
Permite cargar los cambios realizados en el fichero “web-client-config-custom.xml” sin necesidad de reiniciar el servidor. Relmente recarga toda la información modificada que contenga el bean webClientConfigSource en el archivo “alfresco/web-client-application-context.xml” de ahí que digamos que recarga los cambios en “web-client-config-custom.xml“. Más información aquí. Hacer esa tarea es tan fácil como escribir “reload” y hacer clic en “Submit“. Veremos algo como lo siguiente:
<Built-in evaluators> ---> OK
classpath:alfresco/web-client-config.xml ---> OK
classpath:alfresco/web-client-config-dialogs.xml ---> OK
classpath:alfresco/web-client-config-wizards.xml ---> OK
classpath:alfresco/web-client-config-properties.xml ---> OK
classpath:alfresco/web-client-config-navigation.xml ---> OK
classpath:alfresco/web-client-config-wcm.xml ---> OK
classpath:alfresco/web-client-config-actions.xml ---> OK
classpath:alfresco/web-client-config-forum-actions.xml ---> OK
classpath:alfresco/web-client-config-wcm-actions.xml ---> OK
classpath:alfresco/web-client-config-workflow-actions.xml ---> OK
classpath:alfresco/extension/web-client-config-custom.xml ---> Skipped - not available
workspace://SpacesStore/app:company_home/app:dictionary/app:webclient_extension/cm:web-client-config-custom.xml ---> OK
Esta consola nos permite hacer tareas de bajo nivel sobre la AVM (Advanced Versioning Manager), sistema usado por Alfresco WCM, posiblemente la consola más desconocida y compleja de utilizar. AVM Console cuenta con una ayuda (http://localhost:8080/alfresco/faces/jsp/admin/avm-console-help.txt) aunque tenemos más información aquí y aquí.
Este es el más conocido ya que es accesible desde la “Consola de Administración”. Es una herramienta muy útil para desarrolladores y administradores. Permite hacer búsquedas y localizar información extendida sobre los contenidos del repositorio. Soporta búsquedas de varios tipos:
Posiblemente el mejor amigo de un programador de workflows. Esta consola es una caja de herramientas completa para depurar nuestros workflows. Más info y sintaxis aquí.
Consola para gestión, creación y borrado, activación/desactivación, exportación e importación de tenants. Recuerda que para activar el multitenant en Alfresco hay que renombrar sin .sample los ficheros en tomcat/shared/classes/alfresco/extension/mt y reiniciar el servidor.
Otras URLs interesantes dentro de nuestro sistema:
Aquí no voy a explicar nada, ejecútala espera unos segundos y mira. ¿Interesante verdad?
Esta nos sirve para ver todos los WebScripts disponibles, información de uso de cada uno de ellos y además podremos desplegar nuevos WebScripts.
¡Que curioso! Cuando he terminado de escribir el artículo he hecho una búsqueda en Google y me encuentro esto, un post del gran Jeff Potts sobre esto mismo…
Actualización 27 Mayo 2014:
A esos que cito habría que añadir:
http://localhost:8080/alfresco/service/enterprise/admin -> Consola de Administración desde 4.2 (configuración de cluster, ldap, mail, etc. via web). Solo Alfresco Enterprise.
http://localhost:8080/share/service/index -> web scripts de Alfresco Share
http://localhost:8080/alfresco/activiti-admin -> Activiti Admin para Alfresco Enterprise
http://localhost:8080/share/page/modules/deploy -> Despliegue y control de módulos en Share
http://localhost:8080/alfresco/service/cmis/index.html -> CMIS panel
Adicionalmente para Alfresco Enterprise desde la 4.2 hay un módulo muy útil que se llama Alfresco Support Tools, se puede encontrar aquí:
https://addons.alfresco.com/addons/support-tools-admin-console
Con este post me gustaría hacer una pequeña introducción a los diferentes diseños de arquitecturas que podemos llevar a cabo con Alfresco dependiendo del uso, usuarios, rendimiento, concurrencia y almacenamiento requerido.
Alfresco es un producto que acaba de cumplir 5 años, tras pasar por varias etapas con versiones más o menos estables, podemos decir, que desde hace un tiempo contamos con un producto confiable, robusto, estable y escalable. Preparado para pequeños proyectos con decenas de usuarios y unos cuantos miles de contenidos y para entornos con miles de usuarios y millones de contenidos. Y cada vez nos encontramos más y más instalaciones consolidadas.
Algo muy común que veo en las implantaciones de Alfresco, salvo casos muy concretos, es que muchas veces se instala la aplicación, base de datos y content store en la misma máquina, tanto para un piloto, desarrollo, test o producción. Para un piloto y desarrollo o incluso test es válido, o para producción si los requisitos no son demasiado exigentes. Teniendo todas las capas de la aplicación en la misma máquina (física o virtual), cuando el entorno pasa a producción y empieza a crecer considerablemente en número de usuarios y contenidos se suele experimentar un problema de rendimiento. Tiempos de respuesta elevados en el acceso, reglas, workflows, etc.
Vamos a ver, de forma resumida, algunos conceptos a tener en cuenta a la hora de hacer despliegues de Alfresco que nos permita crecer tanto horizontal como verticalmente.
Antes de seguir, para entender bien todo esto, veamos los componentes de la infraestructura que debemos conocer y diferenciar para diseñar una correcta arquitectura:
Dicho lo anterior y conociendo el funcionamiento de Alfresco, podemos averiguar donde tenemos los cuellos de botella en las implantaciones.
Por ejemplo, tener el content store y la base de datos en la misma máquina sobre el mismo disco duro supone que cada vez que subimos un fichero o realizamos alguna acción con el mismo se escribe simultáneamente en base de datos y content store; moraleja: el disco duro debe escribir al mismo tiempo en varios sitios diferentes = sistema lento. Claro está, esto nos pasará si estamos haciendo un uso intensivo del sistema.
Todos esos componentes los podemos implementar de diferentes formas, dependiendo de la ubicación de cada componente hablaremos de diferentes capas o niveles.
Capa de contenidos: repositorio, Share, índices y aplicaciones de terceros que necesita Alfresco.
Capa de almacenamiento: Base de datos en una máquina dedicada a la que accede la aplicación vía JDBC y content store en una SAN o NAS.
Esta arquitectura permite más escalabilidad y rendimiento, configuración simple y la gestión del crecimiento del contenido es transparente para la aplicación. Si añadimos que en este caso los índices estarán en la capa de contenidos tendremos como resultado un entorno que imprima un rendimiento considerable para entornos de tipo medio que incluso pueden ponerse en alta disponibilidad, pero ojo, si crecen mucho los contenidos también crecerán los índices y en ese casos podríamos necesitar hacer cambios en la infraestructura o en la configuración de los servidores (asignar más almacenamiento, etc.).
Capa web: donde tendríamos Alfresco Share o/y otras aplicaciones frontales que podamos tener para trabajar con Alfresco (Liferay, Joomla, Drupal, etc.) u otras hechas desde cero y opcionalmente un servidor web que proteja al servidor de aplicaciones vía mod_proxy, Varnish o similares.
Capa de contenidos: repositorio, índices y aplicaciones de terceros que necesita Alfresco.
Capa de almacenamiento: Base de datos en una máquina dedicada a la que accede la aplicación vía JDBC y content store en una SAN o NAS.
Podríamos añadir una capa extra entre la capa web y capa de contenidos que nos permita hacer caché, control de acceso o balanceo de carga. Como vemos, esta es la mejor forma de ofrecer el máximo rendimiento tanto de lectura como de escritura, que además podemos configurar en alta disponibilidad en todas las capas. Este tipo de arquitectura no es recomendada para pequeños despliegues departamentales y necesita un alto grado de conocimiento de Alfresco, sistemas y redes en general. Salvo uso de software específico, no se recomienda separar cada una de las capas de forma geográfica ya que una alta latencia entre capas puede influir negativamente en el rendimiento.