En estos días nos ha tocado tener que hacer una implementación de una aplicación
Web, en un ambiente sumamente restrictivo. Para los que han pasado por dicha
Experiencia, saben que no es algo trivial, y normalmente (por lo menos hasta ahora)
suele ser un proceso mas o menos manual que requiere mucha documentación para
llevarlo a buen puerto, y además involucra tanto a desarrolladores como a los
administradores del servidor.
El objetivo de este articulo es presentarles desde el punto de vista del
desarrollador, y para los que aun no tengan el gusto de conocerlo, a una
herramienta que nos va a simplificar de manera sustancial el proceso anteriormente
mencionado.
Algunos de los elementos que debemos considerar a la hora de realizar dicha tarea
son:
- Contenido Web (paginas web, controles, imágenes, etc.)
- Configuración IIS
- Base de datos
- Ensamblados de la GAC, componentes COM, dependencias en general.
- Entradas en el registro
- Certificados de seguridad
- Pool de aplicaciones en donde va a correr la aplicación
Para realizar dicha implementación, existe algo llamado "Web Package", que visual
Studio 2010 genera utilizando una herramienta llamada MsDeploy. Que es un Web
Package? Es una unidad atómica, transparente y auto descriptiva que puede ser
fácilmente hidratada dentro de un servidor IIS para reproducir el sitio web que se
quiere implementar.
A continuación vamos a establecer los pasos necesarios para implementar una
aplicación web desde Visual Studio 2010.
1) Establecer la configuración del paquete a publicar.
Para ello hacemos clic con el botón derecho sobre la aplicación web y seleccionamos
del menú contextual la opción "Package/Publish Settings". También es posible
acceder a dicha configuración accediendo a las propiedades del proyecto web
(Project > NombreDelProyecto Properties).
Como se puede ver en la imagen anterior, en esta pantalla se pueden elegir que
elementos se deben incluir en la implementación, por ejemplo si solo se van a
empaquetar solo los archivos necesarios para correr la aplicación o el contenido
completo de la carpeta del proyecto, así como el nombre que tendrá la aplicación en
el IIS destino, entre otras cosas.
Algunos de los elementos que se pueden seleccionar y en los que nos detendremos
particularmente son:
- El Check box "Include all databases configured in Package Publish SQL tab"
- El Check box "create Deployment Package as zip file"
El primero le dice a la herramienta que debe incluir la base configurada en la
pestaña Package Publish SQL (la vamos a ver a continuacion)
La segunda nos permite seleccionar en donde se va a generar el empaquetado, que por
cierto, es un archivo zip.
2) Establecer la configuración de la base de datos a implementar
Si, como lo leen, esta herramienta es capaz de empaquetar la base e implementarla
en el servidor de producción (este es el momento en el que todos empezamos a
aplaudir).
Presionando el botón "Import from Web.config", le proporcionamos a la herramienta,
la cadena de conexión necesaria para conectarse a la base de datos que deseamos
empaquetar.
Un detalle importante es que han sido aplicada transformaciones al web.config, las
mismas se habilitan presionando botón derecho sobre el archivo web.config y
seleccionando la opción "Add Config Transforms" del menú contextual. Básicamente lo
que nos permite esto, es agregar, quitar o remplazar opciones del archivo de
configuración de manera sencilla en el servidor de producción. Este tema está fuera
del alcance del presente artículo, pero pueden leer más acerca del tema en:
http://www.codeguru.com/csharp/article.php/c17407 y
http://msdn.microsoft.com/en- us/library/dd465326.aspx
En la imagen anterior se muestra un ejemplo de transformaciones en el web.config.
Finalmente establecemos la información de la base de datos de origen:
- Marcamos la opción "Pull data and/or schema from an existing database"
- Seleccionamos las opciones de scripting de la base de datos, Solo el esquema o
esquema y datos.
- Podemos agregar cualquier script de personalizado, presionando el botón Add
Script.
Para terminar Ctrl+S o File > Save para guardar los cambios.
3) Construir el paquete
El último paso requerido (en lo que tiene que ver con el armado del paquete), es
construirlo. Para ello nos posicionamos en el proyecto web, botón derecho sobre el
mismo, y elegimos del menú contextual la opción "Build Deployment Package"
4) Implementar el paquete generado
Una vez que tenemos el paquete generado el ultimo paso es "instalarlo" en el servidor de producción.
Para implementar este paquete es necesario que la herramienta Web Deploy esté instalada en el servidor de producción.
La instalación de dicho paquete se puede realizar utilizando la línea de comandos (con el archivo.cmd que se genera) o a través de la UI del IIS Manager.
Pueden encontrar mas información acerca de como instalar dicha herramienta en
http://technet.microsoft.com/en-us/library/dd569059.aspx
Realmente el proceso es muy sencillo y como mencione anteriormente se puede hacer de dos maneras:
- Desde la consola, ejecutando el archivo .cmd que genera la herramienta
- Desde la UI de IIS como se muestra en la imagen a continuación
El proceso desde la UI es muy sencillo y básicamente nos pide la información que se necesita mediante pantallas autogeneradas que nos simplifican la tarea.
Recursos
Si tienen tiempo miren este Web Cast de Scott ... no tiene desperdicio.
http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx
Un Walk Through completito de esta herramienta
http://msdn.microsoft.com/en-us/library/dd483479.aspx
Excelente Blog con mucha documentación del tema
http://vishaljoshi.blogspot.com/2011/07/documenting-key-end-to-end-deployment.html
Espero les haya gustado y les sea de utilidad, hasta la próxima!