EPiServer CMS en Microsoft Azure Web Sites

wcm_banner_
Uno de los CMS con el que he estado trabajando estos días es EPiServer CMS, desarrollado tanto en ASP.NET MVC como en Web Forms y que nos ofrece muchas facilidades para su desarrollo como implementación, entre ellas dar soporte a Microsoft Azure.
En este post voy a mostrar los pasos necesarios para desplegarlo en Azure Web sites.

Instalar EPiServer CMS Visual Studio Extension

El primer paso es instalar la extensión EPiServer CMS Visual Studio desde TOOLS > Extensions and updates…

Extensions and Updates

buscando la extensión de EPiServer:

EPiServer CMS Visual Studio Extension

Creación del proyecto EPiServer Web site

La acción anterior requerirá que reiniciemos Visual Studio para poder hacer uso de las nuevas plantillas de EPiServer. Para crear un nuevo proyecto llevaremos a cabo las acciones habituaciones: New Project > y elegimos EPiServer del listado de plantillas disponibles:

Create a EPiServer Web Site project

En el siguiente cuadro de diálogo debemos elegir la plantilla que queremos utilizar. En este post se usará Alloy (MVC) la cual contiene un sitio de ejemplo que nos ayudará a verificar el funcionamiento de la aplicación en Azure Web Sites.

EPiServer Alloy MVC template

Configurar nueva fuente Install-Package EPiServer.Azure

Para que la solución funcione correctamente en Azure Web Sites es necesario instalar el paquete EPiServer.Azure desde Nuget. Antes de llevar a cabo esta operación es necesario añadir una nueva fuente de paquetes (http://nuget.episerver.com/feed/packages.svc) específica de EPiServer:

NuGet Package Sources

PM> Install-Package EPiServer.Azure

Servicios necesarios de Microsoft Azure

Para trabajar con EPiServer CMS necesitamos un sitio en Azure Web sites, una base de datos en SQL Database, una cuenta de almacenamiento en Azure Storage y un sistema de mensajería en Service Bus. Todos ellos pueden ser dados de alta desde https://manage.windowsazure.com/ utilizando el botón NEW del menú inferior.

Dentro del archivo web.config debemos añadir el siguiente código en el apartado episerver.framework, que harán referencia a nuestras cuentas de Storage y Service Bus:

<blob defaultProvider="azureblobs">
  <providers>
    <add name="azureblobs" type="EPiServer.Azure.Blobs.AzureBlobProvider,EPiServer.Azure"
          connectionStringName="EPiServerAzureBlobs" container="mysitemedia"/>
  </providers>
</blob>
<event defaultProvider="azureevents">
  <providers>
    <add name="azureevents" type="EPiServer.Azure.Events.AzureEventProvider,EPiServer.Azure"
          connectionStringName="EPiServerAzureEvents" topic="MySiteEvents"/>
  </providers>
</event>

episerver.framework section

Cadenas de conexión en la sección CONFIGURE de Azure Web sites

Una vez que tenemos creados los servicios dentro de la plataforma, debemos añadir las cadenas de conexión de cada uno de ellos dentro de la configuración del sitio web. Tenemos dos opciones: modificar el archivo web.config o bien utilizar la sección CONFIGURE de Azure Web sites del portal:

EPiServer connection strings

Las cadenas de conexión que debemos utilizar deben tener como clave EPiServerDB (Azure SQL Database), EPiServerAzureBlobs (Azure Storage), EPiServerAzureEvents (Azure Service Bus). También es posible añadir las cadenas de conexión directamente en el apartado connectionStrings del archivo web.config, pero sería necesario jugar con las transformaciones del archivo para obtener las conexiones correctas dependiendo del entorno:

  <connectionStrings>
    <add name="EPiServerDB" connectionString="Data Source=tcp:YOUR_SERVER.database.windows.net,1433;Initial Catalog=episerverdatabase;User Id=YOUR_USER@YOUR_SERVER;Password=YOUR_PASSWORD;Connection Timeout=60;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
    <add name="EPiServerAzureBlobs" connectionString="DefaultEndpointsProtocol=https;AccountName=YOUR_ACCOUNT_NAME;AccountKey=YOUR_ACCOUNT_KEY"/>
    <add name="EPiServerAzureEvents" connectionString="Endpoint=sb://YOUR_ACCOUNT_NAME.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=YOUR_ACCOUNT_KEY"/>
  </connectionStrings>

Desplegar la solución en Microsoft Azure Web sites

El último paso que debemos realizar es el despliegue de la solución en Azure Web sites. Para ello hacemos clic con el botón derecho sobre el proyecto y seleccionamos la opción Publish…:

EPiServerSiteDemo Publish...

Seleccionamos el Web site que hemos creado en durante el proceso y, el único valor que debemos modificar es seleccionar la opción Update database y seleccionar la cadena de conexión que apunta a Azure SQL Database:

EPiServer update database

Hacemos clic sobre la opción Configure database updates, eliminamos el check de [Auto schema update] y añadimos el script ubicado en la carpeta packages > EPiServer.CMS.Core.7.15.0 folder > tools llamado EPiServer.CMS.Core.sql (este script sólo debe ser lanzado en el primer despliegue).

EPiServer CMS Configure database updates

Publicamos la solución y confirmamos el sitio web funciona correctamente.

EPiServer Alloy template on Azure Web sites

Si es necesario hacer nuevos deployments sobre el mismo web sites, debes seleccionar la opción Remove additional files at destination y deseleccionar Update database:

EPiServer new deployments

Espero que sea de utilidad.

¡Saludos!