Syntax Highlighter

martes, 2 de noviembre de 2010

Moviendo un gestor de contenidos a Windows Azure: DotNetNuke

Todo comenzó hace algo más de una semana -parece que hable de años- cuando me puse a buscar las soluciones que actualmente disponemos para publicar sobre la plataforma Windows Azure con un gestor de contenidos. La finalidad de estos gestores de contenidos son la creación de sitios webs como blogs, foros o sitios web totalmente profesionales.

Indagando en la web a ver qué gestor de contenidos podía utilizar para esta plataforma, me encuentro con algunas soluciones que aún están en desarrollo pero que no acaban de cuajar con la idea que tenía en mente:
  • que fuera de propósito general (no sólo una herramienta para blogs)
  • que tuviera buen soporte y una comunidad de desarrolladores
  • que pudiera modificarlo y crear módulos
  • que fuera barato
  • que se pudieran ejecutar sobre Windows Azure y con SQL Azure como base de datos
Según estas premisas me encontré con soluciones como Adxstudio CMS y MojoPortal que no llegan a cumplir los cinco principios que tenía en mente. Encontré algún experimento como AzureBright que no sé ni en qué estado está ahora mismo.

También le eché un vistazo por encima a Joomla, Drupal y Wordpress, pero al estudiar la arquitectura propuesta no me convencían los costes de computación de un MySQL en Azure, ya que SQL Azure saldría más barato. Además, mi cuasi nula experiencia en PHP me iba a retrasar mucho sobre posibles modificaciones al portal.

En ninguno de los casos encontré paquete de distribución alguno listo para poder desplegarlo en Azure, con lo que mi gozo estaba en un pozo.

Al final llegué a echarle un vistazo a DotNetNuke Community. Repasando la lista de principios, comienzo a verificarlos: es de propósito general, tiene una buena comunidad de desarrolladores y soporte -más de 1 millón de desarrolladores, más de 600.000 sitios webs funcionando y una madurez lograda a lo largo de muchos años de trayectoria-, puedo modificarlo y crear módulos y es open source. Sólo faltaba una cosa: no está preparado para la plataforma Azure.

Los foros de DNN estaban plagados de posts solicitando esta compatibilidad, pero se indicaba claramente que por ahora Windows Azure no iba a soportarlo. Otras propuestas pasaban por probar a instalarlo en Amazon, aunque estas propuestas se dirigían más bien a utilizar la infraestructura como servicios (IaaS) en vez de la plataforma como servicios (PaaS). De hecho en una entrevista a Shaun Walker, cofundador de DotNetNuke dejaba entreveer que más bien esperarán a que Microsoft lance en nuevo rol de máquina virtual en el que encajará directamente al estilo de Amazon.

Se me acabaron las opciones...¿o no?

Comienza la diversión

Desesperado por las opciones, decidí descargarme el código fuente de la versión 5.5.1 de DotNetNuke Community para ver las posibilidades de adaptarlos a la nube. Tras algunas horas viendo su arquitectura -no había visto su código fuente antes- decidí ponerme manos a la obra. La experiencia aumentaría mis conocimientos en resolución de problemas en migraciones a Azure.

El reto requería operaciones de reingeniería ya que si bien la arquitectura del DNN no es complicada, sí que habían partes que requerían modificaciones para adaptarse al modelo de la plataforma Azure. Dividí las áreas de trabajo en lo siguiente:
  • Migración de scripts de base de datos para soportar SQL Azure
  • Conversión de DNN WebSite en una WebApplication con los módulos por defecto
  • Convertir la WebApplication en un WebRole de Azure y desplegarlo en el entorno de desarrollo que trae el SDK
  • Publicar en la plataforma Azure real para verificar el comportamiento (estor conformaría un primer hito en el plan)
  • Conversión de archivos de configuración
  • Utilizacíon de Azure Storage para contenidos en vez del sistema de archivos
  • Migración del resto de módulos (segundo hito)
  • Añadir autenticación AppFabric basada en claims (tercer hito)
  • Añadir soporte AppFabric Caching
Después de 5 días de trabajo, la primera prueba de adaptación de DotNetNuke a la plataforma Azure ha finalizado con éxito. En ella he cubierto las cuatro primeras áreas y alcanzado el primer hito, solucionando los problemas que me he ido encontrando, algunos simples y otros que han necesitado "armas de destrucción masiva" como IntelliTrace sobre Azure para poder depurar qué estaba pasando realmente con el módulo de Rewriting.

La primera versión de la migración está disponible para echarle un vistazo en http://dotnetnukecommunitytest.cloudapp.net/

En los días sucesivos iré publicando un resumen de los pasos que he seguido para que sirvan de experiencia a quien lo necesite y corrigiendo algunos errores que he ido detectando. Luego seguiré con el resto del plan para alcanzar el segundo hito.

Cualquier comentario será agradecido.


6 comentarios:

  1. Hola David,

    No sé si conoces Umbraco (http://umbraco.org/), un CMS sobre ASP.NET bastante interesante que creo que podría valerte, según los requisitos que mencionas.

    Resulta que han preparado un accelerator para desplegarlo fácilmente sobre Azure. No lo he probado personalmente, pero parece que podría servirte:

    http://umbraco.org/follow-us/blog-archive/2010/10/30/umbraco-on-windows-azure

    ResponderEliminar
  2. No tengo ni "puta idea" de lo que has dicho, jejeje, pero sé que conseguirás todo lo que quieras, pues eres un maestro compadre.

    Un saludo y espero tengas toda la suerte del mundo en conseguir esta "vaina"

    Gustavo Campos

    ResponderEliminar
  3. Jose, había visto el anuncio en el PDC y lo tengo pendiente echarle un vistazo. Esta misma tarde voy a probarlo y ya comento el resultado.

    En cualquier caso, voy a escribir los posts con las cosas que me he encontrado al intentar subirlo, ya que muchas serán comunes a cualquier proyecto y no sólo DotNetNuke.

    ResponderEliminar
  4. Encontré el blog buscando "publicar en azure" vaya currada de migrar el dnn a azure!, (me ha servido la parte de pasar un WSP a WAP). Pero muy ilustrativos los pasos, yo sólo trasteaba con una pequeña aplicación subirla a azure. Y bueno es cierto lo del umbraco, este si es un cms de verdad, comparado con dnn, y la gente de umbraco ya lleva un tiempo en migrarlo a azure.
    Saludos!

    ResponderEliminar
  5. Estoy buscando una manera de conectar a DNN ACS Azure para la identidad. Usted parece ser la única persona que lo ha intentado hasta ahora, pero el vínculo que siempre se ha roto. ¿Tiene una versión actualizada en algún lugar que puedo estudiar? Gracias

    ResponderEliminar
  6. Buenas, un año después de esta entrada, se ha avanzado muchísimo en llevar DNN a Azure. En este blog puedes encontrar muchísimas entradas al respecto y la publicación del DNN Azure Accelerator en Codeplex (http://dnnazureaccelerator.codeplex.com). También ya hay disponibles folder providers para ubicar los contenidos en Azure gracias a la salida de DNN 6.0.
    De la lista inicial, realmente sólo faltarían los dos últimos hitos que son precisamente la autenticación basada en claims por la que preguntas y la creación de un proveedor de caché que use AppFabric Caching.
    En estos días precisamente estaba con este último de caché y la autenticación usando ACS Azure se me ha quedado para el final.
    En cuanto tenga alguna novedad no te preocupes que lo publicaré en el blog. Si vas a trabajar en ello envíame un correo para ver si puedo echarte una mano en algo.
    Un saludo!

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...